Symptom → fix

Troubleshooting

First step for almost everything: open Settings → Diagnostics & Logs and check engine health plus the live log stream. Then match your symptom below.

YouTube downloads fail (signature / challenge errors)

Likely cause: Missing or unhealthy JS runtime.

Fix: Open Settings → Diagnostics & Logs: js_runtime must read deno or quickjs. Re-run setup; on desktop check network access for the runtime fetch; on Android reinstall the full APK (contributor builds without bundled natives have no runtime).

Downloads are slow on small fragments

Likely cause: Parallel fetching off, or a DASH/HLS source.

Fix: Enable aria2c on Wi-Fi and raise chunks (max 16). Note: DASH/HLS streams always use the native downloader by design — that is expected, not a bug.

Progress sticks at 99%

Likely cause: Post-processing stage (merge / embed / chapters).

Fix: By design: streaming progress caps at 99% and only the terminal finished event reports 100%. Watch the live log for the post-processing stage instead of restarting.

Video engine (FFmpeg) reports missing on Android

Likely cause: Incomplete install — the APK on your device lacks bundled native binaries.

Fix: Reinstall the full APK from GitHub Releases (all variants ship FFmpeg inside — never copy library files around manually). Alternatively set a custom FFmpeg path in Settings if you maintain your own build.

A finished download never completes

Likely cause: Stale app version missing the completion-event fix.

Fix: Update to the latest release — completion events are now delivered reliably even when the app polls slowly. Then check the per-download log to confirm the file landed.

Chapters are not cut after SponsorBlock runs

Likely cause: Empty SponsorBlock categories, or embedding order confusion.

Fix: Make sure at least one SponsorBlock category (sponsor, intro, outro…) is enabled — with none selected there is nothing to cut. The cutter order (subtitles → chapters → metadata) is automatic; just re-run the item.

Geo-blocked / rate-limited errors

Likely cause: Region restriction or IP throttling.

Fix: The error card says when a VPN helps — follow its hint. Alternatives: a proxy, geo-bypass, a sleep interval between requests, or cookie login for your region.

Resume finds nothing after a restart

Likely cause: Expired or misplaced partial files.

Fix: Resume scans search both download roots recursively for .part files younger than 24h. Verify your download directory path in settings if partial files are stored elsewhere.

Subtitles download but are not in the file

Likely cause: Embedding switched off.

Fix: Turn on subtitle embedding in settings and confirm FFmpeg reports healthy in Diagnostics.

Downloads stall in background (Android)

Likely cause: Battery optimization killing the process.

Fix: Exempt Grablytic from battery optimization so the keep-alive service survives. Downloads degrade gracefully rather than crash, and resume on next launch.

Where logs live

Log locations

The app keeps two persistent logs: the interface log (flushed every 30 seconds, instantly on errors) and the engine log (rotating file). Both are viewable live with level and text filters in Settings → Diagnostics & Logs → Live Stream.

  • Android exports land in the app's external log-exports/ folder — no extra permission needed.
  • Desktop exports land in ~/Downloads/Grablytic-logs/.
Reporting a bug

Export your logs

Use the Export log file button in Diagnostics & Logs (toggle Include full log for stubborn issues — it attaches up to 512 KB instead of the 100 KB tail). Tokens and signatures are redacted automatically. Attach the export to your GitHub issue — duplicate crashes may already be auto-filed and deduplicated.

Related: FAQ · reinstall cleanly · docs hub