Skip to content
 
 

Latest commit

 

History

48 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Capture Forge 🔥

L'enregistreur d'écran open-source le plus complet — écrit en Rust/WASM.

Extension Chrome & Firefox (P1). Zéro télémétrie, zéro compte, zéro limite. "Record like a pro, without giving up your privacy."

License: MIT Rust Status Version


Vision

Capture Forge est une extension navigateur nouvelle génération pour l'enregistrement d'écran et l'édition vidéo, entièrement écrite en Rust et compilée en WebAssembly via Oxichrome.

Sous-produit Version Statut
🎬 Recorder Core V0.1 (P0) En développement
✂️ Editor + Overlay V0.5 (P1) Planifié
🤖 AI & Enrichment V2.0+ (P2) Planifié

Pourquoi Capture Forge ?

Critère Capture Forge Loom Screencastify OBS
Gratuit âś… Freemium (5min) Freemium âś…
Compte requis ❌ ✅ ✅ ❌
Limite durée ❌ 5min (free) 30min (free) ❌
Watermark ❌ ✅ ✅ ❌
Éditeur intégré ✅ ✅ (cloud) ✅ ❌
Firefox ✅ ❌ ❌ ✅
Rust/WASM ✅ ❌ ❌ ❌
100% local / privé ✅ ❌ ❌ ✅

Fonctionnalités

Recorder Core (V0.1) — en cours

  • Machine Ă  Ă©tats : 9 Ă©tats, transitions exhaustives
  • Capture Ă©cran complet (getDisplayMedia)
  • Capture onglet spĂ©cifique (tabCapture)
  • Capture micro + mixage audio (AudioContext)
  • Pause / Reprise avec chronomĂ©trage prĂ©cis
  • Stop / Annuler
  • Écriture de chunks avec en-tĂŞte (magic + index + timestamp + taille + XXH3)
  • Gestion d'erreurs robuste (thiserror, Result<T> partout)
  • Compteur 3-2-1 avec animation
  • Barre d'Ă©tat (timer, contrĂ´les)
  • Export WebM par concatĂ©nation de chunks
  • Stockage OPFS avec cycle de vie formel
  • RĂ©cupĂ©ration de crash
  • Page de prĂ©visualisation (lecture, tĂ©lĂ©chargement, suppression)
  • Heartbeat keepalive (offscreen doc ↔ SW)

Editor + Overlay (V0.5 — P1)

  • Lecteur vidĂ©o (play/pause/seek/volume/fullscreen)
  • Trim non-destructif (dĂ©but/fin)
  • Mute piste audio
  • Crop simple
  • Barre d'annotation flottante (injection shadow DOM)
  • Outils canvas : stylo, surligneur, texte, formes, flèche, blur
  • Historique Undo/Redo
  • Export MP4 (FFmpeg WASM)
  • Export GIF (FFmpeg WASM)

AI & Enrichment (V2.0+ — P2)

  • Transcription STT locale (sherpa-onnx/WASM)
  • Export SRT / VTT
  • IntĂ©gration LLM cloud optionnelle (aisdk)
  • Capture DOM avec filtres de confidentialitĂ©

Architecture

Popup/UI (Leptos CSR)
    │ ExtensionMessage (serde, via background router)
    â–Ľ
background.rs (service worker)
    │ dispatche vers les modules core
    â–Ľ
recorder.rs ──→ storage.rs ──→ export.rs
    │              │              │
    │         OPFS (chunks)   WebM blob
    │              │
    â–Ľ              â–Ľ
Offscreen doc    RecoveryManager (triple vérification)
(keepalive,
MediaRecorder)

Stack technique

Couche Technologie
Framework extension Oxichrome v0.2
UI Leptos v0.7 (CSR)
Langage Rust (wasm32-unknown-unknown)
APIs navigateur web-sys (MediaRecorder, MediaStream, AudioContext, OPFS, Canvas)
Sérialisation serde + thiserror
Intégrité chunks xxhash-rust (XXH3)

Machine à états

9 états : Idle → Starting → Countdown → Recording ↔ Paused → Stopping → Preview → Idle

Toutes les transitions invalides lèvent RecordingError::StateViolation — l'état de la session reste inchangé.


Démarrage rapide

Prérequis

rustup target add wasm32-unknown-unknown
cargo install wasm-pack
cargo install cargo-oxichrome  # Optionnel : régénération manifeste/shims

Build & Test

# Validation compilation (pas de target wasm32)
cargo check

# Tests unitaires (host natif)
cargo test

# Tests WASM (Chrome headless requis)
wasm-pack test --headless --chrome

# Build WASM
wasm-pack build --target web

# Pipeline oxichrome complet
cargo oxichrome build            # Debug
cargo oxichrome build --release  # Optimisé + wasm-opt -Oz

Charger l'extension

  1. Accéder à chrome://extensions/
  2. Activer le Mode développeur
  3. Cliquer sur Charger l'extension non empaquetée
  4. Sélectionner dist/chromium/

Structure du projet

capture-forge/
├── Cargo.toml              # cdylib Rust
├── src/
│   ├── lib.rs              # Point d'entrée, module declarations, panic hook
│   ├── error.rs            # RecordingError enum (thiserror)
│   ├── recorder.rs         # SessionState (9 états), RecordingSession
│   ├── messaging.rs        # ExtensionMessage (11 variants)
│   ├── stream.rs           # Acquisition écran/onglet/micro
│   ├── lifecycle.rs        # Cycle de vie enregistrement
│   ├── chunk.rs            # Écriture chunks avec en-tête
│   └── ...                 # P1+ modules (feature-gated)
├── docs/                   # Documentation produit et architecture
├── _bmad-output/           # Artéfacts BMAD : PRD, UX, architecture, stories
├── dist/chromium/          # Build output : manifest, background.js, WASM
└── tests/                  # Tests E2E (Playwright)

License

MIT — voir LICENSE.


Feuille de route

Jalon Contenu Cible
V0.1-alpha Recorder Core (capture, pause, export WEBM, stockage OPFS) Actuel
V0.2-alpha Stockage résilient + UX popup + i18n français Prochain
V0.5-beta Éditeur + Overlay + Firefox P1
V1.0 Caméra PiP + sélection région + 18 langues P1
V2.0+ AI : STT local, LLM, capture DOM P2

Contribution

Ce projet utilise la méthodologie BMAD pour la planification et le développement. Les stories et le suivi se trouvent dans _bmad-output/.


Fait avec 🔥 et 🦀

About

🔥 Enregistreur d'écran & éditeur vidéo open-source — Extension Chrome/Firefox écrite en Rust/WASM. Zéro télémétrie, zéro compte, zéro limite.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages