# GENERAR-LOCAL — producción de assets del manifest (Rodrigo)

> Compañero de [`higgsfield-manifest.json`](higgsfield-manifest.json). La sesión nube especificó; la generación corre **local** (la nube no tiene auth de Higgsfield/Midjourney/Recraft — sondado 2026-07-07). Cada asset cae en su ruta destino y **el sitio lo toma sin tocar código** (los slots del sitio leen esas rutas; mientras el archivo no exista, se muestra el placeholder honesto).

## 0 · Setup una vez

```bash
cd ~/Cowork/"[10] Codigo"/nonova-brand-book
git pull
higgsfield auth login          # abre browser; sesión persistente
# Midjourney: vía Discord/web (sin CLI) — copiar el prompt del manifest tal cual.
# Recraft: recraft.ai → proyecto "nonova" → pegar prompt; export SVG donde aplique.
```

**Reglas al generar (no negociables):**
1. **Pegar el prompt del manifest VERBATIM** — está calibrado contra los anti-patterns (sin "premium", género-neutral explícito, sin figurativo). Si el resultado pide iterar, ajusta materia/luz, nunca metas adjetivos plásticos ni quites la señal de género-neutral.
2. **Curado contra el doc:** cada resultado se valida contra `photography.mdx` (ley de dos planos: cubrir la evidencia → sigue leyendo Nonova; cubrir la envoltura → no queda etiqueta de farmacia) y los NO duros (rostro, sonrisa, podio, conteo de sachets, badges wall, blanco clínico).
3. **Nada de datos reales inventados:** los slots de evidencia usan lote/verificador PLACEHOLDER hasta que el testing real exista (precondición #42, brief §13). No publicar un COA simulado como real.
4. Formato: JPG calidad 90 para foto (o PNG si hay tipografía nítida), sRGB, ancho máx 2400px. SVG para vector.

## 1 · Heroes (5) — `public/photos/hero/`

| Slot | Tool | Comando / flujo |
|---|---|---|
| `hero-01-caja-repisa` | Midjourney | Pegar prompt del manifest → upscale mejor variante → guardar como `public/photos/hero/hero-01-caja-repisa.jpg` |
| `hero-02-sachet-palma` | Higgsfield Soul 2 | `higgsfield generate --model soul-2 --prompt "$(jq -r '.slots[] | select(.id=="hero-02-sachet-palma") | .prompt' raw-assets/higgsfield-manifest.json)" --ar 4:5 --out public/photos/hero/hero-02-sachet-palma.jpg` |
| `hero-03-dosis-prueba` | Recraft | Pegar prompt → export raster 2400px → `public/photos/hero/hero-03-dosis-prueba.jpg` |
| `hero-04-fpl-apilado` | Midjourney | Prompt del manifest (--ar 16:9) → `public/photos/hero/hero-04-fpl-apilado.jpg` |
| `hero-05-transparencia-contenido` | Midjourney | Prompt del manifest (--ar 4:5) → `public/photos/hero/hero-05-transparencia-contenido.jpg` |

> Si la sintaxis del CLI de Higgsfield difiere (`higgsfield --help`), lo estable es: modelo Soul 2, prompt verbatim del manifest, AR del slot, output a la ruta destino.

## 2 · Referencias (58) — `public/photos/refs/`

Seis series en `reference_series` del manifest. Flujo por serie:

```bash
# ejemplo serie A (12 variaciones)
jq -r '.reference_series.series[] | select(.id=="refs-a-superficie") | .base_prompt' raw-assets/higgsfield-manifest.json
# sustituir {SURFACE} por cada entrada de .variations, generar, guardar como
# public/photos/refs/a-superficie-01.jpg … a-superficie-12.jpg
```

- Series **a/b/f** → Midjourney · serie **d** → Recraft · series **c/e** (manos/fragmento humano) → **Higgsfield Soul 2**.
- No hace falta las 58 de una sentada: el sitio cataloga las que existan. Prioridad: **d-evidencia** (alimenta method cards de Phase 5) → **b-caja** → resto.

## 3 · Marca — `public/logos/`

### 3.1 Redibujo didone del monograma C1 (Recraft, SVG)
1. Pegar en Recraft el prompt del slot `c1-redibujo-didone` **adjuntando como referencia** `public/glifo-nn.svg` y `public/logos/wordmark-08-final.svg`.
2. Iterar hasta que el resultado case los 6 puntos del brief (contraste didone, esqueleto angular conservado, peso óptico igualado).
3. Export SVG → `public/logos/glifo-nn-didone.svg` (display) y `public/logos/glifo-nn-didone-seal.svg` (corte 6mm).
4. **Correr los 5 gates del decision-log #46** (están en `logo.mdx` §Briefs): test de lectores no-primados (≥5 personas: ≥4 leen «nonova», 0 leen «nnonova»), género-neutral en display Y sello, Logo-Swap del sello, no-colisión con sello de tercero, hairlines sobre el mínimo. **Si falla un gate → NO entra**; contingencias en `logo.mdx` §Open questions.
5. El asset validado NO reemplaza nada automáticamente: abrir sub-issue con el resultado del test de gates para el lockup «base» final (se compone/kernea a mano sobre el slice «onova»).

### 3.2 Raster pack del wordmark (sin AI — determinista)
```bash
brew install librsvg   # si falta
mkdir -p public/logos/raster
for s in 1 2 4; do
  rsvg-convert -w $((512*s)) public/logos/wordmark-08-final.svg -o public/logos/raster/wordmark-tinta@${s}x.png
done
# reversa (Luz sobre transparente): recolorear el SVG antes de exportar
sed 's/#26231F/#F9FAFC/gI; s/#000000/#F9FAFC/gI; s/black/#F9FAFC/gI' public/logos/wordmark-08-final.svg > /tmp/wm-luz.svg
for s in 1 2 4; do
  rsvg-convert -w $((512*s)) /tmp/wm-luz.svg -o public/logos/raster/wordmark-luz@${s}x.png
done
```
(Verificar el fill real del SVG antes del `sed`; si los paths no llevan fill explícito, envolver en `<g fill="…">`.)

### 3.3 OG image (`public/og/og-cover.png`)
Render local (sin AI): wordmark en Luz sobre Grafito `#0E1012` + "Tu mes, resuelto." — 1200×630. Puede salir de un screenshot del home (portada) a ese tamaño. **Watch-item de color.mdx:** validar la portada-en-aislamiento contra lectura pivot-masculino antes de publicar.

## 4 · Al terminar

```bash
git add public/photos public/logos public/og
git commit -m "feat(visual): assets generados localmente según higgsfield-manifest"
git push
```

El sitio detecta los archivos por ruta (los placeholders honestos ceden al asset real). Si un slot cambia de ruta, actualizar el manifest — el manifest es la fuente de verdad.
