Translation Queue
The Translation Queue is a real-time view of every translation job Sublarr is working on right now, plus the most recent finished and failed ones. Jobs stream their progress over WebSocket so the cue counter ticks up cue-by-cue without polling. From the queue you can cancel a runaway job, retry a failure, or jump into the resulting subtitle in the editor.
Where it lives
Section titled “Where it lives”Open it from:
| Surface | Notes |
|---|---|
| Settings → Translation → Queue | Dedicated page; the most complete view. |
| Activity → Translations tab | Same data with a smaller header for quick checks. |
| Dashboard → Activity Feed | Translation entries link straight to the queue page. |
Layout
Section titled “Layout”The page stacks three sections:
| Section | Content |
|---|---|
| Active jobs | Jobs in running or queued state. Live progress bars. |
| Recent completions | Last 50 finished jobs with cost, duration, and link to the result. |
| Failures | Jobs that errored, with truncated error message and retry button. |
Job card anatomy
Section titled “Job card anatomy”Each job in Active shows:
| Field | Effect |
|---|---|
| Series / Movie | What’s being translated. Click to open the source media in Library. |
| Source → Target | Language pair (en → de). |
| Backend | Which translation backend is doing the work. |
| Progress bar | Percentage based on cues completed / total cues. |
| Throughput | Cues/second over the last 60 s rolling window. |
| ETA | Estimated remaining time at current throughput. |
| Cost (running) | Tokens or characters consumed so far × backend’s per-unit price. Hidden for free backends. |
| Cancel | Cooperative cancellation — finishes the in-flight cue, rolls back partial output, marks cancelled. |
Recent completions
Section titled “Recent completions”Each row links to the actual subtitle the job produced. Sortable by:
| Column | Default sort |
|---|---|
| Finished at | Most-recent first (default). |
| Duration | Longest first — surfaces slow jobs. |
| Cost | Highest first — surfaces expensive jobs. |
| Cues | Largest first — proxy for content size. |
Clicking a row opens the Subtitle Editor on the produced file, with the source side-by-side for comparison.
Failures
Section titled “Failures”Failed jobs surface inline so you don’t have to dig through logs:
| Column | Effect |
|---|---|
| Series + episode | Same as active. |
| Error | One-line summary (e.g. “Backend rate-limited”, “Cue exceeds context”). |
| Backend | Which one failed; useful for “switch and retry” decisions. |
| Logs | Opens the relevant section of Logs filtered to the job ID. |
| Retry | Re-queues the job with the same parameters. |
| Retry on different backend | Picks the next backend in the fallback chain and queues. |
Cancellation
Section titled “Cancellation”Cancel is cooperative, not forceful:
- The cancel signal is recorded in the job state.
- The current cue’s translation finishes (in-flight HTTP request completes).
- Partial cues already written are dropped — no half-translated file lands.
- Job exits with state
cancelled.
Total time from click to terminal state is bounded by your backend’s per-request timeout (default 90 s).
Concurrency
Section titled “Concurrency”The queue respects Settings → Translation → Workers — usually 2 concurrent jobs. Additional jobs queue with state queued and start when a slot frees. The queued count appears in the header so you can see backlog at a glance.
Cost telemetry
Section titled “Cost telemetry”Every completed job writes a row to translation_events with cost, latency, token / character counts, and backend ID. The aggregated view lives in Cost & Memory; the queue shows the per-job number for situational awareness.
Filtering
Section titled “Filtering”A toolbar above the lists supports:
| Filter | Effect |
|---|---|
| Status | Show only running, queued, completed, failed, cancelled. |
| Backend | Only jobs from one backend — useful when comparing quality between backends. |
| Series | Only jobs for one show. |
| Date range | Limit the recent-completions list. |
Persistence
Section titled “Persistence”The queue is durable across restarts. If Sublarr is stopped mid-job, the job re-enters queued state on next boot and resumes when a worker picks it up — translation memory ensures no cue is paid for twice.
When something looks stuck
Section titled “When something looks stuck”| Symptom | Where to look |
|---|---|
Job is queued for hours | Workers maxed; raise Concurrent translations in Settings → Translation. |
Throughput is zero on running job | Backend not responding — check Settings → Translation → Backend health + Logs. |
Job shows failed with empty error | The error message was longer than the truncation limit; click Logs for the full trace. |
| All jobs failing on one backend | Auth issue (rate limited / invalid key) — check API Keys → Test for that backend. |