Brandly CLI
AI product video orchestrator — create professional product videos with AI. Works with any AI tool (OpenCode, Codex, Qwen Code, Claude Code, etc.) via CLI, agent tools, and MCP server.
🎬 What is Brandly?
Brandly helps you create professional product videos using AI — from concept to final render, all from the command line or your favorite AI assistant.
✨ What You Can Do
| Capability | Description |
|---|---|
| Generate images | Text-to-image, image-to-image with Agnes AI |
| Generate videos | Text-to-video, keyframe-controlled, reference-based (consistent characters/objects) |
| Generate audio | Background music, voiceovers (TTS) via MiniMax |
| 3D spatial reference | Blender PlayBlast for precise camera/lighting reference frames |
| Shot-by-shot production | Plan → generate → assemble with retries, resume, and canonical naming |
| Post-production | Stitch, color-grade, captions, dubbing, beat-sync, thumbnails |
| Quality gates | Anti-slop/drift verification before each step |
| Multi-platform export | TikTok, Instagram Reels, YouTube Shorts, generic MP4 |
| Schedule & publish | Direct to TikTok/IG/YouTube (dry-run first, credential-gated) |
🎯 Who Is This For?
- Marketers & creators — make product videos without a production team
- Developers — integrate video generation into your apps/agents via CLI or MCP
- AI enthusiasts — orchestrate multi-modal AI workflows (image + video + audio)
🚀 Quick Start (5 minutes)
1. Install
ash pip install brandly-cli
2. Get an API Key
- Sign up at Agnes AI
- Get your API key
- Set it as environment variable:
`ash export AGNES_API_KEY="your_key_here"
Add to your ~/.bashrc or ~/.zshrc for persistence
`
3. Create Your First Video Project
`ash
Interactive project setup
brandly init -n "My Product" -i "A sleek wireless charger that doubles as a desk lamp"
Or one-liner:
brandly init -n "Wireless Charger" -i "Minimalist 2-in-1 charger and lamp, premium materials" -s cinematic -b 200 `
4. Generate Shots (Director Mode)
`ash
Let the Director agent plan and execute
brandly run <project_id> --execute --until produce
Or step-by-step:
brandly run <project_id> --execute --until script # Write shot list brandly run <project_id> --execute --until asset # Generate shots brandly run <project_id> --execute --until validate # Quality check brandly run <project_id> --execute --until publish # Export & schedule `
5. View Results
`ash
Open visual timeline editor
brandly timeline <project_id>
Or check status
brandly status <project_id> `
📋 Core Workflows
For Creators (Human-Driven)
`ash
1. Create project
brandly init -n "Product Name" -i "Brief description" -s cinematic
2. Review & approve the shot plan
brandly status brandly approve script
3. Generate assets (one shot at a time, resumable)
brandly run --execute --until asset
4. Quality check
brandly gate --all-scenes
5. Assemble & export
brandly run --execute --until publish `
For AI Agents (Tool-Driven)
Brandly exposes 15 agent-callable tools via MCP server:
`ash
Start MCP server (for Cursor, Claude Code, etc.)
brandly mcp serve
Or use tools directly:
brandly tools --json # List all available tools brandly tools call produce_shots --project_id --shots 5 brandly tools call gate_scene --project_id --scene_id S01 `
Available tools: init_project, produce_shots, gate_scene, stitch_video, export_platforms, publish_video, estimate_cost, check_quota, egister_reference, ecover_job, and more.
🎨 Common Commands Cheat Sheet
Project Setup
ash brandly init -n "Name" -i "Idea" -s cinematic -b 500 # New project brandly status <id> # Full project overview brandly approve <id> <phase> # Human gate approval
Generation
ash brandly run <id> --execute --until produce # Full auto-pipeline brandly run <id> --execute --only shot-03 shot-07 # Regenerate specific shots brandly produce <id> --shots shots.json --interval 60 # Manual shot-by-shot brandly video <id> -p "prompt" --style commercial # Single video clip
Quality & Validation
ash brandly gate <id> --all-scenes --json # All scenes quality check brandly gate <id> --element ./clip.mp4 --ref ./ref.png # Single element check brandly validate <id> # Virality scoring
Post-Production
ash brandly stitch clip1.mp4 clip2.mp4 --ratio 2.39:1 --fit crop --output final.mp4 brandly export <id> --platforms tiktok,instagram,youtube brandly thumbnail <id> --style cinematic brandly voice-match <video> --source en --target es # Dubbing brandly beat-sync <video> <music> # Cut to beats
Publishing
ash brandly publish <id> --dry-run # Preview what will happen brandly publish <id> --platforms tiktok,instagram # Schedule posts brandly config set tiktok <token> # Store credentials
Utilities
ash brandly estimate --style cinematic --shots 8 # Cost preview brandly quota # Daily quota remaining brandly timeline <id> # Open visual editor brandly director # Show agent prompt
🎬 Video Generation Deep Dive
Styles Available
| Style | Best For |
|---|---|
| cinematic | Storytelling, brand films |
| commercial | Product demos, ads |
| ugc | TikTok/Reels native feel |
| montage | Fast-paced showcase |
| continuous | One-take style |
| unboxing | Product reveals |
| lifestyle | In-context usage |
Reference Images (Consistency)
`ash
Use reference images for consistent characters/objects
brandly video -p "hero walks" --reference-images char.png,prop.png
Or register references first (recommended for multi-shot)
brandly reference --image char.png --subject-type character brandly reference --image prop.png --subject-type prop `
Keyframe Control
`ash
Start from first frame, end at last frame
brandly video -p "transition" --mode keyframe --first-frame start.png --last-frame end.png `
🤖 Director Agent (AI-Orchestrated)
The Director is an agent prompt that knows how to drive Brandly end-to-end:
`ash
Print the prompt for your AI tool
brandly director
Or run directly (experimental)
brandly run --execute --yes `
Director phases: rends → concept → script → sset → udio → e_edit → alidate → publish
Each phase has:
- Defined inputs/outputs (see randly plan --json)
- Gate command for verification
- Cost estimate before execution
📊 Monitoring & Debugging
`ash
Project status dashboard
brandly status
Shot list with progress
brandly scenes --json
Quota & budget
brandly quota brandly cost --breakdown
Job recovery (if process crashed)
brandly job-resume <video_id> brandly job-poll <video_id> --output recovered.mp4
Visual timeline editor
brandly timeline --port 8765 `
⚙️ Configuration
`ash
Set provider credentials (stored securely)
brandly config set tiktok "access_token=..." brandly config set instagram "access_token=..." brandly config set youtube "client_id=... client_secret=..."
View config
brandly config show
Environment variables
export AGNES_API_KEY="..." # Required for video/image export BRANDLY_IMAGE_CONVERT=off # Disable auto image compression export BRANDLY_WEB_PORT=8765 # Timeline editor port `
🏗️ Architecture (For Developers)
Click to expand technical architecture
Pipeline Phases
init → trends → concept → script → asset → audio → re_edit → validate → publish
Each phase is fail-closed: failure freezes current_phase, exits non-zero.
Key Modules
| Module | Responsibility |
|---|---|
| gnes_client.py | Agnes AI HTTP client (retry, backoff, 503 handling) |
| shot_runner.py | Resumable shot-by-shot generation (rate-limited) |
| scenes.py | Explicit scene manifest + completeness gate |
| quality_gate.py | Anti-slop/drift verification (deterministic + AI vision) |
| director.py | Orchestrator prompt + Director.run_pipeline |
| stitch.py | FFmpeg-based assembly (transitions, ratio, color) |
| export_platforms.py | Platform-specific renders (9:16, 1:1, 16:9) |
| cost_tracker.py | Per-phase budgeting + daily quota tracking |
| gent_surface.py | 15-tool MCP surface for AI agents |
Provider Seam (G14)
Video generation uses a VideoBackend protocol — Agnes is one implementation. Adding a new backend: `python from brandly_cli.video_backend import VideoBackend, VideoBackendCapabilities
class MyBackend(VideoBackend): def capabilities(self): return VideoBackendCapabilities(...) async def submit(self, ...): ... async def poll(self, ...): ... async def fetch(self, ...): ... `
Then pass ideo_backend=MyBackend() in RunnerConfig.
Data Flow
User input → Director → Shot list (shots.json) → Scene manifest (scenes.json) → Production plan → Shot runner (1 req/min) → Clips on disk → Quality gate → Stitch → Export platforms → Publish
All state lives in .brandly// — disk is the only shared state.
🔧 Development
`ash
Install dev dependencies
pip install -e ".[dev]"
Run tests
make test # Full suite (Python + web contracts) make lint # ruff + oxlint + mypy + import-linter
Web UI development
cd web && npm run dev
Build wheel
pip wheel . -w dist/ `
⭐ Star This Repo
If Brandly helps you create better product videos, please consider starring the repository on GitHub — it helps others discover the project and motivates continued development.
📄 License
MIT — Dream Pixels Forge
Metadata
Release files for brandly-cli 0.11.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| brandly_cli-0.11.0.tar.gz | 3.4 MB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| brandly_cli-0.11.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 4.4 MB
Release files / brandly_cli-0.11.0.tar.gz
| Download URL | brandly_cli-0.11.0.tar.gz |
|---|---|
| Size | 3.4 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
23879762f6a6e2cae7095cd569893b44d1edb194b08990773b898e857cbff37c
|
|
BLAKE2b-256 checksum How to use checksums |
425bbba11e941e2af8771f5d5989dbfe7a5032ba484849ef402cad191f94e188
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 6, 2026.
Transparency logRelease files / brandly_cli-0.11.0-py3-none-any.whl
| Download URL | brandly_cli-0.11.0-py3-none-any.whl |
|---|---|
| Size | 1.1 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
48631386f2aa5066c04977681829c3eb3d39769180e9ae1916dc481011c39ccc
|
|
BLAKE2b-256 checksum How to use checksums |
2d62423da1ec351895d5a8251d562427eb2340709a9ec91c11a647767e24e746
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 6, 2026.
Transparency logSecurity for brandly-cli 0.11.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for brandly_cli-0.11.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 6, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.