Repository navigation
HyperDL v1.3.56
b13560 · full-zip release · changes since
v1.3.55
Hardens vault isolation, download cleanup, and root control files while making URL handling and bundled-tool trust safer across the module.
Highlights
| Area | What changed |
|---|---|
| Vault privacy | Missing or unreadable domain lists now fail private, and vault routing stays intact through resolver fallbacks |
| Download integrity | Audio extraction, remuxing, and slideshow builds use temporary outputs so a failed attempt cannot destroy a good file |
| Safer inputs | Download, probe, and media fetches accept HTTP(S) only, with format and extension checks |
| Trusted tools | yt-dlp is pinned, checksum-verified, and never borrowed from PATH; TLS verification stays enabled |
| Native controls | Status parsing, PID identity checks, atomic writes, and file permissions are hardened |
| WebUI | URL and host handling is exact, storage errors no longer break the app, and long actions get realistic timeouts |
| Release safety | RUNPATH, build freshness, deploy PID, packaging completeness, and tag checks now fail loudly |
Vault and URL privacy
- Kept private media private when the domain list breaks. If the vault flag is enabled but
vault_domains.confis missing or unreadable, every host is treated as vault content instead of falling back to the public folder. - Removed nested vault paths. Vault routing now resolves
$OUTDIR/.vault/Streamonce, so a second pass cannot create.vault/Stream/.vault/Stream. - Preserved vault decisions through CDN fallbacks. Resolver fallbacks that return a different media host still inherit the original page's vault destination, so a signed CDN link cannot move private media into the public library.
- Matched hosts exactly. Downloader routing, DoH interception, the clipboard daemon, and WebUI URL detection now use exact or subdomain matches, so
notyoutube.comand other lookalikes no longer trigger YouTube handling. - Kept public scans out of the vault. yt-dlp fallback scans skip hidden directories, and a public request cannot adopt a file that happens to sit inside
.vault.
Downloads that clean up after themselves
- Fixed the resolver fallback crash. Fallbacks now forward
is_ytcorrectly instead of raisingTypeError: download_with_ytdlp_direct() got an unexpected keyword argument 'is_yt'. - Extracted audio from the real source. Direct audio downloads return the actual file, fallback audio uses the correct source, and FFmpeg now receives
-vnso a video stream cannot break MP3 or M4A conversion. - Protected older files during remux and conversion. Muxing, audio encoding, HLS remuxing, and slideshow creation write to hidden temporary files first, then replace the final path only after success.
- Stopped sidecars from masquerading as media. Destination results and fallback scans are filtered by media extension, so subtitles, thumbnails, and
.partfiles cannot replace the requested video or audio. - Cleaned failed output. Empty mux results, slideshow partials, temporary media sidecars, stale partials, and abandoned downloads are removed instead of being left for the next attempt to reuse.
- Rejected unsupported schemes. Downloader, probe, and media-fetch entry points now accept HTTP(S) only, and the native bridge validates URL and format arguments before starting work.
Trusted tools and native controls
- Verified yt-dlp before use. The downloader checks the pinned version and SHA-256 digest, writes the digest atomically, and never falls back to an arbitrary
yt-dlpfound onPATH. - Kept certificate checks on. TLS verification remains enabled when
cacert.pemis present, and FFmpeg receives the same certificate environment used by the downloader. - Parsed status without depending on whitespace. The native bridge now recognizes spaced JSON such as
"status": "downloading", and a dead PID with an active status becomespausedinstead of spinning forever. - Rechecked identity before killing. Pause, cancel, and deploy cleanup validate the numeric PID and the HyperDL process marker before sending signals, and probes are stopped as a process group.
- Hardened control files. PID, status, probe, and clipboard files use atomic writes and owner-only modes for private data, the last-clip cache resists pre-created symlinks, and logs are fixed at
0640. - Made clipboard handling deliberate. The daemon drains the clipboard helper, requires an explicit HTTP(S) URL, applies a timeout, and keeps its last-clip cache
0600.
Interface and release tooling
- Guarded WebView storage failures. Unavailable
localStorageno longer stops the app from mounting, and audio-format changes still reach the bridge when storage writes fail. - Fixed URL extraction edge cases. Uppercase schemes, subdomains,
instagr.am, and false YouTube lookalikes are covered by regression tests. - Extended long-action timeouts. Update checks, yt-dlp updates, cleanup, and probes now get enough time to return a real result instead of timing out silently.
- Made build and deploy fail safely. The build requires
patchelfandreadelf, strips Termux RUNPATH from the bridge, verifies generated payload freshness, validates deploy PIDs, and deletes incomplete release archives. - Added regression coverage. Python tests cover vault fail-private behavior, URL validation, yt-dlp verification, and download cleanup; WebUI tests cover host matching and shell escaping.
Install
| Method | Steps |
|---|---|
| Flash the zip | Download HyperDL-v1.3.56.zip below, then install it from KernelSU, APatch, or Magisk › Install from storage |
| Live deploy | ./build.sh --deploy updates the module on a connected device without a reboot |
Requires Android 10+ on ARM64 with root. Cookies stay optional for public media.
Full changelog: README.md
Update from your root manager or flash HyperDL-v1.3.56.zip.