This is a minimal, end-to-end scaffold to automate generating Veo clips from structured JSON (or Google Sheets).
- Ideation → Google Sheets (or Notion) with columns mapped to clip fields.
- Webhook → An Apps Script posts row JSON to your FastAPI
/ingestendpoint. - Ingest & Validate → Pydantic model validates against
templates/veo_schema.json. - Queue → A simple worker (stubbed
call_veo_api) renders clips from JSON. - Post-process →
scripts/post_process.shadds burned-in captions, trims, formats for platforms. - Publish → (Optional) Add platform upload scripts or SaaS hooks.
This repo avoids external APIs by default; fill in
call_veo_apiwith your Veo/Flow integration when ready.
# 1) Create venv and install deps
uv venv && source .venv/bin/activate # or python -m venv .venv
pip install -r requirements.txt
# 2) Run API
uvicorn api.main:app --host 0.0.0.0 --port 8080 --reload
# 3) Run worker (in another terminal)
python3 worker/worker.py
# 4) Convert a CSV of ideas to JSON payloads
python3 scripts/csv_to_json.py examples/ideas.csv out_json/
# 5) Post a sample JSON to the API (simulate webhook)
curl -X POST http://localhost:8080/ingest -H "Content-Type: application/json" --data @examples/clip_blackhole.jsontemplates/veo_schema.json— JSON Schema forveo_clipdocuments.api/models.py— Pydantic models mirroring the schema.api/main.py— FastAPI app withPOST /ingestandGET /health.worker/worker.py— Pulls jobs fromjobs/(json files), callscall_veo_api(stub), writes outputs torenders/.scripts/sheets_webhook.gs— Google Apps Script to push row JSON to the API on edit/new row.scripts/csv_to_json.py— Converts a CSV (ideas) to a folder of clip JSONs conforming to schema.scripts/post_process.sh— ffmpeg-based caption burn-in + format conversion.examples/ideas.csv— Example ideas.examples/clip_blackhole.json— Example clip config.
Copy .env.example → .env and fill in secrets when you wire real services (Veo, storage, etc.).