Video-generation workflow: no audio perception + reactive-only artifact detection led to shipping undetected TTS defects twice
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
Across a multi-hour session producing a narrated explainer video (HTML/GSAP composition framework + local TTS voice cloning for narration), several defect classes and capability gaps surfaced — most only caught by the user, not by any automated check:
No audio perception. The TTS engine inserted a spurious garbled word at the start of ~13/15 narration clips. Every automated check available (lint, contrast, motion, frame-by-frame visual snapshots, ffprobe/volumedetect for silence and clipping) passed clean, because none inspect audio content. Only caught when the user personally listened to the render. Root cause was diagnosable after the fact (Whisper transcription + per-word confidence scores cleanly isolated the artifact from real speech), but this check was reactive, not a default step before treating generated audio as final.
Silent layout bug bypassing all automated checks. A missing position:absolute caused an opaque panel to cover brand text entirely. The lint/check tool reported 0 errors/warnings; only caught by manually reading a real rendered PNG frame.
Unresolved animation-timing defect. Timeline elements whose state changes were driven by .call()-based classList toggles (vs. plain property tweens) visually applied ~1s later than their computed position, specifically when the render pipeline seeks to arbitrary/non-sequential frame timestamps. immediateRender:false was a plausible fix (known GSAP/timeline-seeking gotcha) but was not confirmed before the session ended.
Every audio regeneration required a full manual animation re-sync, and each pass fixed the previously-reported sync issue while introducing a new one on the same joint. This recurred across 3 separate audio regenerations (engine swap, tempo adjustment, silence trim) and was never solved architecturally.
Screenshot/real-capture capability was broken in the primary path and had no obvious fallback. The in-app Browser pane's screenshot action failed consistently and reproducibly all session: "the Browser pane is not displayed, so the page is not compositing frames." The secondary path (Claude in Chrome) had zero connected browsers. A working third path (Playwright CLI, already installed locally, zero download needed) existed the whole time and worked immediately once tried — but wasn't discovered until very late, after multiple failed attempts and explicit user pushback. There's no guidance surfaced anywhere prompting a fallback to a local headless-browser CLI when the two primary screenshot mechanisms fail.
Two subagent failures mid-task: a copywriting subagent hit the 64,000-output-token ceiling (likely drafted all content before its first tool call instead of writing incrementally); a correction/proofreading subagent stalled with no progress for 600s. Both required the main session to take over the work directly.
What Should Happen?
Audio synthesized for a video deliverable should be transcribed and diffed against the source script by default before being treated as final.
Automated visual checks (lint/contrast/motion) should not be sufficient grounds to report layout as verified — real rendered-frame inspection should be standard.
When a primary screenshot/browser-automation path fails, there should be a documented, discoverable fallback (e.g., "try a local Playwright/headless-browser CLI") rather than requiring the agent to independently discover this after repeated failures.
If GSAP-based timelines are a recommended pattern for AI-driven video generation, the immediateRender + non-sequential-seek interaction should be documented as a known gotcha.
Error Messages/Logs
Browser pane screenshot (reproduced consistently, multiple times): screenshot failed: Screenshot timed out after 5s: the Browser pane is not displayed, so the page is not compositing frames. Display the pane and retry.
Claude in Chrome: list_connected_browsers → [] (no browsers connected).
No exceptions/crashes for the audio-content or animation-timing defects — these were silent content/quality failures; every tool involved reported success.
Steps to Reproduce
No minimal repro isolated — surfaced over a large, multi-stage real production task (script → TTS generation → HTML/GSAP animation authoring → render → QC), not a small reproducible snippet.
Claude Model
None
Is this a regression?
Yes, this worked in a previous version
Last Working Version
_No response_
Claude Code Version
2.1.229
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
Terminal.app (macOS)
Additional Information
_No response_