> ## Documentation Index
> Fetch the complete documentation index at: https://docs.venice.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Venice Video Harness

> Pilotez Venice depuis Claude Code ou Cursor avec un harnais optimisé pour produire vidéos cohérentes, storyboards, bandes-annonces et récits longs.

Le [Venice Video Harness](https://github.com/jordanurbs/venice-video-harness) est une boîte à outils communautaire, agent-first et optimisée pour Venice, conçue pour la **création vidéo à cohérence prioritaire, de n'importe quelle durée**. Elle transforme un agent IDE (Claude Code, Cursor, Codex, etc.) en opérateur d'un système de production Venice réutilisable couvrant plus de 50 modèles Venice vidéo, image, audio et musique.

<Card title="GitHub : venice-video-harness" icon="github" href="https://github.com/jordanurbs/venice-video-harness">
  Licence MIT. Maintenu par la communauté.
</Card>

<CardGroup cols={3}>
  <Card title="Vidéo à personnage cohérent" icon="users">
    Verrouillez personnages, voix et esthétique sur toute une série
  </Card>

  <Card title="Du storyboard à la vidéo" icon="film">
    Génération de planches en deux passes avec affinage multi-edit Venice
  </Card>

  <Card title="Montage text-first" icon="scissors">
    Transcrivez localement avec whisper.cpp, coupez à partir d'un pack de 12 Ko, auto-évaluation à chaque coupe
  </Card>
</CardGroup>

## De quoi s'agit-il

La plupart des intégrations Venice sont de fines surcouches autour des appels API. Le Venice Video Harness est la **couche de plus haut niveau** qui se place entre votre agent et l'API Venice :

* **Règles d'orchestration** dans `CLAUDE.md`
* **Playbooks réutilisables** dans `.claude/commands/` (19 commandes de workflow)
* **Agents spécialisés** dans `.claude/agents/` (art-director, prompt-engineer, cut-qa, et plus)
* **Skills de production Venice** dans `.claude/skills/` (compatibles avec le format [Agent Skills](/guides/integrations/venice-skills))
* **Couche d'exécution TypeScript** dans `src/`
* **Registre de modèles exhaustif** couvrant plus de 50 modèles Venice vidéo, image, audio et musique

Conçu pour les créateurs qui produisent :

* Des projets vidéo à personnages cohérents (tout genre, toute durée)
* Des séries ou campagnes à style visuel verrouillé
* Des workflows storyboard-vers-vidéo
* Du contenu narratif court et long format
* Des séquences cinématiques de marque, des bandes-annonces et des teasers
* Des séries sociales à personnages récurrents

## Démarrage

### Prérequis

<CardGroup cols={3}>
  <Card title="Node.js 20+" icon="node-js" href="https://nodejs.org/">
    Dernière LTS recommandée
  </Card>

  <Card title="ffmpeg + ffprobe" icon="terminal" href="https://ffmpeg.org/">
    Dans votre PATH
  </Card>

  <Card title="Clé API Venice" icon="key" href="/guides/getting-started/generating-api-key">
    Depuis [venice.ai/settings/api](https://venice.ai/settings/api)
  </Card>
</CardGroup>

Optionnel, pour le pipeline de montage : installez `whisper-cpp` pour la transcription locale.

```bash theme={"system"}
brew install whisper-cpp
mkdir -p ~/.cache/whisper.cpp
curl -L -o ~/.cache/whisper.cpp/ggml-base.en.bin \
  https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-base.en.bin
```

### Installation

<Steps>
  <Step title="Cloner le harness">
    ```bash theme={"system"}
    git clone https://github.com/jordanurbs/venice-video-harness.git
    cd venice-video-harness
    ```
  </Step>

  <Step title="Configurer votre clé API">
    ```bash theme={"system"}
    cp .env.example .env
    # Ajoutez VENICE_API_KEY à .env
    ```
  </Step>

  <Step title="Installer et build">
    ```bash theme={"system"}
    npm install
    npm run build
    ```
  </Step>

  <Step title="Ouvrir dans votre agent">
    Ouvrez le projet dans Cursor, Claude Code ou tout IDE doté d'un chat agentique. L'agent lit automatiquement `CLAUDE.md` et les playbooks.

    Essayez l'un de ces premiers messages :

    * « Set up this Venice video harness for first use »
    * « Create a new character-consistent video series »
    * « Generate a 30-second branded video sequence »
    * « Build a multi-episode narrative with locked characters »
    * « Create a product launch trailer with consistent visual style »
  </Step>
</Steps>

## Ce qui est optimisé pour Venice

* **Prompts d'image accordés pour les modèles d'image Venice** comme `seedream-v5-lite`, `nano-banana-pro`, `flux-2-pro/max`, et plus
* **Génération de planches en deux passes** avec affinage multi-edit Venice pour la correction de personnages
* **Logique de routage de modèles** pour les tiers action, atmosphère et cohérence de personnage
* **Génération vidéo référence-aware** qui utilise `elements`, `reference_image_urls` et `scene_image_urls` correctement par modèle
* **Adaptation de prompt selon l'environnement** pour le traitement des scènes diurnes vs nocturnes
* **Chemins audio natifs Venice** pour la TTS (Kokoro, Qwen3, ElevenLabs), les SFX et la musique
* **Estimation des coûts** avant génération via `/video/quote` et `/audio/quote`
* **Construction de paramètres model-aware** qui ignore automatiquement les paramètres que le modèle cible ne prend pas en charge

## Valeurs par défaut du routage de modèles

Les défauts du harness sont assumés parce que la cohérence est le but. Le routage actuel (avril 2026) :

**Seedance 2.0 R2V par défaut. Kling O3 R2V en fallback pour les scènes à 3 personnages ou plus. Seedance 2.0 i2v pour les plans d'établissement.**

| Rôle                                         | Modèle par défaut                      | Quand utilisé                                                                                     |
| -------------------------------------------- | -------------------------------------- | ------------------------------------------------------------------------------------------------- |
| Plans de personnage (1-2 personnages)        | `seedance-2-0-reference-to-video`      | R2V par défaut avec `reference_image_urls` plats, tags `@Image`, jusqu'à 15 s, audio stéréo natif |
| Plans de personnage (3+ personnages)         | `kling-o3-standard-reference-to-video` | Fallback automatique avec `elements` structurés pour l'identité multi-personnages                 |
| Plan d'établissement / d'ambiance / d'action | `seedance-2-0-image-to-video`          | Pas de personnages ; qualité cinématique épique, jusqu'à 15 s                                     |

Ces valeurs sont remplaçables par projet via `series.json → videoDefaults`. Pour cibler une famille non-Seedance (par ex. des comptes qui n'ont pas accès à Seedance), définissez `videoDefaults` à `kling-o3-standard-reference-to-video` et `veo3.1-fast-image-to-video`.

<Note>
  **Règle de visage Seedance :** Seedance 2.0 bloque les images d'entrée comportant un visage qui n'ont pas été produites par `seedream-v5-lite` ou `seedream-v5-lite-edit`. Le harness gère cela automatiquement en faisant passer tout travail d'image comportant un personnage par Seedream et en exécutant une porte de pré-vol avant chaque appel Seedance.
</Note>

## Modèles Venice pris en charge

### Vidéo (avril 2026)

| Famille                   | i2v                        | t2v                   | Durée max   | Audio                             | Notes                                                          |
| ------------------------- | -------------------------- | --------------------- | ----------- | --------------------------------- | -------------------------------------------------------------- |
| **Seedance 2.0**          | i2v, R2V                   | t2v                   | 15 s        | Oui (stéréo, lip-sync 8+ langues) | Classée #1. R2V : `reference_image_urls` plats, tags `@Image`. |
| **Kling V3**              | Pro, Standard              | Pro, Standard         | 15 s        | Oui                               | `end_image_url` pour cibler une frame                          |
| **Kling O3**              | Pro, Std, Pro R2V, Std R2V | Pro, Standard         | 15 s        | Oui                               | R2V : `elements`, `reference_image_urls`, `scene_image_urls`   |
| **Kling 2.6 / 2.5 Turbo** | Pro                        | Pro                   | 10 s        | 2.6 : Oui / 2.5 : Non             | `end_image_url`                                                |
| **Veo 3.1**               | Fast, Full                 | Fast, Full            | 8 s         | Oui                               | Jusqu'à 4K                                                     |
| **Sora 2**                | Standard, Pro              | Standard, Pro         | 12 s        | Oui                               | Jusqu'à 1080p                                                  |
| **Wan 2.6 / 2.5**         | Std, Flash / Oui           | Std / Oui             | 15 s / 10 s | Oui                               | Entrée `audio_url`                                             |
| **LTX Video 2.0**         | Fast, Full, v2.3, 19B      | Fast, Full, v2.3, 19B | 20 s        | Oui                               | Jusqu'à 4K, plus longue synchronisée                           |
| **Longcat**               | Std, Distilled             | Std, Distilled        | **30 s**    | Non                               | Plus long en plan unique                                       |
| **Vidu Q3**               | Oui                        | Oui                   | 16 s        | Oui                               | `reference_image_urls`                                         |
| **PixVerse v5.6**         | Std, Transition            | Standard              | 8 s         | Oui                               | Transition : `end_image_url`                                   |
| **Grok Imagine**          | Oui                        | Oui                   | 15 s        | Oui                               | Prise en charge des ratios larges                              |

### Image, audio et musique

* **Image (22+ modèles) :** `nano-banana-pro/2`, `gpt-image-2`, `flux-2-pro/max`, `grok-imagine`, `qwen-image-2-pro`, `recraft-v4-pro`, `seedream-v4` / `v5-lite`, `lustify-sdxl/v7`, `wai-Illustrious`, et plus
* **Multi-edit :** `qwen-edit`, `flux-2-max-edit`, `nano-banana-pro-edit`, `seedream-v5-lite-edit`, `gpt-image-2-edit`, et plus
* **TTS :** `tts-kokoro` (50+ voix), `tts-qwen3-0-6b/1-7b`, `elevenlabs-tts-v3`, `elevenlabs-tts-multilingual-v2`
* **Musique :** `elevenlabs-music`, `minimax-music-v2`, `ace-step-15`, `stable-audio-25`
* **SFX :** `elevenlabs-sound-effects-v2`, `mmaudio-v2-text-to-audio`

## Pipelines de production

### Pipeline de génération

Vidéo narrative de bout en bout (script → storyboard → vidéo → audio → assemblage) :

```bash theme={"system"}
npm run dev -- produce-episode -p output/my-series -e 1
```

L'implémentation de référence dans `src/mini-drama/` couvre :

* Gestion des séries / personnages / épisodes
* Mise en forme de script propulsée par LLM
* Génération de storyboard en deux passes (générer + affiner via multi-edit)
* QA de planches basée sur la vision
* Génération vidéo avec chaînage de frames
* Post-production audio en couches
* Incrustation des sous-titres et assemblage final

### Pipeline de montage

Coupez des médias existants (plans générés par Venice ou vrais rushs). **Text-first** : le LLM lit un `takes_packed.md` compact (\~12 Ko pour 40 min d'audio) plutôt que de dumper des frames vidéo.

Les cinq étapes :

<Steps>
  <Step title="Transcrire">
    whisper.cpp local produit par source `*.words.json` + `takes_packed.md`.
  </Step>

  <Step title="Lire le pack">
    Le LLM forme une stratégie de coupe à partir du texte seul.
  </Step>

  <Step title="Confirmer">
    Propose la stratégie et attend « yes / revise / cancel ».
  </Step>

  <Step title="Rendre l'EDL">
    Cut list JSON → concat ffmpeg avec des fondus audio de 30 ms. Archive-first, donc les originaux ne sont jamais écrasés.
  </Step>

  <Step title="Auto-évaluation">
    L'agent `cut-qa` exécute 6 vérifications programmatiques à chaque limite de coupe ; max 3 itérations de correction.
  </Step>
</Steps>

Les vérifications `cut-qa` repèrent les régressions de ratio, les sauts de hash de frame à l'intérieur d'un mot, la troncature de VO, la discontinuité de lumière, les pics audio au-dessus de -6 dBFS et le chevauchement des sous-titres avec du texte dans l'image.

<Tip>
  Le pipeline de montage est inspiré de [browser-use/video-use](https://github.com/browser-use/video-use). Leur intuition clé, *« le LLM ne regarde jamais la vidéo, il la lit »*, est ce qui rend le montage piloté par agent possible sans noyer le tout dans des tokens de frame-dump.
</Tip>

## Commandes, agents et skills

Le harness expose 19 commandes de workflow, 10 agents spécialisés et 7 skills de production. Faits marquants :

| Commande de workflow               | Objectif                                                 |
| ---------------------------------- | -------------------------------------------------------- |
| `new-series`                       | Créer une nouvelle série avec esthétique verrouillée     |
| `add-character` / `lock-character` | Verrouillage personnage + voix                           |
| `workshop-episode`                 | Écriture collaborative d'un épisode                      |
| `storyboard-episode`               | Storyboarder un épisode                                  |
| `produce-episode`                  | Pipeline complet en une commande                         |
| `generate-trailer`                 | Pipeline complet de bande-annonce                        |
| `edit-footage`                     | Pipeline de montage text-first pour les médias existants |
| `ingest-screenplay`                | Ingérer un scénario Fountain ou PDF                      |

| Agent spécialisé   | Rôle                                                                  |
| ------------------ | --------------------------------------------------------------------- |
| `art-director`     | Décisions esthétique, palette, lumière, composition                   |
| `prompt-engineer`  | Prompts d'image Venice, cohérence des personnages                     |
| `storyboard-qa`    | QA de planches pour la continuité et les vérifications de personnages |
| `cut-qa`           | Porte qualité post-rendu (6 checks par coupe, max 3 itérations)       |
| `overlay-designer` | Motion graphics de marque, sous-agents parallèles                     |
| `trailer-curator`  | Sélection des plans de bande-annonce et règles anti-spoiler           |

| Skill de production          | Objectif                                                     |
| ---------------------------- | ------------------------------------------------------------ |
| `venice-api`                 | Utilisation et défauts de l'API REST Venice                  |
| `venice-video-model-routing` | Routage R2V-first, arbres de décision                        |
| `character-consistency`      | Guidance pour la cohérence des personnages multi-plans       |
| `shot-composition`           | Guidance de composition et de caméra                         |
| `screenplay-parsing`         | Workflows de parsing de scénario                             |
| `video-editing`              | Philosophie text-first du montage, format EDL, boucle cut-qa |

## Aller-retour NLE

Après le rendu, exportez la timeline assemblée en XML pour un peaufinage dans votre éditeur de prédilection. Chaque segment vidéo, clip de dialogue, clip SFX et cue musical atterrit sur sa propre piste.

```bash theme={"system"}
mini-drama export-timeline -p output/<project> -e 1 --format fcpxml      # Final Cut Pro X
mini-drama export-timeline -p output/<project> -e 1 --format premiere    # Premiere Pro
mini-drama export-timeline -p output/<project> -e 1 --format davinci     # DaVinci Resolve
```

## Usage programmatique

Vous pouvez aussi appeler les modules du harness directement depuis votre propre TypeScript :

```typescript theme={"system"}
import { VeniceClient } from './src/venice/client.js';
import { generateVideo, quoteVideo } from './src/venice/video.js';
import { listVideoModels } from './src/venice/models.js';

const client = new VeniceClient();

const quote = await quoteVideo(client, {
  model: 'kling-v3-pro-image-to-video',
  duration: '8s',
  audio: true,
});
console.log(`Estimated cost: $${quote.quote}`);

const result = await generateVideo(client, {
  model: 'kling-v3-pro-image-to-video',
  prompt: 'A slow dolly shot pushes forward...',
  duration: '8s',
  imageUrl: 'data:image/png;base64,...',
  audio: true,
  outputPath: 'output/shot-001.mp4',
});

const longModels = listVideoModels({ minDurationSec: 20 });
```

## Ressources

<CardGroup cols={2}>
  <Card title="GitHub" icon="github" href="https://github.com/jordanurbs/venice-video-harness">
    Code source, issues et releases
  </Card>

  <Card title="Génération vidéo Venice" icon="film" href="/guides/media/video-generation">
    L'API sous-jacente que le harness pilote
  </Card>

  <Card title="Reference-to-Video" icon="image" href="/guides/media/reference-to-video">
    Guide R2V pour la cohérence des personnages
  </Card>

  <Card title="Seedance 2.0" icon="bolt" href="/guides/media/seedance-2-0">
    La famille vidéo par défaut du harness
  </Card>
</CardGroup>

<Note>
  Maintenu par la communauté et fourni en l'état. Pour les problèmes spécifiques au harness, ouvrez une issue sur le [dépôt GitHub du projet](https://github.com/jordanurbs/venice-video-harness/issues).
</Note>
