Running a Single Show Right Now
Sometimes you don't want to wait for the full anime_order.txt sweep to reach a show — you just
added something and want its dubtitles now. There's no CLI flag or API for this (the container has
no control port); the working technique is to temporarily narrow the queue file itself.
The technique
- Back up the current queue (don't skip this — it's usually a hand-curated priority list):
docker exec dubtitle-builder cp /config/anime_order.txt /config/anime_order.txt.bak-$(date +%F) - Replace it with just the one show (folder name must match
anime_order.txt's convention exactly — same string as the media folder, including any{tvdb-…}tag):docker exec dubtitle-builder sh -c 'printf "%s\n" "Show Name (Year) {tvdb-12345}" > /config/anime_order.txt' - Restart the container so
gen_loop.shstarts a fresh sweep from the top of the (now one-line) file, instead of waiting for the in-flight sweep to finish + idle out:
Restarting is safe by design —docker restart dubtitle-builder.dubtitles.donestamps mean already-finished episodes are skipped instantly, so this never re-does work. - When the one-off sweep finishes, the loop idles for
RESCAN_INTERVAL(6h default) before sweeping again — and it'll only re-sweep the one-line file, not your real queue. So once you're done, restore the backup and restart again:docker exec dubtitle-builder cp /config/anime_order.txt.bak-2026-07-17 /config/anime_order.txt docker restart dubtitle-builder
Why not docker exec generate.py --root ... directly instead?
generate.py does take a --root <path> (that's literally how gen_loop.sh scopes each show
internally), so you can invoke it ad hoc without touching the queue file at all. But the GPU card
this pipeline targets (a 6GB Pascal card, COMPUTE_TYPE=int8) is sized for exactly one large-v3
transcription at a time. If the main gen_loop.sh is mid-transcription on some other show when you
kick off a parallel docker exec, you get two Whisper loads fighting over VRAM — usually a CUDA OOM
on one or both. Narrowing the queue file lets the existing loop do the work serially instead, which
is why that's the recommended path, not a manual parallel docker exec.
What this does not touch
The CPU/LLM merge loop (merge_pass.sh, every MERGE_INTERVAL) is not scoped by
anime_order.txt at all — it already sweeps the whole MERGE_ROOTS library for anything with a
finished transcript waiting on repair/merge/mux. So narrowing the generate queue doesn't pause
repair+mux for the rest of your library; it only pauses new transcriptions elsewhere until you
restore the queue.
If the container is paused, not stopped
docker ps shows Up 4 days (Paused) for a paused container — it looks alive but neither loop is
doing anything. docker pause/docker unpause freezes/thaws the container's processes in place
(unlike stop/start, nothing resets). Check for this before assuming the pipeline crashed:
docker unpause dubtitle-builder