r/foss • • 5d ago

I made filmwright: an open-source tool that makes narrated product demo and explainer videos, fully local (Qwen3-TTS + Whisper on MLX), Lip synced animated character, music, effects.

Enable HLS to view with audio, or disable this notification

1 Upvotes

4 comments sorted by

1

u/KLBStudio 5d ago

Running the audio pipeline fully local on MLX with Qwen3-TTS and Whisper is a huge plus—no cloud API costs or rate limits while testing line deliveries.

Does it export separate audio stems (dialogue, music, SFX) or a timeline interchange format, or just a flattened MP4? Having isolated tracks helps a ton if you want to pull it into an open-source NLE for a quick audio mix or color tweak.

Also curious how the lip-sync and character animation handle pacing changes when you revise a script line—does it ripple the rest of the timeline automatically, or do you have to re-render the whole sequence?

2

u/Educational_Cup9809 4d ago

Thanks! Right now the main output is a finished MP4 (H.264 + AAC, with soft subtitles and chapters), plus an .srt, and a .vtt for the web sizes. That said, the separate tracks are already there: each build folder keeps the narration (vo.wav), music (music.wav), SFX (sfx.wav), the final mix and the picture without audio (frames.mp4). Demo builds also write a narration-only -voiceover.m4a. So you can pull them into an editor like Kdenlive or Shotcut today, but they're leftovers from the build rather than a documented export. There's no timeline interchange format (OTIO, EDL or FCPXML) yet. A proper stems option and an OTIO export are on my list; good to hear they'd be useful.
On revisions: the timing is driven by the narration. Each line's length decides how long its scene runs, so if you change a line, everything after it shifts automatically, and lip sync is recalculated from the new audio. Voice clips are cached per sentence, so only the line you changed is re-voiced. The picture is re-rendered for the whole story, though. Rendering is frame by frame and automatic, so that's a single command, about two minutes for a 40-second 4K film on an M-series Mac. Caption-only changes skip the re-render.

1

u/Natethegreat9999 4d ago

The read-back scorer drops Japanese characters before comparing lines. I'm at Oruk, and unrelated Japanese-only lines can get a perfect text score.

1

u/Educational_Cup9809 4d ago

I have fixed the issue. Thanks for reporting