Video renders depend on Playwright, FFmpeg, and disk space. When a render fails, the failure mode points at one of these.
Playwright launch failed
The render engine uses a bundled Chromium via Playwright. If the binary is missing or incompatible with your OS:
- Desktop app — uninstall and reinstall; the installer ships the correct Playwright build for your platform.
- Self-hosted —
cd backend && ./venv/bin/playwright install chromiumto re-download.
The log line is usually Could not launch Chromium or Executable doesn't exist at ….
FFmpeg failed mid-encode
Look for ffmpeg lines in server.log (see Backend Will Not Start for the log locations). Common causes:
- Dimensions not divisible by 2 — H.264 requires even width and height. The editor warns about this in the export dialog; choose a different resolution.
- Codec not available — H.265 (HEVC) needs the right FFmpeg build. The bundled FFmpeg supports it; self-hosted installations may not.
- Disk full — the encoder fails when it cannot write the output. Check disk space.
Out of memory
Long renders at high resolution can exceed available RAM. Symptoms: Chromium tab crashes, FFmpeg killed by the OS.
- Lower the export resolution.
- Close other heavy apps.
- For long projects, render in chunks and concatenate.
Frames render but the file is corrupted
Usually FFmpeg encoding interrupted at the end. Causes:
- App quit during render — relaunch and try again.
- Disk filled at the last moment — free space and retry.
The render writes to a temp file and renames at the end; if the rename failed you may find a *.tmp file in the board folder. Safe to delete.
Long renders die at the same frame every time
A bad source asset is the most common cause. The renderer reads each frame, and a corrupted MP4 in the timeline can crash Chromium predictably.
Bisect: render the first half, then the second half. Whichever fails contains the bad asset. Open suspicious clips in the lightbox and watch for stutter.
Cancel a stuck render
The progress overlay has a Cancel button. If the UI is frozen, kill the render worker process:
# Desktop app
ps aux | grep moodboard-backend | grep -v grep
kill -9 <pid>
# Self-hosted
kill -9 $(lsof -ti:3003)
The app restarts the worker on the next render.
Leave a Reply