← All updates
Released: June 2026
Five things: a single video with no speech in it no longer takes down the rest of the batch, the Claude model list is current again, there's a one-click Cleanup button on the Dashboard, YouTube sign-in works for Brand and Workspace accounts, and metadata translation gives its VRAM back when it finishes.
The batch-killer
The headline fix. On a Crimson Desert batch, one _fr_final.mp4 with the host audio track stripped out knocked over 50 of the following 51 transcriptions in about 16 seconds.
- The translator was loading the 6 GB NLLB model before checking whether the transcript had any segments to translate. Silent footage, music-only videos, and localized variants with no host track all hit this. The failed load left the CUDA driver in a state where every worker spawned afterwards died in about 2 ms.
- Those cases now return "0 segments out" in milliseconds and exit cleanly, without ever touching the model.
- There's also a circuit breaker behind it: three workers dying in under 500 ms each in a row stops the batch with one clear "GPU state stuck - restart Loki Studio" message, instead of grinding through another 50 videos producing false failures while you watch.
- And a 1.5 s pause after any abnormal worker exit, because on Windows the CUDA driver sometimes hadn't finished reclaiming resources before the next worker started - which was its own small cascade.
Claude models are current again
- Anthropic retired the entire Claude 3 and 3.5 family in late 2025. The dropdown now lists what actually exists, cheapest first: Haiku 4.5, Sonnet 4.6, Opus 4.6, Opus 4.7, Opus 4.8, and Fable 5. New installs default to Sonnet 4.6.
- If your saved settings name a retired model, Loki remaps it to the nearest current equivalent at request time and logs a one-time warning, so nothing breaks while you're not looking.
- Fixed a stale four-model list in the C++ side that silently remapped every dropdown choice. Picking Sonnet 4.6 was actually saving
claude-3-opus-20240229. Calls still worked, thanks to the migration above, but the banner showed the wrong model.
- The brief system prompt is now cached after the first video in a batch and re-read at roughly a tenth of the input cost on every one after it. Nothing to turn on - it applies automatically on models that support it.
- Two Claude response states get plain-language errors instead of raw API codes: a safety refusal (with a nudge toward a different personality or a local model), and a prompt that overran the model's input window (with a nudge to lower the word budget).
Dashboard Cleanup
- A Cleanup button sits to the right of Refresh - with a deliberate gap between them, so it's harder to hit by accident. It returns a profile's folder to roughly its pre-Loki state in one click.
- It removes the
transcriptions/, metadata/, thumbnails/, done/ and failed/ folders, plus derived variants like *_final, *_edited, *_concat and their localized cousins.
- Your original source videos, EDL files, the
flair/ folder and the profile itself are left alone.
- The confirmation dialog shows the exact file count and total size before anything is deleted.
YouTube sign-in for Brand and Workspace accounts
Adding a channel worked for personal Gmail accounts and silently failed for everyone else, at the very last step, with a confusing "OAuth Callback" page.
- The callback handler's pattern required the auth code to be the first query parameter. Google puts it first for personal accounts, but injects
hd= and authuser= ahead of it for Brand and Workspace accounts - so the code was never found, even though Google had completed the consent and sent it back correctly.
- Any parameter order works now.
- Connect failures also surface Google's actual message instead of a bare HTTP status: quota exhausted for the day, access revoked, sign-in expired, or Google's own wording for anything less common.
Uploads that looked finished but weren't
- After a batch finishes, Loki now asks YouTube whether it actually kept each upload. YouTube has an undocumented per-channel daily cap on scheduled uploads, and when you cross it, it will acknowledge an upload and hand back a video ID for something it never publishes. Those videos used to sit in
done/ with nothing to indicate anything was wrong. They're now moved back so you can retry tomorrow, and the summary calls them out on their own line.
- Costs one YouTube quota unit per batch. Follows the existing "Verify uploads" toggle in Power User Settings, on by default.
- The Upload Complete dialog stopped lying about results. It used to report anything that didn't succeed as "Failed (moved to failed/)", including videos that were already in
done/ from a previous session and hadn't been moved anywhere. Results now split into succeeded, genuinely failed, quota-limited, ghost-dropped, already uploaded, and file not found - and only the categories with something in them appear.
Other fixes and improvements
- Metadata translation gives its VRAM back. It now runs in the same
LokiWorker.exe subprocess the Transcribe tab uses: the model loads once, translates everything, and the process exits so Windows reclaims the ~6 GB regardless of whether CTranslate2 cooperates. Before this, running translation back to back meant watching VRAM climb and not come down until you closed the app.
- The translator was silently returning your source text unchanged. Passing the literal string "auto" as the device doesn't throw - it just produces an instance whose
translate() passes text straight through. The log showed hundreds of successful translations, all of them still in the original language. The device is now resolved explicitly before the translator is built, and the log records which one it used.
- Finalize no longer fails with "av_interleaved_write_frame (audio) failed". Audio coming from a Timeline Editor export, an EDL assembly, or Premiere has discontinuities at the cut points, which could push the AAC encoder into emitting timestamps that don't strictly increase. The MP4 muxer rejected the resulting stream anywhere from 5 to 30 seconds into the mix. Timestamps are now nudged into order - one tick, inaudible - and anything still failing dumps enough diagnostics to name the packet at fault.
- The Finalize tab shows what it's doing. Rows turn amber with the current step ("3 tracks - mixing 45%", "3 tracks - normalizing...") instead of sitting silently at "ready" until each video suddenly goes green. On hour-long videos with normalization, that silence lasted minutes.
- The Upload tab remembers the channel you actually picked. It used to land on whichever channel was added most recently, so adding one a week ago meant re-picking it every launch.
- There's a crash reporter now. An unhandled native fault writes a small text file to
%APPDATA%/LokiStudio/crashes/ with the exception code, what it means, the faulting address, and the access type. Pure Win32, no Qt and no allocation, so it survives a process that's dying badly. Before this the app simply vanished and left nothing to work from.
- Remote LLM calls are pinned to HTTP/1.1 and serialized. Defensive - a 50-video metadata batch is 1,400+ API calls, and that's a lot of surface area for Qt's HTTP/2 long tail. No speed difference; the calls were already effectively serial.
- Worker exit logs include how long the worker lived, so a cascade - every worker dying in 2 ms - is obvious at a glance.
One thing to do after updating
Open Application Settings → LLM Providers → Claude and pick your model once. A saved retired-model name won't match anything in the new list, so the dropdown falls back to the first entry until you make a choice. After that one pick it sticks.
← Newer: v1.2.2·Older: v1.2.0 →·All releases