Skip to content

JosephDoUrden/reelweave

Repository files navigation

ReelWeave

Turn raw travel vlogs into TikTok/Reels — fully local, on your Mac. No cloud, no API keys.

License: MIT Python 3.11+ Platform: Apple Silicon Built with MLX Ruff

ReelWeave ingests a folder of raw vertical footage and edits it into share-ready short-form videos — chronological, part-based trip recaps plus activity supercuts (e.g. "tasting local beers") — with burned-in karaoke subtitles. Everything runs on-device: speech recognition, a vision model that watches your clips, and an LLM "director" that plans the edit. No uploads, no subscriptions, no watermarks.

Why ReelWeave?

  • 🔒 Fully local / offline. Whisper + Qwen3-VL (Apple MLX) + Ollama + ffmpeg. Your footage never leaves the machine; no API keys, no cloud bill.
  • 🎬 Narrative, not just clips. Most tools extract isolated "viral moments". ReelWeave reconstructs a timetable of your trip and edits it into ordered Part 1 / Part 2 … stories, plus cross-clip supercuts by activity.
  • 🧠 Transparent director architecture. An LLM produces an inspectable JSON storyboard, then a deterministic ffmpeg render executes it. Reproducible and hackable — not an opaque SaaS.
  • 🍏 Apple Silicon native. Metal-accelerated MLX models; hardware H.264 via VideoToolbox.

How it works

flowchart LR
    A[probe] --> B[transcribe<br/>Whisper] --> C[scenes<br/>PySceneDetect]
    C --> D[score<br/>OpenCV] --> E[describe<br/>Qwen3-VL video]
    E --> F[direct<br/>LLM storyboard] --> G[render<br/>ffmpeg] --> H[package<br/>clips + dashboard]
Loading

Understand → Direct → Render. The understanding stages write a structured asset graph; the LLM only emits JSON (titles, narrative, hook verification); the renderer is pure, deterministic ffmpeg.

Requirements

Component Model Approx. unified memory
Speech-to-text Whisper large-v3 (MLX) ~3–4 GB
Vision (video) Qwen3-VL-8B (MLX, 4-bit) ~6–8 GB
Director LLM qwen3 (Ollama, Q4) ~5 GB
  • macOS on Apple Silicon (M-series). 16 GB unified memory minimum; 32 GB+ recommended to run all models without swapping (uses unified memory, not VRAM).
  • ffmpeg built with libass (e.g. Homebrew ffmpeg-full) for subtitle burn-in, and ollama for the director LLM.

Quickstart

# 1. System tools (Homebrew)
brew install ffmpeg-full ollama
brew services start ollama

# 2. Install ReelWeave (uv recommended)
uv tool install reelweave        # or: pipx install reelweave

# 3. Download the local models
reelweave setup                  # pulls Whisper + Qwen3-VL (MLX) and ollama models

# 4. Edit a folder of footage
reelweave run --source ./footage --config config.yaml
open output/index.html           # review dashboard

Configuration

All behaviour lives in config.yaml — clip lengths, subtitle styling, the vision/LLM models, output mode (parts vs reels), and language. ReelWeave is language-agnostic: set language and optional location_hints / name_fixes for your trip (see examples/ for a complete worked configuration).

language: "en"                # output/subtitle language
output_mode: "parts"          # "parts" = long-form trip series | "reels" = short clips
vision:   { engine: "mlx", mlx_model: "mlx-community/Qwen3-VL-8B-Instruct-4bit" }
ollama:   { model: "qwen3:32b" }

Output

output/clips/NN_slug/
    clip.mp4        # share-ready 1080×1920 / 30fps, subtitles burned in
    caption.txt     # description + hashtags
    cover.jpg       # cover frame
    meta.json       # storyboard: segments, source clips, narrative
output/index.html   # review dashboard for all clips

How the pipeline thinks

The footage is split into sub-windows and described by a video VLM, fused with the transcript into an asset graph. A deterministic timetable groups clips by day → time-gap/location into chapters and packs them into ~3-minute parts (chronology is enforced in code, never left to the LLM). Activity supercuts are assembled across the whole trip. The LLM names parts/chapters, writes the narrative and verifies every hook against on-screen evidence to avoid fabrication.

Roadmap

  • Configurable transition packs
  • Optional music bed with side-chain ducking
  • GPS-aware chaptering (DJI .SRT telemetry)
  • Per-platform export presets (Reels / TikTok / Shorts)
  • CUDA / Linux backend

Contributing

Issues and PRs welcome — see CONTRIBUTING.md.

Acknowledgements

Built on Whisper, Apple MLX & mlx-vlm, Qwen3-VL, Ollama, PySceneDetect and ffmpeg.

License

MIT © 2026 Yusufhan Saçak

About

Turn raw travel vlogs into TikTok/Reels — fully local, on Apple Silicon. No cloud, no API keys. Whisper + Qwen3-VL (MLX) + Ollama + ffmpeg.

Topics

Resources

License

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages