Repository navigation
Releases
HyperDL v1.3.56
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.
HyperDL v1.3.55
HyperDL v1.3.55
b13550 · full-zip release · changes since
v1.3.54
Stops the module from resolving media libraries through the Termux toolchain, trims the bundled Python runtime, and makes the build and release helpers refuse to ship a broken or accidental result.
Highlights
| Area | What changed |
|---|---|
| Library resolution | The native bridge no longer carries a Termux RUNPATH or accepts a Termux libavformat as proof that FFmpeg works |
| Bundled runtime | venv, distutils, and lib2to3 are gone from python314.zip; asyncio stays because yt-dlp needs it |
| Version helper | Unknown arguments now abort instead of silently bumping the version |
| Release metadata | update.json reuses the release notes intro verbatim again, and tests pin the contract |
| Build safety | The build fails loudly if the bridge still points back at the builder |
Honest media-tool detection
- Dropped the Termux library check.
runtime_libs_present()treated alibavformat.sounder/data/data/com.termuxas proof that FFmpeg works, because that path was left over from development. The wrapper pinsLD_LIBRARY_PATHto/system/lib64:/system/lib:<module>/lib, so a Termux copy could never load and the check reported a broken install as healthy. - Kept the check local to the module. Only
<module>/lib/libavformat.socounts now, because that is the one location the wrapper actually searches.
No more toolchain paths in the bridge
- Stripped the Termux RUNPATH. The Termux
clangdriver prepends its own toolchain path on every link, sobin/libhyperdl.soshipped with/data/data/com.termux/files/usr/bin/../../usr/libin its dynamic section. On a device that has Termux installed, the loader could resolvelibc.sofrom there, which defeats the standalone guarantee. - Failed the build instead of shipping it.
build.shremoves the RUNPATH after linking and aborts if anyDT_RPATH/DT_RUNPATHstill names that path, because a silent regression here is invisible until it breaks someone's install. - Confirmed the bridge only needs Android. The shipped bridge declares just
libc.soandlibdl.soinNEEDED, so it runs before anything is staged.
Leaner bundled Python
- Pruned unreachable modules.
venv,distutils, andlib2to3slipped past the stdlib skip list and added weight topython314.zipfor code nothing on device can reach. - Kept
asyncioon purpose. yt-dlp'sdownloader/websocket.pycimports it, so pruning it would have broken websocket downloads silently.
Build and release tooling that refuses accidents
- Validated every argument first.
bump_version.pywrites to all six versioned files as soon as parsing succeeds, and its loop silently ignored anything unrecognised. Running it with--helptherefore bumped the version instead of printing usage. Unknown flags, stray words, repeated bump types, and--noteswithout a value now exit2without touching a file, and--helpexits0. - Restored the notes contract.
update.json:notesmust be the release notes intro verbatim, because the root manager prompt and the release page should never describe the same build differently. v1.3.54 shipped a paraphrase; this release carries the v1.3.55 intro unchanged. - Pinned all of it with tests. Three new suites cover the version helper, the release metadata standard, and the standalone isolation rules, so a fresh clone catches these regressions without a device.
Install
| Method | Steps |
|---|---|
| Flash the zip | Download HyperDL-v1.3.55.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.55.zip.
HyperDL v1.3.54
HyperDL v1.3.54
b13540 · full-zip release · changes since
v1.3.53
Rebuilds the scraper recovery paths that dead endpoints had broken, pins the yt-dlp release with checksum verification, and fixes six WebUI bugs — the worst of which made open-file taps silently do nothing and delete actions report success on failure.
Highlights
| Area | What changed |
|---|---|
| Scrapers | Dead endpoints replaced and recovery paths repaired so Facebook, X, and Instagram resolve again |
| yt-dlp | Extractor pinned to a verified release, checked on every build |
| WebUI open | Tapping a file now actually opens it — the button silently ran status before |
| WebUI honesty | Delete, cookie saves, and cleanup no longer announce success when the bridge failed |
Repaired scraper recovery paths
- Replaced dead endpoints. Bilibili resolves through yt-dlp again after its direct API kept returning HTTP 412, because a fallback that always fails is worse than none.
- Kept the requested format. HLS remuxes that fall back to yt-dlp no longer discard the format the user picked, because a 1080p request silently delivering 360p is a bug, not a fallback.
- Covered the regressions. The recovery paths now have tests, so the next endpoint rot gets caught before release instead of after.
Pinned yt-dlp with checksum verification
- Pinned the extractor release.
ytdlp.pinlocks the version to2026.10.21and the build verifies its checksum, because an unpinned fetch could pull an untested extractor overnight. - Re-resolved on every run. The build gates on drift between the pin and what is installed, so a stale runtime is caught at build time instead of at download time.
- Kept startup fast. The pinned payload ships as optimized
.pyc, benchmarked to load faster than the plain source.
WebUI: open actions actually open
- Fixed the dispatch bug.
openandopen_folderwere rewritten tostatusinside the bridge command builder, so every tap returned download status instead of opening the file. The feature had never worked. - Quoted the action too. Paths were escaped but actions were interpolated raw, because the original builder only protected one of the two.
- Distinguished real failures. A missing binary, a path outside the download folder, and an empty response each get their own message instead of silence.
WebUI: honest success and failure
- Delete reports the truth. A rejected path returns
success:false, and a partial delete (two of three removed) now says exactly that instead of claiming all three, because the bridge answers{"success":true,"deleted":2}for partial work. - Cookie saves validate.
decode_failedandopen_failedget distinct messages, and an empty response is treated as a failure rather than a save, because cookies are a live login session. - Cleanup and toggles verify. Junk cleanup, notification mode, and vault-domain saves check the payload before claiming success.
- The status poller cannot leak. A bridge that stops answering stops the poll after roughly ten seconds and tells the user, instead of leaving a 400 ms timer running forever.
Install
| Method | Steps |
|---|---|
| Flash the zip | Download HyperDL-v1.3.54.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.54.zip.
HyperDL v1.3.53
HyperDL v1.3.53
b13530 · full-zip release · changes since
v1.3.52
TikTok photo posts with background audio now save as a single slideshow video when video format is picked, with tougher Facebook and X extractors behind it.
Highlights
| Area | What changed |
|---|---|
| TikTok slideshow | Photo posts with audio now mux into one MP4 on video requests instead of dropping the track |
More stream patterns plus og:video fallback catch links the old regexes missed |
|
| X / Twitter | Extra guest mirror keeps video resolution working when one endpoint is rate-limited |
TikTok photo posts finally honor the video format
- Muxed photo-plus-audio into one MP4. Video requests on carousels now build a slideshow with
ffmpeginstead of returning bare JPGs, because users asked for a video and got photos. - Kept Photos and Audio honest.
albumstill returns per-slide images andaudiostill returns the background track, because each format should do exactly what its label promises. - Fell back safely. A failed mux drops to the photo album plus the mirror resolver instead of crashing, because an on-device
ffmpegis not guaranteed on every setup.
Tougher Facebook extraction
- Matched more stream shapes. Added
hd_src/sd_srcpatterns next to the existing progressive and native URLs, because Facebook serves different markup per surface. - Used
og:videobefore giving up. Video requests now try the embed tag before the generic fallback, because a direct file beats another resolver round-trip.
Steadier X resolution
- Added the
vxtwittermirror. Guest resolution now fans out to three endpoints, because a single mirror gets throttled and kills downloads.
Install
| Method | Steps |
|---|---|
| Flash the zip | Download HyperDL-v1.3.53.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.53.zip.
HyperDL v1.3.52
HyperDL v1.3.52
b13520 · full-zip release · changes since
v1.3.51
Bundles the full FFmpeg shared-library closure so audio downloads work on phones without Termux, detects broken media tools honestly, and fails fast with clear errors instead of cryptic logs.
Highlights
| Area | What changed |
|---|---|
| Audio fix | FFmpeg and its library closure ship inside the module, so extraction works on clean devices |
| Detection | Health check probes the real binaries instead of trusting the executable bit |
| Errors | Audio fails fast with an actionable message when the toolchain is broken |
| Packaging | Broken media runtimes are rejected at build time, never shipped |
Fixed audio on Termux-free phones
- Bundled the full media closure.
ffmpegandffprobenow ship with every shared library they need, because the old build only worked where Termux happened to be installed. - Patched all runpaths. Every binary and library points at relative locations, so nothing references Termux paths at runtime.
- System libraries load first. Platform libraries always resolve to the system copy, because bundled copies shadowed them and broke linking on stock devices.
Honest media-tool detection
- Probe runs the real binary. Detection executes
-versioninstead of checking the executable bit, because a present-but-broken binary lied to the health screen. - Audio fails fast. Extraction checks for working
ffmpeg/ffprobebefore startingyt-dlp, because a mid-run failure only produced cryptic logs. - Clearer messages. Toolchain failures now name the cause and the remedy (
reboot, then try again) instead of dumping rawyt-dlpstderr.
Strict packaging gate
- Broken builds are rejected. Packaging requires the media binaries plus their
libavclosure, because an incomplete runtime previously passed verification and shipped. - Covered by tests. Detection, error mapping, environment ordering, and audio fail-fast all have unit tests, so regressions break the build instead of users.
Install
| Method | Steps |
|---|---|
| Flash the zip | Download HyperDL-v1.3.52.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.52.zip.
HyperDL v1.3.51
HyperDL v1.3.51
b13510 · full-zip release · changes since
v1.3.48
Locks down every root shell path, makes resolving visibly faster with live step feedback and background prefetching, overhauls the console log and motion design, and clears a second full audit with zero findings left open.
Highlights
| Area | What changed |
|---|---|
| Security | Shell-free media scan, open, delete, query, and clipboard paths |
| Reliability | Stale resume files restart clean, Instagram extractor bounded, atomic status writes |
| Speed | Leaner cold start, fairer probe scheduling, YouTube probes prefetched on paste |
| Console | Color-coded rows with level filters and a follow toggle |
| Motion | Every reveal animated, sheets and dialogs animate closed too |
| Layout | Slimmer header, history rows, clipboard banner, smarter buttons |
Security hardening
- No shell left in the bridge. Media scan, file open, removal cleanup, media query, and clipboard reads now use direct process spawning, so remote video titles can never break into a root shell.
- No shell left in the extractor. Media scanning spawns its helpers argument by argument instead of through a command string.
- Crash-safe status files. Every status write goes through a temporary file plus rename, including the daemon, so a kill mid-write never leaves truncated JSON.
- Escaped output. File names and pasted links are escaped before entering JSON, and media queries escape quotes, backslashes, dollars, and backticks.
- Null-safe parsing. Social platform responses now survive explicit
nullfields instead of crashing on them. - Exact vault matching. Required domains match whole lines only, so lookalike entries can no longer suppress them.
- Stricter plumbing. Daemon liveness uses the same process check everywhere, and utility downloads fail loudly instead of saving error pages as binaries.
Faster resolving
- Live step feedback. TikTok, Instagram, Facebook, and X now report each resolving stage, so the task card keeps moving instead of freezing on one line.
- Bounded Instagram extractor. A hung interpreter falls back after 25 seconds instead of stalling without word.
- Leaner cold start. Rare-path imports load on demand, cutting roughly 200ms off every fresh process start.
- Fairer probe scheduling. Probes run at the same priority as downloads instead of the lowest one.
- YouTube prefetch. Pasting a link quietly starts probing in the background, so the resolution sheet often opens with results ready.
Console and layout
- Readable activity log. Color-coded rows for errors, warnings, success, and info, level filter chips, JSON shortened to human lines, and an optional follow toggle.
- Slimmer chrome. The sticky header, history rows, action buttons, and clipboard banner all lost padding without losing touch targets.
- Smarter buttons. Download stays hidden until a link exists, saving cookies stays disabled until text exists, and update buttons keep a fixed width with fading labels.
- Correct language label. The subtitle chip reads Indonesian, and old notes were fixed to match.
Motion everywhere
- Smooth reveals. Buttons rise in, lists cascade, empty states fade, and notices slide down — nothing pops like a jumpscare.
- Animated dismissal. Sheets, dialogs, and previews slide and fade closed instead of vanishing.
- Calmer motion. Checkbox and health rows animate only color and border, and one-shot animations no longer hold compositor layers.
Install
| Method | Steps |
|---|---|
| Flash the zip | Download HyperDL-v1.3.51.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.51.zip.
HyperDL v1.3.48
HyperDL v1.3.48
b13480 · full-zip release · changes since
v1.3.47
Download several links in a row without babysitting the app, retry failures where they happened, grab whole playlists and subtitles, check for HyperDL updates without leaving the app, and manage the vault list safely.
Highlights
| Area | What changed |
|---|---|
| Queue | Line up links and let them download one by one |
| Recovery | Failed downloads keep a retry button where they failed |
| Media | Playlist ranges, subtitle tracks, and cover art in the picker |
| Control | In-app update check, notification modes, vault list editor |
Queue and recovery
- Download queue. The download card has a Queue button next to Download. Queued links wait their turn and start on their own, so pasting five links no longer means watching the first four finish.
- Failed ledger. A failed download now stays visible with its error message, a Retry button that reuses the same format, and Dismiss. Failures survive restarts, so nothing silently disappears.
- Queue and ledger both live on the device only and never leave it.
Media options
- Playlists. Flip the Playlist switch on a series link and optionally set a from/to range. Each item lands as its own file, named and numbered by the platform order.
- Subtitles. Video downloads offer None, Indonesia, English, or both. Tracks save alongside the video as separate subtitle files, and the picker tells you which languages a video actually has.
- Cover art. The resolution picker now shows the video thumbnail, so you can confirm the right video before committing to a large file.
- More audio targets. The console offers M4A and Opus next to MP3 and FLAC. Both are now real download paths instead of silently falling back to MP3.
Control and safety
- In-app update check. The console has a HyperDL update row next to the yt-dlp one. It shows the latest version with its notes and a link, instead of making you check the releases page by hand.
- Notification modes. Automation settings offer Normal (milestones), Verbose (every tick), and Silent. Previously these needed hidden flag files.
- Vault list editor. The vault tab now shows the watched domain list with a count, and saving validates every line. Bad lines are skipped instead of breaking routing.
- Tighter file access. Opening and previewing now enforce the same folder boundary as deletion, and the audio format setting rejects anything outside the four supported targets.
Install
| Method | Steps |
|---|---|
| Flash the zip | Download HyperDL-v1.3.48.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.48.zip.
HyperDL v1.3.46
HyperDL v1.3.46
b13460 · full-zip release · changes since
v1.3.45
Hardens the native bridge so the delete action can never touch files outside your HyperDL folder, keeps your login cookies owner-only, and makes downloads work on work profiles and secondary users.
Highlights
| Area | What changed |
|---|---|
| Safety | Deletion refuses any path outside the HyperDL download folder |
| Privacy | Cookie sessions are no longer readable by other apps |
| Compatibility | Downloads work on work profiles and secondary users |
Safety
- Deletion is now restricted to HyperDL's own folder. The bridge used to accept any path handed to it, so a malformed request could remove files outside your downloads. Every path is now checked against the output folder before anything is unlinked, and paths that try to climb out with
../are rejected outright. - Nothing changed about normal use: deleting a download from the list or clearing junk behaves exactly as before.
Privacy
- Cookie sessions are locked to owner-only. A cookie file is a live login session for your accounts, so it no longer sits in a world-readable file. HyperDL itself is unaffected, and the bridge already runs as root.
- The configuration folder is owner-only for the same reason. Downloaded media stays readable so your gallery and file managers keep working normally.
Compatibility
- Work profiles and secondary users can now download. Those users do not own
/storage/emulated/0, which is where HyperDL used to hardcode its download folder. The output location is now detected at startup, falling back to/data/media/0when needed, and the installer tells you when that happens. - On a normal single-user phone nothing changes: downloads still land in
Download/HyperDL/.
Install
| Method | Steps |
|---|---|
| Flash the zip | Download HyperDL-v1.3.46.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.46.zip.
HyperDL v1.3.45
HyperDL v1.3.45
b13450 · full-zip release · changes since
v1.3.42
Fixes YouTube downloads that failed with HTTP 416, stops release packaging from quietly filling up your phone's shared storage, and rebuilds the documentation around actual usage.
Highlights
| Area | What changed |
|---|---|
| YouTube | Resumed downloads no longer die with HTTP Error 416 |
| Storage | Release zips stay in internal builds, never copied to /sdcard |
| Docs | README rebuilt with usage, configuration, troubleshooting, and FAQ |
YouTube downloads
- Fixed
HTTP Error 416: Requested range not satisfiableon resumed downloads. YouTube hands out short-lived signed links, so a resumed request frequently asked for a byte range past the end of the newly issued file. YouTube now keeps its own temporary file instead of forcing resume flags. - Automatic recovery. If a range error still occurs, the stale partial is cleared and the download retries once from the start, so you never have to restart a job by hand.
- Resume still works. Interrupted downloads continue from where they stopped, and the retry stays invisible unless it is actually needed.
Build & docs
- No more shared-storage copies. Release zips are no longer mirrored to
/sdcard; internal builds land inreleases/only. Packaging stopped quietly eating into your free space. - README rebuilt with a table of contents, step-by-step usage, a configuration reference for cookies, audio format, the private vault, and the clipboard watcher, plus troubleshooting and FAQ sections covering the most common download failures.
Distribution
- Releases now live in this repository. Download from the Releases page.
- The separate
HyperDL-Releaserepo is kept as an archive for versions up tov1.3.42.
Install
| Method | Steps |
|---|---|
| Flash the zip | Download HyperDL-v1.3.45.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.45.zip.