CodeVetter · Repo Unpack · Feature catalog
harry0703/MoneyPrinterTurbo
Features span a REST API for video/subtitle/audio generation and task management, a full Streamlit WebUI, and a CLI with batch mode. The provider surface is the headline: ~20 LLM providers, ~11 TTS engines, ~10 video material sources (three stock-footage search APIs, six paid text-to-video generators, an OpenAI-compatible image endpoint, and local files), two subtitle engines, three BGM modes plus two AI music services, and Upload-Post cross-posting. Supporting features include BGM/material upload endpoints, range-streaming and download endpoints, a 24h material search cache, Whisper transcription, i18n, task history, and an update checker.
- POST /api/v1/videos creates a full video task; POST /api/v1/subtitle and POST /api/v1/audio run the same pipeline truncated at intermediate stages via create_task(stop_at=...).
- Task management endpoints: GET /api/v1/tasks (paginated), GET /api/v1/tasks/{id} (rewrites stored file paths into /tasks/* URIs using the configured endpoint), DELETE /api/v1/tasks/{id} which refuses busy tasks (409) and rmtree's the task directory.
- LLM utility endpoints: POST /api/v1/scripts (script generation), POST /api/v1/terms (material search terms), and POST /api/v1/social-metadata (titles/descriptions/hashtags per platform).
- Media asset endpoints: GET/POST /api/v1/musics lists/uploads BGM (≤30 MB, UUID storage name, FFmpeg-validated) and GET/POST /api/v1/video_materials lists/uploads local clips/images into storage/local_videos with sanitized filenames.
- GET /api/v1/stream/{file_path} returns HTTP 206 range-streamed video with single-range parsing and 416 handling; GET /api/v1/download/{file_path} returns FileResponse — both confined to the tasks directory by file_security.resolve_path_within_directory.
- The CLI supports per-stage execution (--stop-at), --batch-file JSON/JSONL manifests, and mandatory --confirm-{wavespeed,seedance,ofox,metaso-minimax,muapi}-charge flags before paid generation sources run.
- LLM_PROVIDER_REGISTRY in app/models/llm_provider.py declares ~20+ providers (moonshot, openai, anthropic, gemini, deepseek, qwen, azure, volcengine, grok, minimax, mimo, cloudflare, modelscope, aihubmix, aimlapi, evolink, openrouter, api_route, ollama, claude_code, oneapi, litellm, groq, pollinations) with per-provider default models, base URLs, regional endpoints, and deprecated-value migration.
- TTS dispatch in voice.py covers Azure v1 (edge-tts), Azure Speech v2, SiliconFlow, Gemini, MiMo, MiniMax, ElevenLabs, Chatterbox, Kokoro, Fish Audio, VoxCPM (with reference-audio cloning inputs), and a 'no-voice' silent-audio mode; provider identity is encoded in voice-name prefixes (gemini:, mimo:, elevenlabs:, chatterbox:, kokoro:, voxcpm:).
- Video material sources include stock search (pexels, pixabay, coverr with a 24h result cache), paid text-to-video generation (wavespeed, volcengine_seedance, ofox, muapi, metaso_minimax, loomloom), openai_image (OpenAI-compatible /images/generations rendered into zoom clips), and local files.
- Subtitle generation supports 'edge' (from the TTS SubMaker timeline, sentence or word_by_word mode, pop_spring animation) and 'whisper' (faster-whisper transcription with model auto-download plus an LLM-free correct() alignment pass).
- Video rendering features: random/sequential concat, seven transition modes, clip speed 0.5-2.0, aspect ratios 9:16/16:9/1:1, cover/contain fit, video_count batch output, subtitle positioning (top/center/bottom/two_thirds_bottom/custom), and an FFmpeg encoder fallback chain (libx264, h264_nvenc/amf/qsv/mf/videotoolbox) that probes encoder availability at runtime.
- Background music modes: 'random'/'custom' from resource/songs and storage/bgm, plus AI-generated music via Sonilo (.m4a) or ElevenLabs (.mp3) registered in _VIDEO_MUSIC_PROVIDERS with per-provider prompt limits and graceful degradation to a warning when generation fails after the video is otherwise complete.
- Cross-posting via upload-post.com publishes finished videos to tiktok/instagram/youtube with configurable privacy and made-for-kids flags; _CROSS_POST_SOCIAL_PLATFORMS maps upload-post platform ids to LLM social-metadata platform names so titles/descriptions are generated per platform.
- The WebUI offers i18n via 14 locale JSON files, a task history/manager panel with restore, per-task live log streaming via a 0.5s-refresh Streamlit fragment fed by a thread-filtered loguru sink, voice preview, an onboarding tour, and an async GitHub release update checker.
- Optional integrations: TwelveLabs Marengo term reranking (extra dependency `uv sync --extra twelvelabs`, skipped when match_materials_to_script is on) and LoomLoom Market SkillBots for multi-candidate script generation and paid video clips with quote/confirm lifecycle.