-
Notifications
You must be signed in to change notification settings - Fork 1
Troubleshooting
Start with the narrowest failing layer: server, network, pairing, content, manifest, playback, Android capability, or the Linux graphical session.
Most sections apply to both Players. Linux player issues contains information about these Linux functions:
- Graphical session
- systemd service
- Framebuffer preview
- AppImage self-update
Check containers:
docker compose --env-file deploy/docker/.env -f deploy/docker/compose.yml psCheck health and readiness:
curl http://127.0.0.1:8080/healthz
curl http://127.0.0.1:8080/readyzRead logs:
docker compose --env-file deploy/docker/.env -f deploy/docker/compose.yml logs --tail=300 server postgresCommon causes:
- missing or invalid
POSTGRES_PASSWORD - PostgreSQL volume or permission failure
- unwritable
tilecast_datavolume - FFmpeg or FFprobe readiness failure
- port 8080 already in use
- reverse proxy pointing to the wrong service
Confirm:
TILECAST_PUBLIC_URL=https://the-exact-hostname.example.org
TILECAST_COOKIE_SECURE=trueThe browser origin, proxy hostname, and configured public URL must agree.
Discovery is optional and may fail because of:
- Docker bridge networking
- different VLANs
- guest Wi-Fi
- AP or client isolation
- multicast filtering
- routed networks
Enter the server URL manually.
Public hostnames require HTTPS. Plain HTTP is accepted only for private, link-local, localhost, and .local destinations.
Do not replace an HTTPS URL with HTTP to work around a certificate or proxy problem. Fix HTTPS.
- Codes expire after ten minutes.
- Confirm all six characters.
- Create a new request on the TV.
- Confirm the browser is on the same Tilecast installation.
- Check that an access gateway is not blocking player API requests.
Review the request before deleting anything.
If Studio recognizes the stable installation ID, use Repair and replace credential. This preserves assignments and revokes the old credential only after successful enrollment.
- Recently online: last contact within two minutes
- Stale: more than two and no more than fifteen minutes
- Offline: more than fifteen minutes
Check:
- TV and player power
- Wi-Fi association
- DNS
- server reachability from the TV network
- reverse-proxy WebSocket support
- changed Wi-Fi credentials
- captive portal
- Android background restrictions
- server logs
Cached playback can continue even while Studio reports a connectivity problem.
Check /readyz, free disk space, and server logs.
Open the asset to view its error. Failed items can be retried after correcting the underlying problem.
Large video files may need substantial temporary free space during processing.
Check:
- The URL works on another device on the same network.
- Public URLs use HTTPS.
- Private HTTP is enabled only when intentionally allowed by the server administrator.
- The top-level navigation host is allowed.
- JavaScript, DOM storage, and cookie policy match the site.
- The load timeout is long enough.
- The site does not require credentials Tilecast does not store.
- A fallback image or safe failure behavior is configured.
The server validates Website configuration but does not fetch the page on behalf of the player. A page can be valid yet unreachable from the TV network.
- Confirm the TV network can reach YouTube and the embedded player.
- Confirm the URL is a supported video or playlist URL.
- Check start and end values.
- Try the placeholder or fallback image behavior.
- Remember that YouTube is streamed and is unavailable offline.
Check in this order:
- Active emergency
- Winning schedule
- Direct fallback assignment
- Manifest synchronization state
For schedule conflicts, check priority, direct versus group targeting, effective start, timezone, enabled state, and device clock skew.
A pending downloaded manifest does not activate until every required file passes size and SHA-256 verification.
Check:
- player storage
- cache limit
- minimum free-space policy
- media delivery endpoint
- network interruption
- failed content items
- manifest error shown in Studio
The old working manifest should remain active.
Requested policy is not proof of capability.
Managed Kiosk requires compatible device-owner/device-policy provisioning and confirmed lock task. Consumer Fire TV firmware may not support it.
Enable the service manually in Android Accessibility Settings on that player. Server policy cannot grant the permission.
Tilecast may only be able to show black. It does not send direct HDMI-CEC commands.
Review the reported sleep strategy and the per-screen physical Power Assist test.
Use the local maintenance sequence:
Back, Back, Up, Down, Select
Enter the maintenance PIN, review self-test and recovery state, then retry or exit safe mode after correcting the failure.
Owners and Administrators can also use typed recovery and synchronization commands from Studio.
On the TV, allow Tilecast Player under Install unknown apps, then approve the Android or Fire OS system installer.
These states are expected. Tilecast does not claim silent installation.
These apply to the Linux AppImage. Server, network, pairing, content, and playback-selection sections above apply to Linux screens too.
For a systemd user installation:
systemctl --user status tilecast-player
journalctl --user -u tilecast-player -n 200 --no-pager
journalctl --user -u tilecast-player -fFor an interactive diagnostic run:
systemctl --user stop tilecast-player
TILECAST_LOG_LEVEL=debug TILECAST_WINDOWED=1 \
~/tilecast/tilecast-player.AppImageStop the interactive copy before restarting the service. Tilecast allows only one player instance at a time.
Confirm it is executable and owned by the kiosk user, and not run as root:
ls -l ~/tilecast/tilecast-player.AppImage
chmod +x ~/tilecast/tilecast-player.AppImageIf the terminal reports a FUSE error, start the Player with --appimage-extract-and-run. Make sure that the systemd service contains this argument.
This supported mode is the Tilecast default. It does not require a FUSE package and supports managed self-updates.
If systemd cannot open the display, the service probably started without a graphical session. The display environment value can also be incorrect.
Check DISPLAY and WAYLAND_DISPLAY.
Check the current graphical environment:
printf 'DISPLAY=%s\nWAYLAND_DISPLAY=%s\n' "$DISPLAY" "$WAYLAND_DISPLAY"Run the AppImage manually from a terminal inside the same desktop session. If that works, add the required display variable to the systemd drop-in. Also verify the service's ExecStart path exactly matches the AppImage location.
The saved address is stored at ~/.local/share/tilecast-player/server.json. Stop the service, remove only that file, and restart:
systemctl --user stop tilecast-player
rm ~/.local/share/tilecast-player/server.json
systemctl --user start tilecast-playerA credential enrolled with another Tilecast installation is not sent to the new server.
Remove or revoke the old screen in Studio when possible, then remove the credential and unfinished pairing session while preserving installation.json:
systemctl --user stop tilecast-player
cd ~/.local/share/tilecast-player
rm -f credential.json pairing-session.json
systemctl --user start tilecast-playerPreserving installation.json keeps the stable Player installation ID. Moving the complete data directory creates a new local identity.
This operation also removes cached content. After this operation, remove the old screen record in Studio.
Test with hardware video decode disabled, then software rendering:
TILECAST_HW_DECODE=0 TILECAST_WINDOWED=1 ~/tilecast/tilecast-player.AppImage
TILECAST_DISABLE_GPU=1 TILECAST_WINDOWED=1 ~/tilecast/tilecast-player.AppImageApply a successful setting with systemctl --user edit tilecast-player. Use H.264 video when possible.
Test the display resolution and refresh rate. On low-performance hardware, do not overlap videos in different Layout zones.
Before network disconnection, make sure that all media downloads are complete.
The service may run as a different user or with a different TILECAST_DATA_DIR than the interactive test:
systemctl --user show tilecast-player -p Environment
ls -ld ~/.local/share/tilecast-playerKeep the data directory on persistent local storage.
On X11, Tilecast captures the display framebuffer. Thus, video overlays and website content appear in the preview.
On Wayland, screen capture usually requires a desktop portal. The portal can show a prompt that an unattended kiosk cannot answer.
The Player uses window capture by default on Wayland. Window capture can omit hardware-overlay video and embedded website frames.
Use one of these options:
- Use X11 for the kiosk session.
- Accept and save the Wayland portal permission when the system supports this operation.
- Test with
TILECAST_PREVIEW_SCREEN_CAPTURE=1. - Set
TILECAST_PREVIEW_SCREEN_CAPTURE=0when the portal blocks startup.
A preview failure does not stop normal playback.
Studio-driven Linux updates require a managed AppImage. The --appimage-extract-and-run mode keeps the managed state because it preserves $APPIMAGE.
A development run does not have a managed state. A manually unpacked squashfs-root/AppRun also does not have a managed state.
Make sure that these conditions are correct:
- The kiosk user can write to the AppImage and its parent directory.
- The release is a Linux release with a signed update manifest.
- The device has sufficient free space for the staged AppImage.
- The systemd service points to the active AppImage.
Tilecast requests a display-sleep blocker. Desktop policies can still lock or suspend the session.
Disable the lock screen, screensaver, suspend, and hibernate functions for the kiosk account. Test the monitor sleep timer separately.
Active hours replace playback with black or the configured outside-hours presentation. An emergency has precedence over this behavior.
Collect the information listed in Support and Contributing without including credentials, tokens, signing keys, or private URLs.
Tilecast Wiki
Get started
Build playback
Operate players
Maintain Tilecast
Project