Generate faceless video drafts using a safe, approval-gated pipeline. Create editable character profiles, deterministic scripts, and renders with optional voiceover. Final render blocked until explicitly approved.
youtube-factory-pro generates faceless video drafts using a safe, approval-gated pipeline designed for AI agents.
MVP includes:
Profiles are JSON files and can be edited, replaced, or expanded at any time.
Resolution order:
--profiles-dir (explicit path; centralized management)./<project>/profiles/ (project-local; recommended for iteration)youtube_factory_pro/profiles/Profile commands:
yfp profile listyfp profile get --name <profile>yfp profile set --name <profile> --json '{...}' [--overwrite]yfp profile delete --name <profile>yfp init (default) creates a project-local ./profiles/ folder to make profiles easy to edit without touching the package.
init project bundlegenerate script and plantts voiceoverrender preview (watermarked)approve (writes approval.json)render finalyfp init --project ./projects/my_project --profile default_host --topic "3 tips for better productivity"
yfp generate --project ./projects/my_project
pip install -e ".[tts]" # optional
yfp tts --project ./projects/my_project
yfp render preview --project ./projects/my_project
yfp approve --project ./projects/my_project --note "Approved"
yfp render final --project ./projects/my_project
Project bundle files:
project.json, script.json, plan.json, approval.jsonRender outputs in ./out:
*_preview_*.mp4, *_final_*.mp4*_preview.srt, *_final.srt*_preview_*.json, *_final_*.json (render metadata)shell=True usage.Exit codes:
0 success2 final render blocked due to missing approvalProfiles may include an extends field to inherit from a base profile and override fields. Use yfp profile get --resolved to see the merged result.
Use yfp doctor [--project <dir>] to validate ffmpeg/drawtext, optional TTS, project directories, and profile resolution.
When you run yfp approve, if a preview video exists the approval file will store a preview_sha256 hash. Final render verifies the hash matches the latest preview to prevent rendering a different plan than the approved preview.
| Error | Cause | Solution |
|---|---|---|
ffmpeg not found | FFmpeg not installed or not on PATH | Install via brew: brew install ffmpeg |
Final render blocked | Approval not yet given | Run yfp approve first to unblock |
Profile not found | Profile name doesn't exist | List available: yfp profile list |
Project not found | Project directory doesn't exist | Create with yfp init first |
TTS dependency missing | Optional TTS not installed | Run pip install -e ".[tts]" |
ffmpeg installed and on PATHpip install -e ".[tts]"