todo: MoneyPrinterTurbo review and the OpenVoice feature gaps

Co-Authored-By: 's avatarClaude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0182DhR1eFNPQyGmDrpHbedY
parent 45cc7306
...@@ -19,3 +19,50 @@ For **unpixelate/upscale**, alternatives to Real-ESRGAN could include ESRGAN var ...@@ -19,3 +19,50 @@ For **unpixelate/upscale**, alternatives to Real-ESRGAN could include ESRGAN var
The API should accept a `model` or `backend` parameter so the caller can select which implementation to use. Missing models should fail gracefully with a clear error rather than silently falling back. The web UI should expose the available options (discovered at runtime based on what's installed/downloaded) as a selector in the relevant panels. The API should accept a `model` or `backend` parameter so the caller can select which implementation to use. Missing models should fail gracefully with a clear error rather than silently falling back. The web UI should expose the available options (discovered at runtime based on what's installed/downloaded) as a selector in the relevant panels.
Read the existing implementations before proposing changes to understand the current structure, file layout, and how the UI communicates with the backend. Read the existing implementations before proposing changes to understand the current structure, file layout, and how the UI communicates with the backend.
---
# TODO: review MoneyPrinterTurbo for ideas worth borrowing
https://github.com/harry0703/MoneyPrinterTurbo/blob/main/README-en.md
An automated short-video generation stack (script → stock/generated footage →
subtitles → TTS → assembled clip). Worth reading against what we already have in
`tools/videogen.py`, `tools/video_editor.py` and `tools/character_studio.py`:
where does it do something we don't, and is any of it worth lifting? Points of
comparison: how it plans a video from a single prompt, how it sources and cuts
footage, subtitle generation/burn-in, the TTS/voice pipeline, and how its web UI
is organised. Not yet evaluated — this entry is only a reminder to look.
# TODO: OpenVoice features missing from our voice cloning
https://github.com/myshell-ai/OpenVoice (MIT). We clone with F5-TTS
(`codai/api/voice_clone.py`, in-context: reference audio + its transcript) and
convert with seed-vc (`/v1/audio/convert`). OpenVoice splits the job — a base TTS
speaks the text, then a tone-colour converter re-paints the timbre — which buys
four things we lack, in rough order of value:
1. **Transcript-free cloning.** `extract_se()` works from audio alone. Today a
profile without a transcript cannot clone at all (`video.py` falls back to a
generic voice), and our Whisper `base` fallback is the least accurate tier — a
wrong `ref_text` visibly degrades F5. Store a tone-colour embedding on the
profile at extract time and reuse it per line.
2. **Cross-lingual voice.** The base TTS owns the language, so the accent doesn't
follow the reference. `tools/video_dubber.py` currently translates the text but
keeps the reference speaker's accent.
3. **Multi-clip embedding averaging.** `extract_se()` averages several references;
we store exactly one WAV per profile. Cheapest quality win available, and it
fits the existing `PATCH /v1/audio/voices/{name}` shape.
4. **Watermarking.** `add_watermark()` / `detect_watermark()` on synthesised
audio. We generate cloned speech of real people at scale and mark none of it.
Integration shape: OpenVoice pins older torch/librosa, so it belongs in an
isolated venv worker like pyannote / NeMo-Canary / H3 —
`requirements-openvoice.txt` + `tools/openvoice_service.py` +
`codai/api/openvoice_worker.py`. Then `/v1/audio/clone` gains an `engine` field
(`f5` default, `openvoice`), auto-selecting OpenVoice when a profile has no
transcript or the target language differs from the reference. Its converter sits
beside seed-vc; both are audio→audio timbre transfer.
Already done (2026-09-13, commit 45cc730): F5-TTS engine caching and reference
trimming to 15 s — those were our own bugs, not missing OpenVoice features.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment