environment-shot · git:20261103.3a68c5e · 2026-11-03 · sha256 08c565c7766e48c8

environment-shot git:20261103.3a68c5eA

Immutable. This exact content never changes and is served at /api/v1/blob/08c565c7766e48c8.

---
name: environment-shot
description: Plan a wide environment / establishing-shot scene (locale, time of day, weather, focal subject, depth, atmosphere) before any modeling or render attempt.
---

# environment-shot

## Purpose
Translate a wide place-establishing intent (locale, time of day, weather, atmosphere, foreground/midground/background depth layers, and focal subject or explicit "none") into a structured scene plan with an explicit assumptions register. Distinct from `character-portrait` (single subject), `product-hero-scene-planner` (manufactured products), and `interior-scene` (interior rooms/furniture/surfaces — an establishing shot of an interior room belongs there when furniture or surfaces dominate). Hands off asset rows to `asset-discovery` and validation to `composition-quality-checker`, `lighting-quality-checker`, and `scene-readiness`.

## Quick start
- confirm upstream brief from `intent-to-3d-brief-writer` and verify a realizable (non-invented) locale scope
- pin locale, time of day, weather, and atmosphere
- pin foreground (FG), midground (MG), and background (BG) depth layers
- pin focal subject (or explicitly declare `none`)
- record an explicit assumptions register
- flag asset rows for `asset-discovery` and emit validation handoffs with `Runtime status: Not Run` and `Artifact status: Not Produced`

## When to use
- intent is establishing a wide place (landscape, cityscape, outdoor locale, or wide interior space where furniture/surfaces do not dominate)
- before any modeling, Geometry Nodes, or scene building
- when consumer is editorial, cinematic, or brand

## When not to use
<!-- blendops:generated:start exclusions -->
- character portrait → use `../character-portrait/SKILL.md` (use character-portrait)
- product hero → use `../product-hero-scene-planner/SKILL.md` (use product-hero-scene-planner)
- interior arch viz with focus on furniture / surfaces → use `../interior-scene/SKILL.md` (use interior-scene)
<!-- blendops:generated:end exclusions -->

## Trigger phrases
<!-- blendops:generated:start triggers -->
- "establishing shot of"
- "wide shot of"
- "city / forest / desert / ocean scene"
- "set the scene"
<!-- blendops:generated:end triggers -->

## Prerequisites / readiness
- brief from `intent-to-3d-brief-writer` is locked
- locale scope is realizable and bounded (never invented)
- target aspect ratio and use case are known

## Input schema

### Required inputs

| Input | Why it is required |
|---|---|
| Realizable locale | Drives bounded asset and depth-layer scope without inventing unrequested worldbuilding |
| Time of day | Drives sunlight direction, sky tone, and lighting mood |
| Weather + atmosphere | Drives visibility, haze/fog, and surface condition |
| Focal subject intent | Identifies the visual anchor (or explicitly confirms `none`) |

### Optional inputs

| Input | Use |
|---|---|
| Reference images | Calibrate place scope, depth layers, and mood |
| Aspect ratio | Guides framing across FG / MG / BG layers |
| Era / period | Aligns asset discovery rows |

### Assumptions to confirm
- Single time-of-day snapshot (unless animation is explicitly requested upstream).
- Locale scope is realizable and bounded, not invented.
- Interior rooms dominated by furniture or surfaces are routed to `interior-scene`.
- Planning-only output: `Runtime status` stays `Not Run` and `Artifact status` stays `Not Produced`.

## Output schema

### Primary output
A structured place-establishing plan covering: Locale (bounded scope), Time of day, Weather, Atmosphere, Depth layers (FG / MG / BG), Focal subject (or explicit `none`), Mood / style, and an Assumptions register.

### Secondary output
- asset rows flagged for `asset-discovery`
- validation handoffs to `composition-quality-checker`, `lighting-quality-checker`, and `scene-readiness`
- explicit `Runtime status: Not Run` and `Artifact status: Not Produced` labels

### Evidence / caveat output

```txt
Runtime status: Not Run | Attempted | Produced | Verified | Failed
Artifact status: Not Produced | Produced | Verified | Failed
Evidence used: <links, paths, logs, or "none">
Limitations: <known gaps>
```

## Required laws
- `../../laws/evidence-before-done.md`
- `../../laws/non-blender-user-language.md`
- `../../laws/no-arbitrary-python-interface.md`
- `../../laws/official-runtime-only.md`

## Official runtime boundary

Planning-only skill: no modeling, no Geometry Nodes, no render, and no Blender execution. `Runtime status` stays `Not Run` and `Artifact status` stays `Not Produced` (downgrade-only, never upgrade). If the brief or locale scope is unclear, hand off to `intent-to-3d-brief-writer`.

## Operating procedure
1. Read the brief from `intent-to-3d-brief-writer`; confirm wide place-establishing scope and ensure locale scope is realizable (not invented).
2. Route to `interior-scene` if the scene is an interior room where furniture or surfaces dominate.
3. Pin time of day, weather, and atmosphere (per `references/time-and-weather-rules.md`).
4. Define wide camera placement and framing intent (per `references/wide-shot-camera-rules.md`).
5. Plan foreground (FG), midground (MG), and background (BG) depth layers (per `references/depth-layering-rules.md`).
6. Identify the focal subject or explicitly document `none`.
7. Record all open assumptions in the assumptions register.
8. List required assets for `asset-discovery` and emit validation handoffs to `composition-quality-checker`, `lighting-quality-checker`, and `scene-readiness` with `Runtime status: Not Run` and `Artifact status: Not Produced`.

## Decision tree

```txt
Scene is an interior room where furniture or surfaces dominate?
  → Stop; route to interior-scene
Focus is a single character or a manufactured product?
  → Stop; route to character-portrait or product-hero-scene-planner
Locale scope is unbounded or unclear (would require inventing scope)?
  → Stop; hand off to intent-to-3d-brief-writer to bound locale scope
Locale + time-of-day combination implausible (e.g. "Antarctic noon" with deep dark mood)?
  → Warn; clarify intent
"City scene" + tight close-up framing?
  → Warn; this is not establishing — re-frame or use different planner
Weather conflicts with brief mood (sunny + noir)?
  → Fail; pick one
Focal subject not chosen but every asset has same visual weight?
  → Fail; eye has nowhere to land
```

## Playbooks

### Playbook A: City sunset establishing (16:9 cinematic)
35mm wide; camera elevated; warm sun direction; haze layer; subject = skyline silhouette; foreground rooftops; background sky gradient.

### Playbook B: Forest mid-day (1:1 brand campaign)
24mm wide; camera at human eye-line; key sun + dappled light; foreground branches; midground tree trunks; background distant haze.

### Playbook C: Stylized cyberpunk street (2.39:1 cinematic)
24–35mm; rain wet ground reflections; neon practicals; light haze + atmospheric fog; foreground silhouette; midground signage / cars; background distant towers.

## Mode handling

### Text-only mode
Produce the environment plan and assumptions register; keep `Runtime status: Not Run` and `Artifact status: Not Produced`.

### Runtime-ready mode
Planning-only even when runtime is available downstream: keep `Runtime status: Not Run` and `Artifact status: Not Produced` (downgrade-only, never upgrade), and hand off to `asset-discovery` and quality checkers.

### Blocked runtime mode
Produce the environment plan and assumptions register; keep `Runtime status: Not Run` and `Artifact status: Not Produced`, and log blockers under `Limitations`.

## Validation checklist
- [ ] Realizable, non-invented locale scope confirmed
- [ ] Time of day, weather, and atmosphere pinned
- [ ] Depth layers (FG / MG / BG) explicitly defined
- [ ] Focal subject (or explicit `none`) documented
- [ ] Assumptions register included
- [ ] Asset rows flagged for `asset-discovery`
- [ ] Validation handoffs named (`composition-quality-checker`, `lighting-quality-checker`, `scene-readiness`)
- [ ] `Runtime status: Not Run` and `Artifact status: Not Produced` explicitly set

## Pass / Warn / Fail rubric

| Verdict | Criteria |
| --- | --- |
| Pass | Realizable locale scope; consistent time/weather/atmosphere; explicit FG/MG/BG depth layers; focal subject (or explicit `none`); assumptions register complete; truth states locked to `Not Run` / `Not Produced`; handoffs named. |
| Warn | Minor non-blocking assumption open in the assumptions register; asset list partial. |
| Fail | Invented or unbounded locale scope; interior room dominated by furniture/surfaces; contradictory time/weather/mood; missing FG/MG/BG layers; missing focal subject decision; truth states upgraded above `Not Run` / `Not Produced`. |

## Failure handling
- Locale scope too broad or unclear → hand off to `intent-to-3d-brief-writer` (never invent scope).
- Mood and weather contradict → stop and ask user to pick one consistent direction.
- Asset availability unknown → flag missing items for `asset-discovery`.

## Troubleshooting

| Problem | Response |
|---|---|
| Sun direction conflicts with shadows in reference | Verify time-of-day + sun azimuth; clarify reference. |
| Atmospheric haze hides focal subject | Reduce haze density or move subject closer. |
| Background too detailed | Simplify; use atmospheric perspective. |

## Best practices
- Lock time-of-day + weather + atmosphere together; they form a system.
- Always plan FG / MG / BG depth layers.
- Pair establishing shot with the next narrative step (often character portrait or product reveal).

## Good examples
- "Locale: cyberpunk city street, near-future. Time: night, neon lit. Weather: light rain. Atmosphere: haze 0.05 density, volumetric scattering. Sky: minimal (occluded by buildings). Camera: 24mm, eye-level, slight low-angle tilt. FG: silhouetted figure. MG: neon signage + parked cars. BG: distant towers + fog. Focal subject: figure silhouette right-third. Mood: gritty, atmospheric."

## Bad examples
- "Wide shot of a city." — no time, weather, lens, depth.

## User-facing response template

```txt
Locale (bounded scope): <where + realizable boundaries>
Time of day: <time / sun state>
Weather: <weather state>
Atmosphere: <haze / fog / visibility>
Camera & framing: <wide position / altitude / tilt>
Depth layers: FG: <…> | MG: <…> | BG: <…>
Focal subject: <subject + placement, or explicit "none">
Mood + style: <line>
Assumptions register: <explicit list of confirmed assumptions>

Assets to discover: <rows for asset-discovery>
Runtime status: Not Run
Artifact status: Not Produced
Evidence used: <links, paths, logs, or "none">
Limitations: <known gaps>
Next: asset-discovery | composition-quality-checker | lighting-quality-checker | scene-readiness
```

## Anti-patterns
- Mixing single-character portraits (`character-portrait`), manufactured product shots (`product-hero-scene-planner`), or furniture/surface-dominant interior rooms (`interior-scene`) into wide place planning.
- Inventing unbounded locale scope instead of handing off to `intent-to-3d-brief-writer`.
- Skipping FG / MG / BG depth layers or failing to declare a focal subject (or explicit `none`).
- Prescribing Geometry Nodes, modeling steps, or renders, or upgrading truth states above `Not Run` / `Not Produced`.

## Cross-skill handoff
<!-- blendops:generated:start handoffs -->
- [upstream_reference] Brief writer → `../intent-to-3d-brief-writer/SKILL.md`
- [upstream_reference] Asset discovery → `../asset-discovery/SKILL.md`
- [progression] Composition validation → `../composition-quality-checker/SKILL.md`
- [progression] Lighting validation → `../lighting-quality-checker/SKILL.md`
- [progression] Quality readiness → `../scene-readiness/SKILL.md`
<!-- blendops:generated:end handoffs -->

## Non-goals
- Model the environment.
- Generate Geometry Node setups.
- Render.
- Run Blender.

## References
- `references/time-and-weather-rules.md`
- `references/wide-shot-camera-rules.md`
- `references/depth-layering-rules.md`
- `../../docs/skill-system.md`