1 Running a Single Show Right Now
Xena Rathon edited this page 2026-07-17 18:32:13 -04:00

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

  1. 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)
    
  2. 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'
    
  3. Restart the container so gen_loop.sh starts a fresh sweep from the top of the (now one-line) file, instead of waiting for the in-flight sweep to finish + idle out:
    docker restart dubtitle-builder
    
    Restarting is safe by design — .dubtitles.done stamps mean already-finished episodes are skipped instantly, so this never re-does work.
  4. 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