English | ζ₯ζ¬θͺ
A desktop tool that takes an existing app repository and UI snapshots and outputs scene-by-scene prompts and reference images ready to paste into video-generation AIs
promovideo.mp4
"Ready-to-paste output."
Not clever copywriting β prompts with the right granularity to paste directly into video-generation UIs, and reference images that stay faithful to your snapshots.
It doesn't create the video itself. It crafts the ultimate "brief" for video-generation AIs.
Trying to create an app promo video with video-generation AIs (Google Veo / OpenAI Sora / MiniMax / Runway / Luma, etc.) quickly hits two walls:
- Prompt trial-and-error: Scene breakdown, camera work, duration allocation, and English prompt assembly take enormous effort.
- Drift from the real app: Generic prompts produce UI, tone, and style that look nothing like the actual app.
AppPromoVideo solves both at once β just feed it a repository and UI screenshots.
- π― Ready-to-Paste Output
Optimized English prompts for Veo / Sora / generic models. One-click copy to clipboard and paste straight into any video-generation UI. - π¨ Visually Faithful Reference Images
Extracts a color palette and style anchors from UI snapshots. Generates reference images faithful to the real app by compositing AI-generated backdrops with actual screenshots (rounded corners, drop shadows, headline overlays). - π‘οΈ Secure Local CLI Execution (Secure & Sandboxed)
Instead of calling LLM HTTP APIs directly, launches a locally authenticated CLI (claude -p/ Aider / custom, etc.) as a safe subprocess. Thorough sandboxing with Windows Job Objects / Unix pgids for reliable termination of descendant processes and read-only filesystem boundaries.
The LLM writes, Rust inspects, the CLI scans, the model paints the stage, and Rust composites the screen.
flowchart LR
subgraph Input ["π₯ 1. Input"]
Repo["π App Repository<br/>(code, README, config)"]
Snap["πΌοΈ UI Snapshots<br/>(real screen captures)"]
end
subgraph Pipeline ["βοΈ 2. Pipeline (Rust / CLI)"]
Brief["RepoBrief Extraction<br/>(codebase compression)"]
LLM["π€ Local LLM CLI<br/>(Claude / Aider / custom)<br/>*secure subprocess*"]
Inspect["Rust Inspection Loop<br/>(JSON Schema / duration / English check)"]
Brief --> LLM --> Inspect
end
subgraph ImageGen ["π¨ 3. Reference Image Compositing"]
Palette["Palette & Style Anchor Extraction"]
Compose["Backdrop Compositing & Headline Overlay<br/>(ComfyUI / Gemini / OpenAI)"]
Palette --> Compose
end
subgraph Output ["π¦ 4. Output Package"]
Scene["π¬ Scene-by-Scene Prompts<br/>(Veo / Sora / Generic)"]
RefImg["πΌοΈ Style Reference Images<br/>(backdrop + real UI composite)"]
Pkg["π promo.json + Markdown"]
end
Repo --> Brief
Snap --> Palette
Snap --> Compose
Inspect --> Scene
Compose --> RefImg
Scene --> Pkg
RefImg --> Pkg
- Automatic scene-by-scene prompt generation: Supports durations of 15s / 30s / 60s and aspect ratios of 16:9 / 9:16 / 1:1.
- One-click clipboard copy: Copy in the exact format for Veo / Sora (pure prompts without ratio/duration) or generic models.
- Multi-provider image generation: ComfyUI (local, no API key required), Gemini, and OpenAI (
images/edits) supported. - Headline / caption overlay: Layout catchphrases onto images with configurable font, position, and style.
- History (Runs): Past generations are safely isolated under
runs/<run_id>/and recallable at any time. - GUI & CLI: Ships with both a Tauri 2 desktop app and a
promoCLI for terminal / scripted automation.
- OS: Windows / macOS / Linux (cross-platform)
- Rust:
2024edition / rust-version1.85or later - Node.js: Stable (LTS recommended; for frontend build)
- Local LLM CLI: Authenticated
claude(Claude Code CLI) or Aider available on PATH
# 1. Clone the repository
git clone https://github.com/betyourluck/AppPromoVideo.git
cd AppPromoVideo
# 2. Run Rust workspace tests
cargo test --workspace
# 3. Launch GUI (Tauri 2 + Vue 3)
cd app
npm install
npm run tauri devTip
If you hit a build error caused by sccache, run with RUSTC_WRAPPER= unset.
# Frontend unit tests / type check / build
cd app
npx vitest run
npm run build
# Backend unit tests / lint
cd app/src-tauri
cargo test
cargo clippy+-----------------------------------------------------------------------------------------+
| [TopBar] AppPromoVideo [Runs] [Settings] [Theme] [Min/Max/X] |
+-----------------------+---------------------------------+-------------------------------+
| π InputPane | π¬ ScenePanel | π LogPanel |
| | | |
| - Repository selection| - App summary & differentiators | - Real-time progress logs |
| - UI snapshots | - Scene list (Prompt & Image) | - CLI subprocess tracing |
| - Duration / ratio / | - Copy (Veo / Sora / All) | - Errors & warnings |
| language | - Reference image trigger | |
| [ βΆ Analyze β Build | [ πΎ Export to folder ] | |
| Scenes ] | | |
+-----------------------+---------------------------------+-------------------------------+
- Launch & connectivity check: On startup the app automatically checks LLM CLI connectivity/authentication (
check_cli). - Configure inputs (
InputPane):- Specify the target repository path.
- Add UI screenshots (file picker / drag & drop / clipboard paste).
- Set the video concept, duration (15 / 30 / 60s), aspect ratio (16:9 / 9:16 / 1:1), and copy language.
- Analyze & build scenes:
- Click "Analyze β Build Scenes" to run
run_pipeline. - The right pane (
LogPanel) streams subprocess progress in real time.
- Click "Analyze β Build Scenes" to run
- Review & copy prompts (
ScenePanel):- View the app summary, differentiators, and per-scene prompts.
- Copy individual scenes or all at once, formatted for the target AI (Veo / Sora / generic).
- Generate reference images:
- Optionally run "Generate Reference Images" to create visual reference images (OpenAI / Gemini / ComfyUI).
- Export artifacts:
- Use "Open Folder" or "Export to Folder" to save the complete output package.
A promo CLI binary is included for terminal and scripted automation.
# Run analyze β scene composition β image generation β package export in one go
cargo run -p pipeline --bin promo -- run <path/to/repo> --concept "An innovative task management tool"
# Output only the RepoBrief (compressed summary manifest) for a repository (no LLM)
cargo run -p pipeline --bin promo -- brief <path/to/repo>
# Generate additional reference / scene images for an existing promo.json
cargo run -p pipeline --bin promo -- images promo_out/promo.json --images comfy
# Test headline overlay (visual check, no LLM)
cargo run -p pipeline --bin promo -- caption in.png "Noto Sans JP" 0 "Sync instantly." out.png
# Test backdrop + screenshot compositing (visual check, no LLM)
cargo run -p pipeline --bin promo -- compose backdrop.png screenshot.png out.png 16:9
# List available fonts
cargo run -p pipeline --bin promo -- fontsEach run is fully isolated under a unique runs/<run_id>/ directory.
promo_out/
βββ runs/
βββ 20260913_001234_abc1/
βββ promo.json # Complete JSON with scene structure, prompts, and metadata
βββ scenes.md # Human-readable Markdown prompt collection
βββ repobrief.txt # Compressed codebase context fed to the LLM
βββ images/
βββ ref_001.png # Style reference image harmonized with app UI
βββ scene_001_cut.png # Composited cut (backdrop + real screenshot with headline)
βββ ...
Built as a Rust workspace (4 crates) plus a Tauri 2 desktop application.
| Crate / Directory | Role | Responsibilities |
|---|---|---|
crates/promo_core |
Pure-function core domain | No process/HTTP side effects. Type definitions for RepoBrief / ScenePlan, mechanical JSON Schema generation, rescue of malformed LLM JSON (fenced_json), prompt text generation. |
crates/cli_runner |
Secure CLI subprocess execution | Launches a local LLM CLI as a subprocess. Safe argv construction (stdin/temp-file transport), scrubbing of auth env vars, reliable forced termination of descendants via Windows Job Objects / Unix pgids. |
crates/image_gen |
Image generation & compositing engine | Reference image generation via ComfyUI (polling), Gemini, and OpenAI. Dominant-color extraction from UI snapshots (Palette), rounded-corner / drop-shadow compositing, headline caption overlay. |
crates/pipeline |
Orchestration & CLI | I/O harness wiring the crates together. File collection, LLM interaction, Rust-side inspection loop (auto-regeneration on violation), package export, and the promo CLI binary itself. |
app/ |
Desktop GUI | Tauri 2 + Vue 3 + TypeScript. Calls the backend via #[tauri::command] and receives progress in real time via Tauri Events. Settings and history UI. |
| Provider | Integration | API Key | Status & Notes |
|---|---|---|---|
| ComfyUI | Local HTTP polling (/prompt β /history β /view) |
Not required | β Verified on real hardware. Fully local, free, and fast. |
| Gemini | Google GenAI REST API | Required | β Verified on real hardware. High fidelity and strong instruction following. |
| OpenAI | images/edits endpoint |
Required |
- Separated config storage:
- UI settings and CLI options:
%APPDATA%/jp.outcasts.apppromovideo/settings.json - Image-generation API keys:
.envin the same directory
- UI settings and CLI options:
- Credential leak prevention:
- Raw API keys are never exposed to the WebView (frontend); they are held and used only on the backend (Rust side) β the frontend only receives a boolean indicating whether a key is set.
- LLM CLI authentication troubleshooting:
- If the GUI repeatedly returns 401 (
authentication_failed) for the LLM CLI on startup, enable "Use OAuth login" in Settings (suppresses propagation ofANTHROPIC_API_KEYto the child process).
- If the GUI repeatedly returns 401 (
- Known constraints & pitfalls:
- Additional gotchas and workarounds are collected in
failures.md(PowerShell redirect conflicts,genbecoming a reserved keyword in Rust 2024, etc.).
- Additional gotchas and workarounds are collected in
Detailed design principles and operational rules are maintained in the following ledgers:
- π
specs/01_promo_pipeline.mdβ Spec, phase plan, and grounding limits - π
data_contract.yamlβ Types, limits, enums, and invariants (canonical source) - π§
CLAUDE.mdβ North star, architecture, and development rules β οΈ failures.mdβ Known pitfalls, workarounds, and incident ledger- π
history.mdβ Implementation log and history
Released under the MIT License.