Repository navigation
feat(whisper+captions): language detection, audio-reactive captions, multilingual defaults - #175
Merged
Merged
Conversation
Collaborator
Author
This stack of pull requests is managed by Graphite. Learn more about stacking. |
This was referenced Apr 1, 2026
vanceingalls
marked this pull request as ready for review
April 1, 2026 04:22
This was referenced Apr 1, 2026
vanceingalls
force-pushed
the
vance/whisper-improvements
branch
from
April 1, 2026 05:38
5360ae6 to
c47472a
Compare
8 tasks
miguel-heygen
approved these changes
Apr 1, 2026
vanceingalls
force-pushed
the
vance/whisper-improvements
branch
from
April 1, 2026 22:05
c47472a to
28e707c
Compare
2 tasks
vanceingalls
force-pushed
the
vance/dynamic-captions
branch
from
April 2, 2026 05:30
504b446 to
afa5021
Compare
vanceingalls
force-pushed
the
vance/whisper-improvements
branch
from
April 2, 2026 05:30
28e707c to
4b0ce61
Compare
4 tasks
vanceingalls
changed the base branch from
vance/dynamic-captions
to
graphite-base/175
April 2, 2026 05:47
vanceingalls
force-pushed
the
vance/whisper-improvements
branch
from
April 2, 2026 05:57
4b0ce61 to
436cd55
Compare
vanceingalls
changed the base branch from
graphite-base/175
to
vance/dynamic-captions
April 2, 2026 05:57
vanceingalls
changed the base branch from
vance/dynamic-captions
to
graphite-base/175
April 2, 2026 06:24
vanceingalls
force-pushed
the
graphite-base/175
branch
from
April 2, 2026 06:24
15dd060 to
159a2e7
Compare
vanceingalls
force-pushed
the
vance/whisper-improvements
branch
from
April 2, 2026 06:24
436cd55 to
7085bdc
Compare
- Auto-detect language and switch from .en to multilingual model when needed - Detect speech onset in WAV to strip hallucinated words before speech begins - Merge whisper-cpp token fragments: contractions (didn + 't → didn't), split capitals (C + aught → Caught), dropped-g (shin + in' → shinin') - Interpolate zero-duration word clusters for reliable karaoke timing - Replace non-null assertions with optional chaining in tests Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
vanceingalls
force-pushed
the
vance/whisper-improvements
branch
from
April 2, 2026 06:25
7085bdc to
4e51632
Compare
…y checks - Rewrite script-to-style mapping as energy detection table - Add mandatory animation design requirements (karaoke baseline, technique cycling) - Simplify dynamic-techniques.md to technique selection reference - Add transcript quality check with automatic retry rules - Add multilingual model guidance and decision tree Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Never overflow: hidden on caption containers — clips glow/scale effects - Music requires audio-reactive captions (any genre, any energy level) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The player needs window.__timelines registered immediately to start playback. GSAP timelines are mutable so tl.call() entries added later in the fetch callback still fire when seeked. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Documents the inline TRANSCRIPT requirement, JSON-quoted keys, and CSS class conventions needed for the studio caption editor to detect and edit captions. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Adds two lint rules for caption compositions: - caption_transcript_not_inline: warns when transcript is loaded via fetch() instead of an inline var TRANSCRIPT array - caption_transcript_parse_error: warns when the inline TRANSCRIPT array is not valid JSON (common with unquoted keys + apostrophes) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…-level GSAP tweens
…slation .en models (small.en, medium.en) translate non-English audio into English instead of transcribing it. This silently destroys the original language. - Add non-negotiable language rule to captions skill - Update model tables to default to models without .en suffix Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
dahans-msft2
pushed a commit
to dahans-msft2/hyperframes
that referenced
this pull request
Aug 6, 2026
…multilingual defaults (heygen-com#175) ## Summary **Whisper improvements:** - Auto-detect language and switch from `.en` to multilingual model when needed - Detect speech onset in WAV to strip hallucinated words before speech begins - Merge whisper-cpp token fragments: contractions (`didn` + `'t` → `didn't`), split capitals (`C` + `aught` → `Caught`), dropped-g (`shin` + `in'` → `shinin'`) - Interpolate zero-duration word clusters for reliable karaoke timing **Captions skill updates (folded from heygen-com#176):** - Rewrite script-to-style mapping as an energy detection table (high → low) with mandatory animation requirements: karaoke baseline, 2+ highlight techniques, kinetic exits - Replace `tl.call()` per-frame audio-reactive pattern with group-level GSAP tweens — read peak bass/treble for each group's time range and modulate entrance intensity at build time - Add transcript quality check with automatic retry rules (>20% music tokens = retry with larger model) - Add caption word structure lint rule (`.caption-group` + `<span>`) for studio editor compatibility **Multilingual defaults (folded from heygen-com#186):** - Default whisper model changed from `small.en` to `small` to prevent silent translation of non-English audio - Added non-negotiable language rule to captions skill ## Test plan - [ ] `pnpm test` passes (contraction merging, fragment merging, zero-duration interpolation, speech onset) - [ ] Transcribe non-English audio — verify it transcribes in original language, not translates - [ ] Skill files render correctly, cross-references resolve - [ ] `dynamic-techniques.md` audio-reactive section uses `tl.to()`/`tl.set()` only, no `tl.call()` loops 🤖 Generated with [Claude Code](https://claude.com/claude-code)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Summary
Whisper improvements:
.ento multilingual model when neededdidn+'t→didn't), split capitals (C+aught→Caught), dropped-g (shin+in'→shinin')Captions skill updates (folded from #176):
tl.call()per-frame audio-reactive pattern with group-level GSAP tweens — read peak bass/treble for each group's time range and modulate entrance intensity at build time.caption-group+<span>) for studio editor compatibilityMultilingual defaults (folded from #186):
small.entosmallto prevent silent translation of non-English audioTest plan
pnpm testpasses (contraction merging, fragment merging, zero-duration interpolation, speech onset)dynamic-techniques.mdaudio-reactive section usestl.to()/tl.set()only, notl.call()loops🤖 Generated with Claude Code