# Pipeline — timeline e personaggi

Come si aggiunge un progetto alla presentation, dall'inizio alla pubblicazione. I file di lavoro
sono in questa cartella; la copia pubblicata è in `chroix/07-Review/presentazione-progetti/`.

## 1. Progetto e capitoli

- Il progetto deve esistere nel repertorio (`repertorio-editoriale/index.html`); il **nome esatto**
  è la chiave usata dalla timeline.
- Estrai i capitoli/unità: file, titolo, primo paragrafo utile, personaggi presenti, anno/periodo,
  età dichiarate, numero di caratteri del testo.
- Se il testo non ha date, usa `"anno": "T"` e dichiara «date non dichiarate» nella `label`. Non
  inventare anni o età: usa `null`/`"—"`.

## 2. `timeline-data.json`

Aggiungi una voce con questa forma:

```json
"Nome Progetto": {
  "label": "N capitoli · periodo · note sulle età",
  "volumes": [{"nome": "Capitoli", "rows": [{
    "n": 1,
    "titolo": "Titolo",
    "tipo": "capitolo",
    "anno": "T",
    "sinossi": "Due frasi dal testo.",
    "personaggi": [{"nome": "Nome", "eta": 47}],
    "nota": "",
    "caratteri": 12345
  }]}],
  "main": ["Nome", "Altro"],
  "characters": {
    "Nome": {"ruolo": "...", "eta": "47 (2026)", "aspetto": "...", "nota": "...",
             "colore": "#c8a24a", "thumb": "personaggi/nome.jpg"}
  }
}
```

- `caratteri` = lunghezza del testo del capitolo; serve per la larghezza delle barre.
- `main` = personaggi con una lane nella timeline grafica; gli altri restano nelle schede.
- `nota` = anacronismo o dubbio noto; compare in rosso nella riga.
- I colori sono per personaggio; il primo colore è `#c8a24a`, poi la palette di `index.html`.

## 3. `characters-registry.json`

Aggiungi lo stesso progetto e gli stessi personaggi, con `thumb` e `thumb_prompt`:

```json
"Nome Progetto": {"main": ["Nome"], "characters": {
  "Nome": {"ruolo": "...", "eta": "...", "aspetto": "...", "nota": "...",
           "colore": "#c8a24a", "thumb": "personaggi/nome.jpg",
           "thumb_prompt": "Cinematic character portrait of a fictional ..., dark neutral background, film still, no text, not a real person, square."}
}}
```

- `thumb_prompt` deve essere **senza nomi di persone reali**, senza sangue, senza testo; per minori
  o personaggi morti usa un'immagine simbolica (oggetto, sedia, ritaglio), non un ritratto.
- Il file `thumb` è la destinazione in `personaggi/`.

## 4. Ritratti

```bash
cd .../presentazione-progetti
secrets run --only OPENAI_API_KEY -- python3 gen-thumbs.py
```

Lo script salta i ritratti già presenti, genera i mancanti, li ridimensiona a 512×512 JPEG.
Dopo: aggiorna il foglio contatti con lo script `contatti.py` (o rigenera `_contatti.jpg`).

## 5. Pubblica la timeline

```bash
python3 sync-timeline.py
```

Sostituisce `const TIMELINE` in `index.html` con `timeline-data.json`. Verifica:

- `index.html?tl=Nome%20Progetto`
- `index.html?tl=Nome%20Progetto&char=Nome`

Poi copia in chroix:

```bash
cp index.html .../chroix/07-Review/presentazione-progetti/index.html
sed -i '' 's#../repertorio-editoriale/index.html#../repertorio-editoriale.html#g' .../index.html
cp -R personaggi/. .../chroix/07-Review/presentazione-progetti/personaggi/
cp timeline-data.json characters-registry.json .../chroix/07-Review/presentazione-progetti/
```

## 6. Controlli

- Larghezza barre = caratteri; un colore per personaggio; capitoli cliccabili → riga.
- `Segnalazioni` = righe con `nota`; nessuna età inventata.
- Se un personaggio non ha ritratto, la scheda mostra le iniziali: non è un errore, è il fallback.
- Progetti senza capitoli (dossier) restano senza timeline: la scheda dice «da compilare».

## Template

- `template-timeline.json` — voce vuota con una riga e un personaggio.
- `template-characters.json` — voce vuota del registro.
