SlopCamera
Browse documentationHow-to guides · Plan camera moves, lighting, and effects for a 3D scene

How-to guides

Plan camera moves, lighting, and effects for a 3D scene

Pack direction, galleries, effects, and an audit into the cinematic-world workflow, then review before selecting.

The cinematic-world workflow takes one 3D scene from direction to review. It checks your direction, plans variants along the axes you choose, such as camera or lighting, renders up to four previews with any effects you declare, and can audit frames sampled across the shot. You describe all of this in one JSON recipe file (slopcamera.spatial-recipe-pack), which SlopCamera reads as data and never runs as code.

This guide is the durable-graph counterpart of the scene, direction, and effects commands covered in Render and edit Three.js 3D scenes. The commands ship in v3.3.1 and later releases; install the verified release or build from source. Check slopcamera help scene and slopcamera workflows show cinematic-world --json for the installed contract.

Ask for the quality bar

When an agent with the SlopCamera Agent Skill writes the scene, a brief can set the quality bar in one line:

A lantern-lit courtyard reveal at dusk: accurate physics, AAA graphics, VFX.

The skill applies that bar to every 3D brief unless you override it: real-world scale and contact, physically based materials, a tone map, soft shadows and clean edges, and effects only where they help the shot. The agent checks the rendered previews against all three parts before it hands them back. The spatial scene renderer has no live physics and no anti-aliasing, so the agent reports those limits when they apply.

Author and check the direction

A slopcamera.spatial-direction document describes beats, actions, camera coverage, and look intents semantically. Its projectDigest must equal the scene's canonical SHA-256:

slopcamera scene inspect world.json --json    # read sceneSha256
slopcamera scene direction check direction.json --scene world.json --json

The same direction compiles deterministically into proposed performance, camera, cinema, material-lighting, and shot documents through slopcamera scene direction plan, and slopcamera scene direction gallery plans bounded variants along one axis — performance, camera, lighting, materials, effects, or sequence. Declared effects bind to a render through scene effects plan and scene effects check, and scene temporal-audit reports sampled evidence without launching a renderer. The workflow below composes exactly these operations.

Author the recipe pack

A recipe pack names the scene by digest, one direction document, the gallery axes to explore, named preview render requests, an optional effects block, and optional temporal-audit inputs:

{
  "kind": "slopcamera.spatial-recipe-pack",
  "schemaVersion": 1,
  "packId": "recipe_reveal",
  "sceneSha256": "<scene canonical sha-256>",
  "direction": { "kind": "slopcamera.spatial-direction", "schemaVersion": 1 },
  "cameraId": "camera_main",
  "axes": ["camera", "lighting"],
  "previews": [{
    "name": "reel",
    "request": {
      "cameraId": "camera_main",
      "mode": { "kind": "beauty" },
      "selection": { "kind": "frame", "timeUs": 0 }
    }
  }],
  "effects": {
    "renderPlan": {
      "kind": "slopcamera.spatial-render-plan",
      "schemaVersion": 1,
      "quality": {
        "outputBytes": 8000000, "particleCount": 0, "pixelBudget": 2073600,
        "simulationSteps": 0, "texturePixelBudget": 2073600, "tier": "preview"
      }
    },
    "particleSystems": [],
    "simulationBakes": []
  },
  "temporalAudit": { "timesUs": [0, 2000000, 4000000] }
}

The pack's own rules: axes takes 1–6 unique values from the six axis names; previews admits at most 4 named render requests; temporalAudit requires cameraId and bounds timesUs to 64 samples; packId carries a recipe_ prefix. Omit effects or temporalAudit entirely to skip those branches — the workflow does not guess defaults for them.

Plan the workflow

The workflow input wraps the pack with the admitted scene and the repository path of the same scene:

{
  "pack": { "...the recipe pack above..." },
  "scene": { "...the slopcamera.spatial-scene document..." },
  "source": { "path": "scenes/world.json" }
}

pack.sceneSha256 must equal the canonical digest of the embedded scene, and every preview request is revalidated against the render-request schema at admission. Planning compiles the graph and reports its requirements without executing any operation:

slopcamera workflows plan cinematic-world --input input.json --json

Run and review

slopcamera workflows run cinematic-world --input input.json --json

The run produces inspect output, a direction check report, a verified: false direction compilation, one bounded gallery plan per axis, an integrity-bound effects document per preview, each preview render receipt, and a temporal-audit report. Durable runs resume through slopcamera runs show and runs resume with the same receipts and recovery rules as every other workflow — see Run or recover a workflow.

What the workflow never does

  • It never selects or promotes a candidate. slopcamera scene project select-candidate and the creative-selection workflow are separate explicit operations after review.
  • Compiled direction stays verified: false; it is a proposal document, not applied state.
  • Planning and graph compilation execute no operations, read no credentials, contact no providers, and mutate no project state.
  • A recipe pack cannot register operations, executors, source paths beyond the declared render source, permissions, secrets, or remote URLs. It is inert data validated before graph construction — see Extend SlopCamera for the full trust model.

Iterate

Change the direction, axes, previews, or effects block and repack — the pack digest changes, and planning produces a new deterministic plan identity. Equivalent inputs always yield the same plan, so a diff in graphPlanSha256 is a diff in declared intent.