Skip to content

Repository files navigation

Darc Studio / DarcAds

Enterprise Open-Source AI Video, Movie & Direct-Response Ad Engine. Turn any story concept, viral premise, or product URL into finished multi-scene video productions.

Darc Studio is a local-first alternative to Runway, Sora, Arcads, Creatify, and Higgsfield. It generates cinematic quick movies, viral social scenes & micro-dramas, POV suspense shorts, and high-converting direct-response video ads powered by the full roster of state-of-the-art video models including ByteDance Seedance 2.5/2.0, Kling 2.0 Pro, Wan 2.2 Turbo, Minimax Hailuo-02, Luma Ray 2, and Runway Gen-3 Alpha.

Zero monthly subscriptions. Zero per-video credits. 100% local-first and privacy-preserving.

# 1. Generate a cinematic micro-drama with ByteDance Seedance 2.5
python3 main.py --mode movie --premise "A lone astronaut discovers an ancient glowing doorway on Europa" --video-model seedance-2.5 --style cyberpunk

# 2. Or generate high-converting e-commerce video ads from any product URL
python3 main.py --url https://your-store.com/products/your-product --variants 3

# 3. Launch the visual Web Studio & Interactive Portal
python3 app.py

Table of contents


Why this exists

Commercial AI video & ad platforms charge $40–500/month and cap resolution, generation time, camera control, and script lengths. Darc Studio gives you direct access to the world's best models (Seedance 2.5, Kling 2.0, Wan 2.2, ElevenLabs, Whisper, FFmpeg) with unified prompt engineering, professional camera rig motion, and word-level karaoke subtitles.

Everything runs on your machine. Your data and renders stay 100% private.

Creation Modes & Capabilities

Creation Mode Description
🎬 Quick Movies & Cinema Multi-scene cinematic storytelling with plot escalation, character dialogue, Hollywood camera physics (Dolly, Drone Orbit, FPV Flythrough, Whip Pan), and film-grade visual grading.
📱 Viral POV & Social Shorts High-retention social scenes, Reddit confessions, suspense thrillers, and comedy skits with word-level glowing karaoke subtitles.
🛍️ Direct-Response Video Ads Automated storefront scraping, 7 conversion frameworks (PAS, UGC Testimonial, 3 Reasons, Unboxing), UGC avatar presenters, and branded end cards.
🎨 Multi-Model Canvas Side-by-side model comparison across ByteDance Seedance 2.5, Kling 2.0, Wan 2.2, Minimax Hailuo-02, Luma Ray 2, and Runway Gen-3.
Real product photography Scrapes and normalizes the actual images from your store, so the product on screen is the product you sell
Direct-response scripts Seven proven hook frameworks (PAS, UGC testimonial, listicle, before/after, us-vs-them, myth-bust, unboxing)
A/B variants in one run --variants 3 writes three genuinely different angles, not three rewordings
Word-level captions TikTok-style karaoke captions with the spoken word highlighted, aligned to the real audio
Ken Burns motion Every still gets a camera move, varied per scene, so nothing sits static
Crossfade transitions Frame-accurate: the finished runtime always equals the narration length
Music that behaves Loops to length, side-chain ducks under the voiceover, normalized to −14 LUFS
UGC presenters Lip-synced talking-head actors delivering your script
Brand kit Logo watermark, accent colour, caption styling, CTA end card
Multi-platform 9:16 vertical, 1:1 square, 16:9 landscape
Script auditing Warns when a hook runs long, a CTA is missing, or copy drifts into ad-speak

Install

DarcAds needs Python 3.9+ and ffmpeg.

1. ffmpeg

# macOS
brew install ffmpeg

# Debian / Ubuntu
sudo apt update && sudo apt install ffmpeg

# Fedora
sudo dnf install ffmpeg

# Windows
winget install Gyan.FFmpeg

DarcAds does not require ffmpeg to be built with libass or libfreetype — all text is rendered with Pillow, so a stock build is fine.

2. DarcAds

git clone https://github.com/luispdoesai/DarcAds.git
cd DarcAds

python3 -m venv venv
source venv/bin/activate          # Windows: venv\Scripts\activate

pip install -r requirements.txt

3. Verify

python3 main.py --doctor
DarcAds environment check

  ok   ffmpeg + ffprobe

  -    Anthropic (script engine)
  -    OpenAI (script engine + TTS)
  ...

  DarcAds runs fully offline with no keys - quality simply improves as you add them.

A row of - is fine. Only the ffmpeg line has to say ok.


Quick start

# The simplest possible ad run
python3 main.py --url https://your-store.com/products/your-product

# A cinematic movie scene
python3 main.py --mode movie --premise "A lone wanderer in a neon rainstorm" --style cyberpunk --video-model seedance-2.5

# A 30-second ad with three A/B variants, music and a brand kit
python3 main.py \
  --url https://your-store.com/products/your-product \
  --variants 3 \
  --seconds 30 \
  --music assets/music/upbeat.mp3 \
  --brand-name "Acme" \
  --accent "#FF4D6D" \
  --cta "Get 20% off"

# Unified Browser Studio & Interactive Sandbox
python3 app.py          # opens http://localhost:8000

Output lands in output/, alongside a *_run.json manifest recording exactly what was scraped, written, generated and rendered.


It works with zero API keys

With nothing configured, DarcAds still:

  • scrapes your real product images, price, features and reviews
  • writes a complete 5-scene script using a built-in framework director
  • generates a voiceover with free TTS
  • composes each product photo into the frame without cropping the product away
  • animates every scene with a Ken Burns move
  • burns in word-level captions, hook text and a progress bar
  • crossfades, ducks music, normalizes loudness and renders a branded end card

Here is a real frame from a keyless run — no LLM, no video model, no paid voice:

 ┌────────────────────┐
 │     3 REASONS      │  ← hook text, brand accent colour
 │                    │
 │      [product]     │  ← your real photo, whole product visible
 │                    │
 │  replaced          │  ← karaoke captions, spoken word highlighted
 │  everything else.  │
 │ ▰▰▰▰▰▱▱▱▱▱▱▱▱▱▱▱▱  │  ← progress bar
 └────────────────────┘

Adding keys improves individual stages. It is never required to get a video.


Adding engines

DarcAds detects what is installed and configured, and upgrades that stage automatically. Copy .env.example to .env and fill in only what you want.

cp .env.example .env
pip install -r requirements-optional.txt   # or install individual packages
Stage Free default Upgrade How
Script Built-in framework director Claude / GPT / local Llama ANTHROPIC_API_KEY, OPENAI_API_KEY, or run Ollama
Voice gTTS edge-tts (free, much better) pip install edge-tts
Kokoro-82M (free, local) pip install kokoro
ElevenLabs (best) ELEVENLABS_API_KEY
Video Product photos + Ken Burns Seedance 2.5 / Kling 2.0 / Wan 2.2 / Luma / MiniMax FAL_KEY
Your own GPU run ComfyUI, set COMFYUI_WORKFLOW
Captions Estimated timings True word alignment pip install faster-whisper
Avatars Lip-synced UGC presenters FAL_KEY + an actor asset

Best value for one command: pip install edge-tts. It replaces the robotic default voice with Microsoft neural voices, costs nothing, and needs no API key.

Local LLMs are auto-detected — if Ollama is running on its default port, DarcAds will use it with no configuration:

ollama serve
ollama pull llama3.1
python3 main.py --url <product-url>       # picks up Ollama automatically

The Unified Web Studio & Portal

python3 app.py

Launches a high-performance, single-command server at http://localhost:8000:

  • Interactive Sandbox & Portal (/): Live camera kinematics, framework selector, real-time aspect ratio simulator, model specs, and architecture walkthrough.
  • Generation Studio (/studio/): Full visual studio with multi-tab generation (Quick Movie, E-Com Ads, Viral Shorts), preview players, telemetry, actor pickers, and download managers.

CLI reference

python3 main.py [options]

Core

Flag Default Description
--mode ad Creation mode: ad, movie, viral_scene
--url None Product page URL to advertise (ad mode)
--premise None Story premise or concept (movie mode)
--style hyper_realistic Cinematic visual style (cyberpunk, dark_fantasy, anime_cinematic, etc.)
--output output/final_video.mp4 Output MP4 path
--variants 1 Number of creative variants to produce
--seconds 20 Target runtime in seconds
--framework pas Narrative or hook framework (pas, testimonial, viral_plot_twist, pov_suspense, etc.)
--doctor Report configured engines and exit

Script engine

Flag Default Description
--provider auto auto, anthropic, openai, openai_compatible, offline
--model provider default Model name override
--base-url Custom LLM endpoint (Ollama, LM Studio, vLLM)

Audio

Flag Default Description
--voice female_energetic female_energetic, female_calm, male_confident, male_casual, neutral
--tts auto Force an engine: elevenlabs, openai, kokoro, edge, gtts
--music Background track
--music-volume 0.18 Music level, 0–1
--no-duck Disable side-chain ducking

Visuals

Flag Default Description
--platform tiktok tiktok, reels, shorts, vertical, square, landscape
--quality standard draft (fast), standard, high
--captions karaoke karaoke, word_pop, block, none
--transition fade none, fade, dissolve, slideleft, slideright, wipeleft, circleopen, smoothleft
--video-model wan-2.1 seedance-2.5, seedance-2.0, kling-2.0, wan-2.2, wan-2.1, minimax-hailuo, luma-ray-2, runway-gen3
--no-generation Never call a paid video model — stay free
--no-whisper Skip Whisper alignment, estimate caption timings

UGC avatar

Flag Description
--avatar Use a lip-synced presenter for every scene
--actor Actor name, file path or URL
--avatar-model auto, hedra, sync-lipsync, latentsync, veed
--list-actors List available actors and exit

Brand kit

Flag Default Description
--brand-name scraped vendor Name on the end card
--logo Transparent PNG watermark
--accent #00E5A0 Highlight colour for captions and CTA
--text-color #FFFFFF Base caption colour
--cta Shop now End card call to action
--cta-seconds 1.6 End card length (0 disables)

REST API Reference

Run the standalone REST server:

uvicorn src.server:app --host 127.0.0.1 --port 8000

Endpoints

  • GET /api/health — System status, ffmpeg detection, provider availability.
  • POST /api/storyboard — Generates storyboard timeline JSON from product URL or story premise.
  • POST /api/scene/regenerate — Regenerates individual audio or visual assets for a single scene with caching.
  • POST /api/compile — Compiles edited timeline scenes into a final broadcast MP4.
  • GET /api/actors — Returns available UGC actors and portrait paths.
  • GET /files/{file_path:path} — Sandboxed static media delivery for generated assets.

Security & Safe Usage Guide

Darc Studio is designed from the ground up for safe, private, and responsible open-source deployment. Follow these best practices to ensure security:

1. API Key & Credential Safety

  • Never commit .env files: All secret keys (OPENAI_API_KEY, ANTHROPIC_API_KEY, FAL_KEY, etc.) must remain in your local .env or system environment. The .gitignore is pre-configured to exclude all .env and *.key files.
  • Session-only UI Keys: Keys entered in the Web Studio are held in memory for that process session only and are never saved to disk.

2. Network & Server Isolation

  • SSRF Attack Protection: Storefront URL ingestion automatically validates and filters targets through is_safe_url(), rejecting private subnets (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16), loopbacks (127.0.0.1, localhost), and cloud metadata IP addresses (169.254.169.254).
  • Path Traversal Sandboxing: The file serving endpoint strictly confines filesystem access to authorized directories (output/, assets/, web/assets/) using canonical common path resolution. Arbitrary file reads outside the sandbox are rejected.
  • Subprocess Security: All video processing commands passed to FFmpeg and FFprobe use sanitized argument vectors (shell=False) rather than interpolated shell strings, eliminating command injection risks.

3. Deployment Guidance

  • Local / Desktop Use: Bind to 127.0.0.1 (localhost) so only your local machine can access the service.
  • Remote / Cloud Deployment: If running on a remote server, place DarcAds behind a reverse proxy (such as Nginx or Caddy) configured with SSL/TLS and HTTP Basic Authentication or OAuth to prevent unauthorized access.

4. Content & Intellectual Property Compliance

  • Truth in Advertising: Do not generate misleading, unsubstantiated, or fabricated claims.
  • Likeness Rights: Only use avatar portraits and voice clones for which you have explicit rights and consent.
  • Synthetic Media Disclosure: Comply with regional synthetic media disclosure regulations (e.g., EU AI Act, FTC guidelines, TikTok/Meta AI content labeling policies).

UGC avatars

The Arcads-style feature: a person on camera delivering your script.

  1. Put a portrait photo or a short clip of a presenter in assets/actors/
  2. Add a FAL_KEY to .env
  3. Run with --avatar
python3 main.py --url <product-url> --avatar --actor maya

A still portrait is animated to speak the narration (Hedra Character-2). A video clip is re-synced to it (sync-lipsync). DarcAds picks the right mode from the file type.


Brand kit

python3 main.py --url <product-url> \
  --brand-name "Acme" \
  --logo assets/brand/logo.png \
  --accent "#FF4D6D" \
  --text-color "#FFFFFF" \
  --cta "Get 20% off" \
  --cta-seconds 2.0

The accent colour drives the highlighted caption word, the hook text, the progress bar and the CTA button, so one value re-skins the whole ad.


Testing

python3 -m unittest discover -s tests           # full suite (161 tests)
python3 -m unittest tests.test_llm_director     # one module

The test suite covers scraping and its fallbacks, SSRF protection, script generation and repair, caption timing, image framing, ffmpeg filter graphs, and end-to-end multi-variant video compilation.


Contributing

Contributions are welcome — see CONTRIBUTING.md. Useful places to start: additional storefront parsers, more hook frameworks, extra video providers, and caption styles.


Licence

MIT — see LICENSE. Do what you like with it, including commercially.

Third-party models and APIs you connect carry their own licences and terms.

About

No description, website, or topics provided.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages