# 15 — Memoria Consolidada del Sistema (Noviembre 2026)

Este documento recopila el estado técnico, las decisiones arquitectónicas, las reglas de prompts consolidadas y los flujos operativos del ecosistema PlumLoom.

---

## 1. Infraestructura y Entorno Operativo
- **Stable Diffusion WebUI Forge Neo:** Interfaz y API activa en `http://127.0.0.1:7860` con el flag `--api`.
- **UI Local (Flask):** Interfaz web integrada accesible en `http://127.0.0.1:5055` (con el lanzador raíz `iniciar_ui.bat`). Incluye gestor de lotes, banco de poses y generador de posts/hashtags para redes.
- **Automatización de Redes (X / Twitter):** Publicación y programación de hilos/tuits mediante Browser MCP (`@plumloomart`) siguiendo el estándar canónico de formato (`|| Personaje ~ Franquicia ||`, CTA con corazón y mezcla de hashtags específicos y generales aleatorios).

---

## 2. Estructura Estricta de Prompts (`02-estructura-prompt.md`)
Todo prompt generado por el sistema se rige por los siguientes tramos separados por `BREAK`:

Pareja (con hombre):

```text
<MASTER + LoRAs>
BREAK
1girl, <línea exacta del personaje en personajes.txt>, half naked
BREAK
1boy, (faceless male:1.4), muscular body, taller male
BREAK
[bloque de pose subagrupado por comas]
```

Solo (sin hombre):

```text
<MASTER + LoRAs>
BREAK
1girl, <línea exacta del personaje en personajes.txt>, half naked
BREAK
[bloque de pose subagrupado por comas]
```

### Reglas críticas de ensamblaje:
1. **Tramos por `BREAK`:** Indispensable para aislar la identidad y el vestuario de la postura corporal.
2. **Prohibición absoluta de barras verticales (`|`):** Los bloques de atributos y pose **nunca** llevan barras `|` (ya que el Text Encoder de SD las interpreta como operadores condicionales OR). Todo va estrictamente unido por **comas `,`**.
3. **Estructura interna del bloque de pose:** Orden recomendado por categorías:
   $$\text{pose} \rightarrow \text{entorno} \rightarrow \text{acto} \rightarrow \text{cuerpo} \rightarrow \text{expresión} \rightarrow \text{estado} \rightarrow \text{cámara}$$
   *El ángulo o encuadre de cámara va obligatoriamente al final* para evitar que el modelo recurra por defecto al plano frontal.
4. **Simplificación del `1boy`:** El personaje masculino se reduce al mínimo estricto (`1boy, (faceless male:1.4), muscular body, taller male`; en código `MALE_FULL` añade `broad shoulders`) para no competir con la identidad de la protagonista. En POV: `1boy, muscular body`.
5. **Conteos únicos:** `1girl` y `1boy` aparecen **máximo una vez** en todo el prompt. El tag `solo` del Master se suprime automáticamente si hay escena de pareja.
6. **Resoluciones Validas:** Soporte verificado para vertical (`832x1216`) y horizontal (`1216x832`), con pruebas pendientes en formato cuadrado (`1024x1024`).

---

## 3. Gestión de Vestuario y Desnudez
- **Patrón vigente (nov-2026):** Los outfits de identidad del personaje (o cosplay/fantasía de `attire_biblioteca.md`) son el gancho principal. En explicit1 y demás stages explícitos iniciales se usa **`half naked`** en el tramo de la chica para preservar el outfit sin mostrar todo desde el principio.
- **Tramo final (explicit2/cierre):** `nude, completely_nude, naked` se reserva únicamente como tramo final de desnudez total. `stages.py` ya mapea `explicit2 → nude`; queda implementar `explicit1 → half naked` en `Engine/` (hoy solo existe en el sandbox `_sandbox_cl_tagger/` y en `assemble_prompt()` se inyecta full nude condicional).

---

## 4. Banco de Poses y Extracción Externa
- **Banco de Poses Curadas (`pose_bank.jsonl`):** 56+ poses validadas, auditadas y libres de defectos anatómicos graves (con exclusión explícita de bondage y malas proporciones en los pools explícitos).
- **WD14 Tagger y Harvest:** Herramientas locales (`wd14_tagger.py`, `wd14_harvest.py`) para extraer metadatos de imágenes de referencia externas (artistas o waifusoreo) y reutilizarlas en bibliotecas locales.
