| # The Séance — Architecture |
|
|
| ## Pipeline |
|
|
| ``` |
| User Input (strange concept) |
| │ |
| ▼ |
| ┌─────────────────┐ |
| │ The Scientist │ nvidia/NVIDIA-Nemotron-3-Nano-4B-BF16 |
| │ (Nemotron-4B) │ Cold, clinical field-note voice |
| └────────┬────────┘ |
| │ scientist_text |
| ▼ |
| ┌─────────────────┐ |
| │ The Mythologist │ openbmb/MiniCPM3-4B (40K downloads, Apache 2.0) |
| │ (MiniCPM3-4B) │ Ancient, folkloric, feeling-forward voice |
| └────────┬────────┘ |
| │ mythologist_text |
| ▼ |
| ┌─────────────────┐ |
| │ FLUX Constructor│ prompts/flux_constructor.py |
| │ (prompt chain) │ Synthesises both text outputs → FLUX prompt |
| └────────┬────────┘ |
| │ flux_params |
| ▼ |
| ┌─────────────────┐ |
| │ The Dreamer │ black-forest-labs/FLUX.1-schnell |
| │ (FLUX-schnell) │ 301K downloads, Apache 2.0, ~12B params |
| └────────┬────────┘ |
| │ image_path |
| ▼ |
| Artifact Card |
| (3 panels + image) |
| ``` |
|
|
| ## Model Loading Strategy |
|
|
| **Lazy sequential loading** — never load all models simultaneously. |
|
|
| ``` |
| Load Nemotron → run → unload → (VRAM free) |
| Load MiniCPM3 → run → unload → (VRAM free) |
| Load FLUX → run → unload → (VRAM free) |
| ``` |
|
|
| Combined peak VRAM usage: ~8GB (single model at a time in bfloat16). |
| ZeroGPU limit: 40GB — well within budget. |
|
|
| ## FLUX Prompt Chaining |
|
|
| The image prompt is NOT written independently. It is constructed from: |
| 1. Key noun phrases extracted from Scientist output |
| 2. Dominant creature/image from Mythologist output |
| 3. Fixed style suffix: `dreamlike atmospheric surreal dark watercolor cinematic lighting no text` |
|
|
| This ensures the image feels like a visual synthesis of both voices. |
|
|
| ## ZeroGPU Notes |
|
|
| - Each model load/unload cycle takes ~10-20 seconds cold, ~2-5 seconds warm |
| - FLUX.1-schnell inference: ~5-10 seconds at 4 steps on H200 |
| - Total expected latency: 30-60 seconds per summoning |
| - Use `@spaces.GPU` decorator on the summon function for ZeroGPU allocation |
|
|