-
Notifications
You must be signed in to change notification settings - Fork 2
Troubleshooting
The questions that actually come up. If your problem isn't here, file an issue — chances are someone else hit the same thing.
Android won't install APKs from unknown sources by default. Per-app permission flow:
- Open the file manager or browser you used to download the APK.
- Tap the APK once. Android shows the "Install blocked" dialog with a Settings button.
- Tap Settings, toggle Allow from this source for that specific browser/file manager.
- Go back, tap the APK again, install.
You only do this once per source app.
Two cases to know:
-
Pre-
v0.4.15debug build →v0.4.15+build. The signing fingerprint changed when we checked in a stable debug keystore (#15). Uninstall the old debug build once, then install the new one. Library, voices, and progress are not preserved across this one-time migration. - Release build → debug build (or vice versa). Different signing certificates. Uninstall the other one first.
From v0.4.15 onward, debug-to-debug upgrades and release-to-release upgrades work in place.
The APK download was incomplete or corrupted. Re-download from the Releases page — verify the file size matches the GitHub asset size before opening.
Voices download from voices-v2 on techempower-org/VoxSherpa-TTS. Two things to check:
- Network. First-launch voice download requires Wi-Fi by default. Toggle off Settings → Plugins → Wi-Fi only if you want to download on cellular.
- Available storage. Piper voices are 14–30 MB; Kokoro is ~330 MB. If your device is near full, the install fails silently. Free 500+ MB and retry.
If it still hangs, Settings → Voice library → long-press the voice → Delete partial and retry the download.
You're probably on an outdated app build whose VoiceCatalog.kt references voices that have been replaced or removed in voices-v2. Update to the latest release — the catalog is compiled into the APK, so app updates pick up catalog changes.
Symptoms: the audio pauses mid-chapter, refills, resumes. The PCM cache is doing its job — the engine couldn't keep up, so it's buffering ahead. To minimize this:
- Settings → Performance → Engines / Threads. Bump engines from 1 → 2 (or higher if you have 4+ cores). Each engine adds memory pressure (~50 MB for Kokoro), so don't go higher than your device's RAM allows.
- Settings → Performance → Buffer chunks. Higher = more headroom before underrun, more delay before playback starts. The slider takes effect mid-listen.
- Use a Piper voice instead of Kokoro on slow hardware. Kokoro is higher quality but ~3× slower per chunk. Piper-medium is the sweet spot on Helio P22T-class chips.
If you've been on Candela since v0.4.x and never re-downloaded voices, the old voices-v1 INT8-quantized models may still be on disk. Settings → Voice library → long-press → Delete, then re-download — the app pulls fp32 weights from voices-v2.
Settings → Account → Candela notification permission must be granted. The lock-screen tile is what keeps the playback service foregrounded; without the notification permission, Android kills the service when the screen locks.
Update to v0.4.83+. The Library Resume CTA is now smart-resume — it respects your last paused/playing intent so it won't auto-play unless you were playing when you last left.
v0.5.46+ release builds cold-launch in ~0.8 s on a Galaxy Tab A7 Lite (down from 6.7 s) thanks to R8 + Baseline Profile + isDebuggable=false. If you're on a CI-built debug APK from main (which has isDebuggable=true), expect closer to the older numbers — debug builds skip R8 entirely. Pick a tagged release for the optimized path.
In Settings → Voice & Playback → Azure, the most common causes:
-
Region mismatch. The region must match exactly what's in the Azure portal (e.g.
eastus, notEast US;westeurope, notWest Europe). - Key has expired or been rotated. Pull a fresh key from the Azure portal.
-
Network blocked. Azure Speech requires HTTPS to
<region>.tts.speech.microsoft.com. Some captive Wi-Fi blocks this — try mobile data.
Expected behavior — when Azure errors mid-chapter, Candela falls back to your selected local voice for the rest of the chapter so playback doesn't stop. Watch for transient HTTP 429 (rate limit) or 5xx errors; the engine retries before falling back. If it falls back every chapter, your subscription tier may not support the voice you picked (Dragon HD is on a separate tier from HD Neural).
Candela shows a per-chapter cost estimate before each Azure-narrated chapter starts (under the play button). The figure uses the VoiceCost.centsPer1MChars = 3000 constant in VoiceCatalog.kt, which is Azure's standard rate as of late 2025. If Azure has raised pricing on your tier, that constant will lag — file an issue and we'll bump it. The actual bill is whatever Azure charges; Candela doesn't see your billing.
Codes from https://github.com/login/device are valid for 15 minutes. If you exceed that, hit Cancel → Try again in the Candela sign-in flow to get a fresh code.
Private-repo access is opt-in. Settings → Plugins → GitHub → Allow private repos must be on, AND your initial OAuth grant has to include the repo scope. If you opted out of private repos at first sign-in, sign out and back in — Candela will re-request consent with the wider scope.
Two checks:
- Hit pull-to-refresh on the My Repos tab. The list lazy-loads on first open.
- Check Settings → Plugins → GitHub → Status for the rate-limit indicator. Authenticated requests have 5,000/hr — you should never hit this casually, but a runaway poll bug could.
Royal Road, GitHub Search, RSS, Outline, and MemPalace tabs all use infinite scroll. If new pages stop loading:
- Network. Check connection. The "no more results" sentinel and a network error look the same in the UI. (We're working on better differentiation in the next polish round.)
- End of source. Some sources don't have infinite results — the curated GitHub registry is a finite list, your follows tab is bounded by your follow count, etc.
- Filter too narrow. Royal Road's filter sheet supports tag exclude / content-warning combos that can produce empty pages — try a broader filter.
Settings → Plugins → EPUB prompts for a folder via the Storage Access Framework. Pick a folder that contains .epub files (not the EPUBs themselves — a folder of them). Candela parses each EPUB's .opf manifest to extract chapters.
This was a real bug (fix in 7904232). Update to v0.4.71 or newer — the chapter routing was being short-circuited on duplicate-keyed feed items.
Outline self-hosts; Candela needs your Outline server's URL + an API token from your Outline user settings. Settings → Plugins → Outline → URL must include the protocol (https://outline.example.com).
Fresh installs land pre-configured for the TechEMPOWER resource library on the Notion source, but until you paste a Notion integration token the source returns AuthRequired. Tap Set up Notion in Settings in the banner to open Settings → Plugins → Notion, paste an integration token from notion.so/my-integrations, and the demo content lights up.
v0.5.51 added these four backends (Telegram, Palace Project, Slack, Matrix) as default-OFF on fresh installs — the onboarding is high-friction (bot tokens for Telegram/Slack, homeserver + access token for Matrix) so they need an explicit opt-in. Settings → Plugins → (source name) → toggle on, then provide the credentials.
MemPalace is LAN-only by design. Candela connects to your palace daemon's HTTP API; both phone and palace must be on the same network. If the daemon is reachable from a desktop browser but not from Candela, check Settings → Plugins → Memory Palace → Daemon URL — it has to be the IP your phone can reach (often http://<host>.local:<port> or http://10.x.x.x:<port>).
Wear OS support is experimental. The :wear module builds and pairs via play-services-wearable, but transport-state syncing is rough. Sideload at your own risk; expect to fall back to the phone for now.
If your problem isn't here:
- Search open issues.
- Search closed issues — most users' problems are reproductions of something we already fixed.
- File a new one with: device model, Android version, app version (Settings → About), and what you did right before the problem.
Start here
Using Candela
- Fiction sources
- Reading & library
- Export & extras
- Voices
- Voice catalog
- AI chat
- Cloud sync
- Accessibility
- Settings reference
- Troubleshooting
Developer
Project