diff --git a/.dev/2026-06-01-fpv-prompts.md b/.dev/2026-06-01-fpv-prompts.md new file mode 100644 index 0000000..818e031 --- /dev/null +++ b/.dev/2026-06-01-fpv-prompts.md @@ -0,0 +1,118 @@ +# First-Person Dungeon FPV Prompts (Z-Image-Turbo + Depth Fun-ControlNet) + +**Researched:** 2026-06-01 +**Pipeline:** Z-Image-Turbo (Qwen3-4B encoder), 8 steps, cfg 1.0, Fun-ControlNet Union depth patch, strength ~0.65, res_multistep/simple. Output downsampled to 256-color pixel art. + +## TL;DR +- At **cfg 1.0 the negative prompt is mechanically dead** (classifier-free guidance is off). Hands/figures must be killed by the POSITIVE prompt + avoiding trigger words, NOT by negatives. +- Top triggers that summon a player character: **"first person", "POV", "dungeon crawler", "Eye of the Beholder", "adventurer", "hero", "you"**. Drop them all. Frame as **architectural photography of an empty/abandoned place** instead. +- Let the depth map own the geometry; the prompt owns material + light. Don't fight the controlnet by over-describing structure. + +--- + +## 1. Positive-prompt templates (copy-paste) + +Frame every shot as a deserted architectural photograph. The model never adds a person to "an empty abandoned stone hall, no people." + +### Corridor +``` +empty abandoned stone dungeon corridor, deserted, no people, uninhabited, +narrow ancient stonework passage receding into darkness, wet mossy flagstone +floor, rough granite block walls, iron sconces with flickering torchlight, +warm orange firelight and deep black shadows, volumetric haze, damp cold air, +dark fantasy, architectural photography of an empty ruin, atmospheric, detailed stone +``` + +### Chamber / room +``` +empty abandoned stone dungeon chamber, deserted, no people, uninhabited, +vast vaulted hall of ancient masonry, weathered granite pillars, cracked +flagstone floor, iron braziers with flickering torchlight, warm firelight +pooling in deep shadow, volumetric haze, dripping damp walls, dark fantasy, +architectural photography of an empty ruin, atmospheric, detailed stone +``` + +### Tighter variant (if long prompts drift) +``` +empty stone dungeon corridor, no people, abandoned ancient ruin, mossy +flagstone, granite walls, torchlight, deep shadows, volumetric fog, dark +fantasy, architectural photo +``` + +### Style anchor block (PREPEND identically to EVERY frame in an atlas) +``` +dark fantasy dungeon, ancient torchlit stone, warm orange torchlight, deep +black shadows, wet mossy granite masonry, volumetric haze, +``` +Then append the per-room body (corridor vs chamber, any theme word like "crypt"/"flooded"/"library"). + +### Words to AVOID (they summon a character / break the empty frame) +| Avoid | Why | Use instead | +|---|---|---| +| first person, POV, first-person view | model fills the bottom edge with hands/weapon | (nothing — say "corridor receding into darkness") | +| dungeon crawler, Eye of the Beholder, Daggerfall | strong "RPG with a player" prior → arms/HUD | "dark fantasy", "old-school RPG art style" | +| adventurer, hero, explorer, party, you, your | literal person | "abandoned", "deserted" | +| holding, wielding, torch in hand | summons a hand+weapon | "iron sconce", "wall torch", "brazier" | +| game screenshot, HUD, interface, UI | summons fake UI overlay | "architectural photograph" | + +Note "torch" alone is fine (wall torches); only **"holding/carrying a torch"** triggers a hand. Anchor light to fixtures: **sconce, brazier, wall torch.** + +--- + +## 2. Negative prompt — and why it barely matters here + +**Caveat first:** Z-Image-Turbo is a distilled model running at **cfg/guidance 1.0**, where classifier-free guidance is effectively off, so the negative branch is **ignored or near-inert.** Two independent sources confirm the Qwen-family text encoder + distillation means "the model does not use negative prompts at all." Do NOT rely on it to remove hands. The positive prompt and trigger-word avoidance do ~95% of the work. + +Still set one (cheap insurance; matters only if you ever nudge cfg to ~1.2–1.5), ordered by importance: +``` +person, people, human, figure, character, hands, fingers, hand, arm, arms, +holding weapon, sword, feet, legs, body, silhouette, UI, HUD, health bar, +text, watermark, signature, modern, photorealistic skin +``` + +**If hands still appear, the real fixes (in order):** +1. Remove every trigger word above from the positive prompt. +2. Add stronger empty-scene tokens up front: `empty, deserted, no people, uninhabited, abandoned`. +3. Floor-bias the depth so the lower frame is clearly continuous floor (your `corridor_depth --floor-bias`) — fewer ambiguous near-camera regions for the model to "fill" with a body. A bright featureless blob at the bottom of the depth map invites hands. +4. Only as a last resort raise cfg to ~1.3–1.5 (re-enables negatives) and accept slower, slightly stiffer renders. + +--- + +## 3. Cross-frame style consistency (atlas of one dungeon) + +Goal: many views, one coherent place. Levers, strongest first: + +1. **Identical style-anchor block on every frame** (see §1). This is the #1 consistency lever since the prompt owns all style/lighting/material and the depth map varies per view. Keep the lighting + material tokens byte-identical across the whole atlas; only swap the geometry-neutral body ("corridor" vs "chamber") and optional theme word. +2. **Fix the seed across the whole batch.** Same seed + same model + same style block → consistent palette and lighting character; the per-view depth map supplies the differing geometry. (Note: Z-Image is reported to "hardwire" composition to the seed even across prompt changes — that's a *feature* here, it locks the look.) +3. **Lock everything else:** sampler `res_multistep`, scheduler `simple`, steps 8, cfg 1.0, shift, resolution. Any change to these shifts the rendering character. +4. **Keep control strength constant** across frames (one value, e.g. 0.65) so geometry adherence — and thus how much "model style" bleeds in — is uniform. +5. Bake a fixed ` + +
+W/S forward·back · A/D turn
+ + +