Metadata-Version: 2.4
Name: plotagon-director
Version: 0.6.0
Summary: Génération de films Plotagon Studio Desktop (.plot) avec voix Edge TTS et synchro labiale
Author: Mohamed Amine Ben Mallessa
License: MIT
Project-URL: LinkedIn, https://www.linkedin.com/in/benmallessa/
Keywords: plotagon,tts,video,animation
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: pyyaml
Requires-Dist: edge-tts
Requires-Dist: soundfile
Requires-Dist: numpy
Requires-Dist: truststore
Provides-Extra: library
Requires-Dist: UnityPy; extra == "library"
Provides-Extra: dev
Requires-Dist: pytest; extra == "dev"
Requires-Dist: UnityPy; extra == "dev"
Dynamic: license-file

# Plotagon Director

Génération de films [Plotagon Studio Desktop](https://www.plotagon.com) de
bout en bout : écriture du scénario en YAML, validation contre la bibliothèque
de ressources réelle, génération d'un fichier `.plot` importable dans
l'application officielle — avec voix custom Edge TTS et synchro labiale.

Le format `.plot` a été entièrement rétro-ingénieré et confirmé par analyse
d'exports officiels (v1.11.0) : ZIP contenant un document JSON `.plotdoc`
(liste plate d'instructions `scene`, `dialogue`, `music`, `action`) et, par
réplique vocalisée, un WAV mono 44,1 kHz + un fichier `.phonemes` (protobuf)
pour la synchro labiale. Spécification complète : `docs/PLOT_FORMAT.md`.

## Installation

```bash
pip install -e .                 # depuis un clone: commande `plotagon-director`
# ou directement depuis GitHub :
pip install git+https://github.com/mohamed-amine-ben-mallessa/plotagon-director.git
```

La bibliothèque de ressources (`library.json`) est embarquée dans le package :
le générateur fonctionne sans installation Plotagon. L'extra `[library]`
(`pip install -e .[library]`, ajoute UnityPy) n'est nécessaire que pour
**reconstruire** la bibliothèque depuis une installation Plotagon.

## Usage

```bash
# Écrire un scénario
plotagon-director new "Mon film"              # squelette commenté
plotagon-director list scenes --filter cafe   # aussi: characters, expressions,
plotagon-director list actions                #   music, sounds, voices
plotagon-director positions restaurants.cafe  # slots d'acteurs d'une scène
plotagon-director voices fr                   # voix Edge TTS disponibles
plotagon-director say "Bonjour" fr-FR-DeniseNeural  # écouter une voix

# Valider puis générer
plotagon-director validate mon-film.yaml [--strict]
plotagon-director build mon-film.yaml mon-film.plot
#   --no-voices : hors ligne | --srt subs.srt : sous-titres
#   --no-cache : resynthétise tout (sinon cache TTS automatique)
plotagon-director batch scenarios/ sorties/   # tous les .yaml d'un dossier

# Importer mon-film.plot dans Plotagon Studio (menu import)

# Analyse / rétro-ingénierie
plotagon-director parse export.plot           # JSON brut d'un .plot
plotagon-director decompile export.plot film.yaml   # .plot -> YAML éditable
plotagon-director diff avant.plot apres.plot  # isoler un format inconnu
plotagon-director doctor                      # diagnostic environnement

# (Reconstruire la bibliothèque depuis une installation Plotagon)
python -m plotagon_director.library.builder [chemin/builtincontentmanifest.json]
```

## Exemple de scénario

```yaml
project:
  title: "Conversation au café"

cast:
  - ref: paul
    character: news.paul
    name: "Paul"
    voice: fr-FR-HenriNeural      # optionnel : voix Edge TTS (+ rate/pitch)
  - ref: lucy
    character: news.lucy
    name: "Lucy"
    voice: fr-FR-DeniseNeural

scenes:
  - scene: restaurants.cafe
    music: music.corny            # optionnel (music.stopmusic pour arrêter)
    actors:
      - ref: paul
        position: Table1          # `plotagon-director positions restaurants.cafe`
      - ref: lucy
        position: Table2
    dialogue:
      - actor: paul
        expression: happy
        text: "Bonjour Lucy !"
        camera: wide shot         # optionnel : 10 types (docs/PLOT_FORMAT.md)
      - actor: paul               # interaction à 2 personnages
        action: handshake
        target: lucy
```

Bibliothèque embarquée : 205 scènes (953 positions), 53 personnages,
88 expressions, 15 actions, 38 musiques, 132 sons.

## Architecture

- `plotagon_director/core/` — modèle `.plotdoc`, conteneur ZIP, validateur,
  décompilateur, diff
- `plotagon_director/audio/` — Edge TTS → WAV conforme (cache + parallèle),
  phonèmes/lip-sync
- `plotagon_director/library/` — builder du catalogue + `data/library.json`
- `docs/` — rétro-ingénierie du format (`PLOT_FORMAT.md`), API interne de
  l'appli (`APP_JS_ANALYSIS.md`), état des connaissances (`FINDINGS.md`)
- `SKILL.md` — utilisation comme skill Claude Code

## Principes

- Aucun mod, aucun binaire tiers, aucun credential.
- Installation officielle en lecture seule.
- Seuls les éléments confirmés par un export officiel sont générés ; le
  reste (effets visuels, sons importés) est documenté UNKNOWN dans
  `docs/FINDINGS.md`.

## Tests

```bash
python -m pytest tests/ -q
```
