Chatterbox swallows minus signs
What we shipped on 2026-08-25 We spent today fighting the subtle ways AI-generated content fails at the boundaries of speech and sight. It started with a realization that our TTS engine was silently inverting meaning in numeric contexts (PR #3329). A phrase like "dropped to -5 degrees" was being spoken as "dropped to 5 degrees," completely erasing the minus sign. We caught this by running a…
On August 25, 2026, engineers spent time addressing issues with AI-generated content at the boundaries of speech and sight. They discovered that their Text-to-Speech engine was silently inverting meaning in numeric contexts, such as speaking "dropped to 5 degrees" instead of "dropped to -5 degrees." By running a round-trip between TTS and Speech-to-Text using specific settings, they identified the problem with digit-adjacent dashes being ignored.
To fix this, they implemented a new "_normalize_dashes" pass within "_normalize_for_speech" to ensure these critical symbols survive the rendering boundary. Simultaneously, they recognized that short-form video captions were taking up excessive space on portrait frames, as ffmpeg's subtitle filter scaled font size inadequately for landscape to portrait transitions. They transitioned to resolution-independent sizing using caption_font_height_pct, which converted to ASS units at build time based on actual orientation.
Additionally, a logic guard was lost during an atom-cutover, allowing a placeholder-poisoning bug to re-emit [post/id] tags. This caused validation failures until the attempt budget was exhausted. They consolidated the grammar into a new shared service and added a deterministic scrub to prevent these placeholders from poisoning the system.
On the product side, they eliminated the "read the JSON" onboarding experience for Pro users, introducing "poindexter pro apply" to allow buyers to adopt a 949-key tuned seed with a single command. This change included bucketing keys so only adoptable defaults are written by a plain --apply flag, while rig-specific settings require an explicit opt-in.
The day concluded with hardening against instability and erasing ghosts. They fixed an 8-day silent 503 window where ComfyUI wasn't being freed after fan-out and added swap-exhaustion alerts to prevent OOM-kill cascades. They also performed a massive stale-reference sweep across 24 files, removing present-tense claims about deleted mechanisms like cross_model_qa and task_executor.
These fixes move the system away from "it works on my machine" towards a more robust system that handles different screen ratios, spoken numbers, and buyer environments. With Pro seed adoption streamlined, engineers can now focus on actual tuning rather than delivery plumbing.
Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.