NAMEFRAME Frame the world. Name the frames.

Command reference

Every nameframe subcommand, with every flag, its default and its allowed values. This page is generated from the CLI's own argument parser, so it always matches the version you have installed.

Calling convention#

nameframe <command> [arguments]
python -m nameframe.cli <command> [arguments]

Both forms are identical. The second works without installing the console script.

Any command's own help is authoritative:

nameframe generate --help
Reading the tables

Arguments without leading dashes are positional and go in the order shown. Default is what happens when you omit the flag, and a blank default means the flag has no effect unless you pass it. Flags marked required have to be supplied. <value> just means the flag takes a value.

110 commands are available in this build.

Everyday pipeline#

The commands you use on almost every run. generate is the one-liner; the rest are the same stages exposed individually.

CommandPurpose
generateheadless one-command dump -> report/dataset/validate
runresumable offline pipeline over a dump (verify/label/report/dataset/validate) with autosave and --resume
demo-dumpgenerate a self-contained synthetic dump (no Unreal)
verifyrun pre-flight checks on a dump
labelderive YOLO labels from a raw dump
reportwrite a JSON summary and lightweight HTML viewer for a dump
datasetassemble labelled dumps into a YOLO train/val/test dataset
validatevalidate an assembled YOLO/COCO dataset and score it
dataset-inspectwrite a dataset inspector and sample browser
infosummarise a dump
comparecompare derived labels against a reference capture

nameframe generate

headless one-command dump -> report/dataset/validate

nameframe generate [-h] (--demo | --dump DUMP | --job JOB | --scenario SCENARIO) [--scene-manifest SCENE_MANIFEST] [--target-samples TARGET_SAMPLES] [--job-id JOB_ID] [--capture-width CAPTURE_WIDTH] [--capture-height CAPTURE_HEIGHT] --output OUTPUT [--samples SAMPLES] [--seed SEED] [--avatars AVATARS] [--resume] [--no-verify] [--report-preview-limit REPORT_PREVIEW_LIMIT] [--lens-profile LENS_PROFILE] [--lens-intensity LENS_INTENSITY] [--lens-profile-weights LENS_PROFILE_WEIGHTS] [--report-show-clean-images] [--report-show-segmentation] [--dataset-task {box,pose}] [--dataset-format DATASET_FORMAT] [--dataset-val-frac DATASET_VAL_FRAC] [--dataset-test-frac DATASET_TEST_FRAC] [--dataset-split-strategy {hash,by_dump,sequential}] [--dataset-coco-exports DATASET_COCO_EXPORTS] [--dataset-filter-min-instances DATASET_FILTER_MIN_INSTANCES] [--dataset-filter-max-instances DATASET_FILTER_MAX_INSTANCES] [--dataset-filter-include-classes DATASET_FILTER_INCLUDE_CLASSES] [--dataset-filter-require-classes DATASET_FILTER_REQUIRE_CLASSES] [--dataset-filter-exclude-classes DATASET_FILTER_EXCLUDE_CLASSES] [--include-clean-images] [--include-segmentation] [--fail-under FAIL_UNDER] [--inspect] [--inspect-sample-limit INSPECT_SAMPLE_LIMIT] [--remote-url REMOTE_URL] [--world-context WORLD_CONTEXT] [--timeout TIMEOUT] [--compile]
ArgumentWhat it doesDefault
--demogenerate a local procedural demo dump firstoff
--dump <value>use an existing raw dump
--job <value>capture an Unreal job through Remote Control first
--scenario <value>compile ScenarioConfig JSON and capture it through Remote Control
--scene-manifest <value>SceneManifest JSON required with --scenario
--target-samples <value>override ScenarioConfig generation sample count
--job-id <value>safe execution ID for a compiled ScenarioConfig
--capture-width <value>320
--capture-height <value>240
--output <value>
required
output root for dump/report/dataset/validation/inspector
--samples <value>number of demo frames for --demo200
--seed <value>demo seed for --demo7
--avatars <value>number of demo avatars for --demo6
--resumeresume capture/pipeline when existing artifacts matchoff
--no-verifyoff
--report-preview-limit <value>12
--lens-profile <value>none
--lens-intensity <value>1.0
--lens-profile-weights <value>
--report-show-clean-imagesoff
--report-show-segmentationoff
--dataset-task <value>
choices: box, pose
box
--dataset-format <value>comma-separated: yolo,cocoyolo,coco
--dataset-val-frac <value>0.2
--dataset-test-frac <value>0.0
--dataset-split-strategy <value>
choices: hash, by_dump, sequential
hash
--dataset-coco-exports <value>
--dataset-filter-min-instances <value>
--dataset-filter-max-instances <value>
--dataset-filter-include-classes <value>
--dataset-filter-require-classes <value>
--dataset-filter-exclude-classes <value>
--include-clean-imagesoff
--include-segmentationoff
--fail-under <value>
--inspectwrite dataset inspector/sample browser after validationoff
--inspect-sample-limit <value>12
--remote-url <value>http://127.0.0.1:30010
--world-context <value>empty
--timeout <value>600.0
--compileoff

nameframe run

resumable offline pipeline over a dump (verify/label/report/dataset/validate) with autosave and --resume

nameframe run [-h] [--state STATE] [--resume] [--verify] [--label-out LABEL_OUT] [--label-kinds LABEL_KINDS] [--report-out REPORT_OUT] [--report-preview-limit REPORT_PREVIEW_LIMIT] [--lens-profile LENS_PROFILE] [--lens-intensity LENS_INTENSITY] [--lens-profile-weights LENS_PROFILE_WEIGHTS] [--report-show-clean-images] [--report-show-segmentation] [--dataset-out DATASET_OUT] [--dataset-task {box,pose}] [--dataset-format DATASET_FORMAT] [--dataset-val-frac DATASET_VAL_FRAC] [--dataset-test-frac DATASET_TEST_FRAC] [--dataset-split-strategy {hash,by_dump,sequential}] [--dataset-coco-exports DATASET_COCO_EXPORTS] [--dataset-filter-min-instances DATASET_FILTER_MIN_INSTANCES] [--dataset-filter-max-instances DATASET_FILTER_MAX_INSTANCES] [--dataset-filter-include-classes DATASET_FILTER_INCLUDE_CLASSES] [--dataset-filter-require-classes DATASET_FILTER_REQUIRE_CLASSES] [--dataset-filter-exclude-classes DATASET_FILTER_EXCLUDE_CLASSES] [--include-clean-images] [--include-segmentation] [--validate-out VALIDATE_OUT] [--fail-under FAIL_UNDER] dump
ArgumentWhat it doesDefault
dumprequired
--state <value>state file (default <dump>/job_state.json)
--resumeskip steps already done unchangedoff
--verifyoff
--label-out <value>
--label-kinds <value>comma list of box,seg,pose
--report-out <value>
--report-preview-limit <value>12
--lens-profile <value>none
--lens-intensity <value>1.0
--lens-profile-weights <value>for --lens-profile random: profile:weight,profile:weight
--report-show-clean-imagesoff
--report-show-segmentationoff
--dataset-out <value>
--dataset-task <value>
choices: box, pose
box
--dataset-format <value>comma-separated: yolo, cocoyolo
--dataset-val-frac <value>0.2
--dataset-test-frac <value>0.0
--dataset-split-strategy <value>
choices: hash, by_dump, sequential
hash
--dataset-coco-exports <value>for --dataset-format coco: instances, person_keypoints, or all
--dataset-filter-min-instances <value>
--dataset-filter-max-instances <value>
--dataset-filter-include-classes <value>
--dataset-filter-require-classes <value>
--dataset-filter-exclude-classes <value>
--include-clean-imagesoff
--include-segmentationoff
--validate-out <value>
--fail-under <value>

nameframe demo-dump

generate a self-contained synthetic dump (no Unreal)

nameframe demo-dump [-h] [--frames FRAMES] [--seed SEED] [--avatars AVATARS] out
ArgumentWhat it doesDefault
outrequired
--frames <value>16
--seed <value>7
--avatars <value>6

nameframe verify

run pre-flight checks on a dump

nameframe verify [-h] dump
ArgumentWhat it doesDefault
dumprequired

nameframe label

derive YOLO labels from a raw dump

nameframe label [-h] [--kinds KINDS] dump out
ArgumentWhat it doesDefault
dumprequired
outrequired
--kinds <value>comma list of box,seg,pose (default all)

nameframe report

write a JSON summary and lightweight HTML viewer for a dump

nameframe report [-h] [--preview-limit PREVIEW_LIMIT] [--no-verify] [--lens-profile LENS_PROFILE] [--lens-intensity LENS_INTENSITY] [--lens-profile-weights LENS_PROFILE_WEIGHTS] [--show-clean-images] [--show-segmentation] [--precipitation] [--precipitation-strength PRECIPITATION_STRENGTH] [--fail-on-quality] dump out
ArgumentWhat it doesDefault
dumprequired
outrequired
--preview-limit <value>12
--no-verifyskip verify checks in the reportoff
--lens-profile <value>render preview with a camera lens profilenone
--lens-intensity <value>1.0
--lens-profile-weights <value>for --lens-profile random: profile:weight,profile:weight
--show-clean-images, --show-cleaninclude clean RGB images as a toggleable report layeroff
--show-segmentation, --show-seginclude segmentation masks as a toggleable report layeroff
--precipitation, --precipcomposite rain/snow particles for weather frames (UDS/UDW GPU particles do not render in editor scene captures)off
--precipitation-strength, --precip-strength <value>scale the rain/snow overlay density (default 1.0)1.0
--fail-on-qualityreturn non-zero if report quality gates failoff

nameframe dataset

assemble labelled dumps into a YOLO train/val/test dataset

nameframe dataset [-h] [--task {box,pose}] [--format FORMAT] [--val-frac VAL_FRAC] [--test-frac TEST_FRAC] [--split-strategy {hash,by_dump,sequential}] [--coco-exports COCO_EXPORTS] [--lens-profile LENS_PROFILE] [--lens-intensity LENS_INTENSITY] [--lens-profile-weights LENS_PROFILE_WEIGHTS] [--include-clean-images] [--include-segmentation] [--precipitation] [--precipitation-strength PRECIPITATION_STRENGTH] [--filter-min-instances FILTER_MIN_INSTANCES] [--filter-max-instances FILTER_MAX_INSTANCES] [--filter-include-classes FILTER_INCLUDE_CLASSES] [--filter-require-classes FILTER_REQUIRE_CLASSES] [--filter-exclude-classes FILTER_EXCLUDE_CLASSES] dumps out
ArgumentWhat it doesDefault
dumpsrequiredcomma-separated dump dirs
outrequired
--task <value>
choices: box, pose
box
--format <value>comma-separated: yolo, coco, or both (e.g. yolo,coco)yolo
--val-frac <value>0.2
--test-frac <value>0.0
--split-strategy <value>
choices: hash, by_dump, sequential
hash per frame, hold out whole dumps, or ordered sequential blockshash
--coco-exports <value>for --format coco: instances, person_keypoints, or all
--lens-profile <value>camera look for images/: none, random (weighted mix), or a named profile e.g. realistic_drone, dashcam, cctv, bodycam, phone_camera, rainy_lens, golden_hour, harsh_noon, night_street, night_vision, thermal_white_hot, sepia_vintage, cold_cine, action_cam, vhs_analog, cheap_webcam, underexposed_noisenone
--lens-intensity <value>lens strength; 0 keeps images clean, 1 is normal, up to 2 is strong1.0
--lens-profile-weights <value>for --lens-profile random: profile:weight,profile:weight
--include-clean-imagesalso write clean_images/{train,val,test} from the original RGBoff
--include-segmentationalso write segmentation/{train,val,test} masksoff
--precipitation, --precipcomposite rain/snow particles for weather frames (UDS/UDW GPU particles do not render in editor scene captures)off
--precipitation-strength, --precip-strength <value>scale the rain/snow overlay density (default 1.0)1.0
--filter-min-instances <value>skip frames with fewer kept instances after labelling QA
--filter-max-instances <value>skip frames with more kept instances after labelling QA
--filter-include-classes <value>comma-separated classes; keep frames with at least one of them
--filter-require-classes <value>comma-separated classes; keep only frames containing all of them
--filter-exclude-classes <value>comma-separated classes; skip frames containing any of them

nameframe validate

validate an assembled YOLO/COCO dataset and score it

nameframe validate [-h] [--out OUT] [--format FORMAT] [--fail-under FAIL_UNDER] [--near-duplicate-hamming 0..16] dataset
ArgumentWhat it doesDefault
datasetrequiredassembled dataset dir (has data.yaml and/or annotations/)
--out <value>write validation.json + validation.html here
--format <value>comma-separated: yolo, coco (default: auto-detect)
--fail-under <value>exit non-zero if the quality score is below this
--near-duplicate-hamming 0..16
choices: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16
perceptual dHash distance for near-duplicate/leakage checks4

nameframe dataset-inspect

write a dataset inspector and sample browser

nameframe dataset-inspect [-h] [--sample-limit SAMPLE_LIMIT] [--format FORMAT] [--no-validate] dataset out
ArgumentWhat it doesDefault
datasetrequiredassembled dataset dir
outrequiredoutput folder for inspector.json and index.html
--sample-limit <value>80
--format <value>comma-separated: yolo, coco
--no-validateskip validation and only browse manifest/samplesoff

nameframe info

summarise a dump

nameframe info [-h] dump
ArgumentWhat it doesDefault
dumprequired

nameframe compare

compare derived labels against a reference capture

nameframe compare [-h] [--kinds KINDS] derived reference
ArgumentWhat it doesDefault
derivedrequired
referencerequired
--kinds <value>box,seg

Unreal capture and live control#

These talk to an open Unreal editor over Remote Control (default http://127.0.0.1:30010). Unreal must be running with the NameFrameCapture plugin and the Remote Control API enabled.

CommandPurpose
capture-unrealrun an NameFrameCapture job in an open Unreal editor
scene-unrealscan the active Unreal world and emit SceneManifest v1 JSON
scene-validatevalidate SceneManifest v1 JSON and derive class registry
generation-planvalidate scenario+scene and write deterministic sample plan
live-smokeauthor and test a small live scene in an open Unreal editor
live-soakrun a large live Unreal proof in resumable capture batches
viewpoint-calibraterecommend Smart Viewpoint thresholds from captured frame metadata
dump-fresh-startarchive prior raw artifacts before a new capture run
spawn-manifestsfinalize native placement outcomes into per-frame spawn manifests
import-airsimconvert a legacy AirSim capture into a raw dump

nameframe capture-unreal

run an NameFrameCapture job in an open Unreal editor

nameframe capture-unreal [-h] [--remote-url REMOTE_URL] [--world-context WORLD_CONTEXT] [--timeout TIMEOUT] [--no-wait] [--resume] [--compile] [--verify] [--label-out LABEL_OUT] [--label-kinds LABEL_KINDS] [--report-out REPORT_OUT] [--report-preview-limit REPORT_PREVIEW_LIMIT] [--lens-profile LENS_PROFILE] [--lens-intensity LENS_INTENSITY] [--lens-profile-weights LENS_PROFILE_WEIGHTS] [--report-show-clean-images] [--report-show-segmentation] [--precipitation] [--precipitation-strength PRECIPITATION_STRENGTH] [--fail-on-quality] [--dataset-out DATASET_OUT] [--dataset-task {box,pose}] [--dataset-format DATASET_FORMAT] [--dataset-val-frac DATASET_VAL_FRAC] [--dataset-test-frac DATASET_TEST_FRAC] [--dataset-split-strategy {hash,by_dump,sequential}] [--dataset-coco-exports DATASET_COCO_EXPORTS] [--dataset-filter-min-instances DATASET_FILTER_MIN_INSTANCES] [--dataset-filter-max-instances DATASET_FILTER_MAX_INSTANCES] [--dataset-filter-include-classes DATASET_FILTER_INCLUDE_CLASSES] [--dataset-filter-require-classes DATASET_FILTER_REQUIRE_CLASSES] [--dataset-filter-exclude-classes DATASET_FILTER_EXCLUDE_CLASSES] [--include-clean-images] [--include-segmentation] [--validate-out VALIDATE_OUT] [--fail-under FAIL_UNDER] job
ArgumentWhat it doesDefault
jobrequired
--remote-url <value>http://127.0.0.1:30010
--world-context <value>optional actor path; needed only for --compile or legacy console fallbackempty
--timeout <value>600.0
--no-waitoff
--resumeskip capture if the dump already has all framesoff
--compilerun LiveCoding.CompileSync before captureoff
--verifyrun verify after capture finishesoff
--label-out <value>derive labels into this directory after capture
--label-kinds <value>comma list of box,seg,pose for --label-out
--report-out <value>write a dataset report after capture
--report-preview-limit <value>12
--lens-profile <value>none
--lens-intensity <value>1.0
--lens-profile-weights <value>for --lens-profile random: profile:weight,profile:weight
--report-show-clean-imagesoff
--report-show-segmentationoff
--precipitation, --precipcomposite rain/snow particles into report + dataset images for weather frames (UDS/UDW GPU particles do not render in captures)off
--precipitation-strength, --precip-strength <value>scale the rain/snow overlay density (default 1.0)1.0
--fail-on-qualityreturn non-zero if report quality gates failoff
--dataset-out <value>assemble a dataset after capture
--dataset-task <value>
choices: box, pose
box
--dataset-format <value>comma-separated: yolo, coco, or bothyolo
--dataset-val-frac <value>0.2
--dataset-test-frac <value>0.0
--dataset-split-strategy <value>
choices: hash, by_dump, sequential
hash
--dataset-coco-exports <value>for --dataset-format coco: instances, person_keypoints, or all
--dataset-filter-min-instances <value>dataset export: skip frames with fewer kept instances
--dataset-filter-max-instances <value>dataset export: skip frames with more kept instances
--dataset-filter-include-classes <value>dataset export: keep frames with at least one listed class
--dataset-filter-require-classes <value>dataset export: keep only frames containing every listed class
--dataset-filter-exclude-classes <value>dataset export: skip frames containing any listed class
--include-clean-imagesoff
--include-segmentationoff
--validate-out <value>validate the assembled dataset and write a quality report here
--fail-under <value>return non-zero if the dataset quality score is below this

nameframe scene-unreal

scan the active Unreal world and emit SceneManifest v1 JSON

nameframe scene-unreal [-h] [--remote-url REMOTE_URL] [--timeout TIMEOUT] [--out OUT]
ArgumentWhat it doesDefault
--remote-url <value>http://127.0.0.1:30010
--timeout <value>30.0
--out <value>write manifest JSON to this path instead of stdout

nameframe scene-validate

validate SceneManifest v1 JSON and derive class registry

nameframe scene-validate [-h] [--out OUT] [--generation-ready] scene
ArgumentWhat it doesDefault
scenerequiredscene_manifest.json
--out <value>write validation JSON to this path
--generation-readyfail if the scene lacks classes, spawn zones, camera zones, or camerasoff

nameframe generation-plan

validate scenario+scene and write deterministic sample plan

nameframe generation-plan [-h] [--samples SAMPLES] [--start-index START_INDEX] [--out OUT] scenario scene
ArgumentWhat it doesDefault
scenariorequiredScenarioConfig v1 JSON
scenerequiredSceneManifest v1 JSON
--samples <value>override sample count from scenario generation/output settings
--start-index <value>0
--out <value>write plan JSON to this path instead of stdout

nameframe live-smoke

author and test a small live scene in an open Unreal editor

nameframe live-smoke [-h] [--remote-url REMOTE_URL] [--out-root OUT_ROOT] [--timeout TIMEOUT] [--no-author] [--frames FRAMES] [--samples SAMPLES] [--width WIDTH] [--height HEIGHT] [--no-dataset]
ArgumentWhat it doesDefault
--remote-url <value>http://127.0.0.1:30010
--out-root <value>directory for manifest, capture, labels, report, and dataset artifacts_local/smoke/live_smoke
--timeout <value>180.0
--no-authorskip Unreal Python scene authoring and test the active scene as-isoff
--frames <value>1
--samples <value>number of deterministic planning rows to write5
--width <value>320
--height <value>240
--no-datasetskip report-to-dataset export/validation after captureoff

nameframe live-soak

run a large live Unreal proof in resumable capture batches

nameframe live-soak [-h] [--remote-url REMOTE_URL] [--out-root OUT_ROOT] [--frames FRAMES] [--batch-frames BATCH_FRAMES] [--seed SEED] [--width WIDTH] [--height HEIGHT] [--depth | --no-depth] [--timeout TIMEOUT] [--resume] [--stop-after-batches STOP_AFTER_BATCHES] [--unreal-pid UNREAL_PID] [--telemetry-interval TELEMETRY_INTERVAL] [--no-author]
ArgumentWhat it doesDefault
--remote-url <value>http://127.0.0.1:30010
--out-root <value>_local/live_soak
--frames <value>total frame count across all batches10000
--batch-frames <value>maximum frames sent to Unreal in one capture request1000
--seed <value>30010
--width <value>320
--height <value>240
--depth, --no-depth <value>write depth.npy for each frame (disable for lower-storage resource soaks)on
--timeout <value>timeout in seconds for each Unreal batch3600.0
--resumereuse completed batches from live_soak_state.jsonoff
--stop-after-batches <value>stop cleanly after this many newly completed batches
--unreal-pid <value>sample this Unreal process working set (required for 50k release soak)
--telemetry-interval <value>seconds between process-memory samples (default: 0.25)0.25
--no-authordo not rebuild the native smoke scene before scanningoff

nameframe viewpoint-calibrate

recommend Smart Viewpoint thresholds from captured frame metadata

nameframe viewpoint-calibrate [-h] --out OUT [--lower-percentile LOWER_PERCENTILE] [--upper-percentile UPPER_PERCENTILE] [--safety-margin SAFETY_MARGIN] [--include-rejected] dumps [dumps ...]
ArgumentWhat it doesDefault
dumpsrequiredone or more NameFrame raw dump directories
--out <value>
required
calibration JSON output path
--lower-percentile <value>5.0
--upper-percentile <value>95.0
--safety-margin <value>fractional margin applied outside observed percentile thresholds0.05
--include-rejectedoff

nameframe dump-fresh-start

archive prior raw artifacts before a new capture run

nameframe dump-fresh-start [-h] out_dir
ArgumentWhat it doesDefault
out_dirrequired

nameframe spawn-manifests

finalize native placement outcomes into per-frame spawn manifests

nameframe spawn-manifests [-h] [--seed SEED] dump
ArgumentWhat it doesDefault
dumprequired
--seed <value>master seed (defaults to capture spawn-manifest metadata or zero)

nameframe import-airsim

convert a legacy AirSim capture into a raw dump

nameframe import-airsim [-h] src dst
ArgumentWhat it doesDefault
srcrequired
dstrequired

Studio recipes and presets#

Compile, validate, preview and template the user-facing Studio YAML recipe before spending render time.

CommandPurpose
studio-compilecompile a user-facing studio job to a plugin capture job
studio-validatevalidate a Studio recipe before running Unreal
studio-dry-runwrite a planned frame table without running Unreal
studio-ui-stateemit JSON values for hydrating the Unreal Studio panel
studio-postprocessrun Studio verify/report/dataset stages with progress
prepare-jobcompile/copy a job and apply runtime capture overrides
presetswrite a JSON/HTML gallery for Studio preset YAML files
preset-newcreate an editable Studio YAML preset
distribution-previewsample a distribution spec and write JSON+SVG preview

nameframe studio-compile

compile a user-facing studio job to a plugin capture job

nameframe studio-compile [-h] [--scene-manifest SCENE_MANIFEST] [--output-root OUTPUT_ROOT] [--result RESULT] [--job-id JOB_ID] [--target-samples TARGET_SAMPLES] [--width WIDTH] [--height HEIGHT] src dst
ArgumentWhat it doesDefault
srcrequired
dstrequired
--scene-manifest <value>treat src as ScenarioConfig and compile through the canonical path
--output-root <value>
--result <value>canonical compilation evidence JSON
--job-id <value>
--target-samples <value>
--width <value>320
--height <value>240

nameframe studio-validate

validate a Studio recipe before running Unreal

nameframe studio-validate [-h] [--out OUT] [--valid-viewpoints-only | --no-valid-viewpoints-only] [--viewpoint-min-targets VIEWPOINT_MIN_TARGETS] [--viewpoint-max-targets VIEWPOINT_MAX_TARGETS] [--viewpoint-min-visible-percent VIEWPOINT_MIN_VISIBLE_PERCENT] [--viewpoint-min-bbox-width VIEWPOINT_MIN_BBOX_WIDTH] [--viewpoint-min-bbox-height VIEWPOINT_MIN_BBOX_HEIGHT] [--viewpoint-min-camera-distance VIEWPOINT_MIN_CAMERA_DISTANCE] [--viewpoint-max-camera-distance VIEWPOINT_MAX_CAMERA_DISTANCE] [--viewpoint-max-retries VIEWPOINT_MAX_RETRIES] [--viewpoint-require-fully-visible | --no-viewpoint-require-fully-visible] [--viewpoint-reject-camera-collision | --no-viewpoint-reject-camera-collision] [--viewpoint-reject-under-landscape | --no-viewpoint-reject-under-landscape] [--viewpoint-reject-empty-segmentation | --no-viewpoint-reject-empty-segmentation] [--viewpoint-min-segmentation-coverage-percent VIEWPOINT_MIN_SEGMENTATION_COVERAGE_PERCENT] [--viewpoint-reject-invalid-depth | --no-viewpoint-reject-invalid-depth] [--viewpoint-reject-blur | --no-viewpoint-reject-blur] [--viewpoint-reject-exposure | --no-viewpoint-reject-exposure] [--viewpoint-min-depth-valid-percent VIEWPOINT_MIN_DEPTH_VALID_PERCENT] [--viewpoint-min-focus-score VIEWPOINT_MIN_FOCUS_SCORE] [--viewpoint-min-mean-luma VIEWPOINT_MIN_MEAN_LUMA] [--viewpoint-max-mean-luma VIEWPOINT_MAX_MEAN_LUMA] [--viewpoint-fallback {continue,skip_frame,stop_job,relax_constraints}] [--performance-profile {safe,balanced,fast,custom}] [--render-quality {standard,cinematic}] [--write-depth | --no-write-depth] [--use-ray-tracing-if-enabled | --no-use-ray-tracing-if-enabled] [--precompile-assets | --no-precompile-assets] [--warm-target-shaders | --no-warm-target-shaders] [--stream-all-resources | --no-stream-all-resources] [--force-target-textures-resident | --no-force-target-textures-resident] [--settle-weather-on-change-only | --no-settle-weather-on-change-only] [--dynamic-weather-replay | --no-dynamic-weather-replay] [--cull-id-targets-outside-view | --no-cull-id-targets-outside-view] [--group-id-targets | --no-group-id-targets] [--declare-camera-cut | --no-declare-camera-cut] [--collect-frame-timings | --no-collect-frame-timings] [--rgb-antialiasing | --no-rgb-antialiasing] [--rgb-bloom | --no-rgb-bloom] [--rgb-global-illumination | --no-rgb-global-illumination] [--rgb-lumen | --no-rgb-lumen] [--rgb-shadows | --no-rgb-shadows] [--rgb-reflections | --no-rgb-reflections] [--rgb-volumetrics | --no-rgb-volumetrics] [--rgb-particles | --no-rgb-particles] [--rgb-translucency | --no-rgb-translucency] [--streaming-timeout-seconds STREAMING_TIMEOUT_SECONDS] [--initial-warmup-frames INITIAL_WARMUP_FRAMES] [--weather-batch-frames WEATHER_BATCH_FRAMES] [--weather-warmup-frames WEATHER_WARMUP_FRAMES] [--camera-warmup-frames CAMERA_WARMUP_FRAMES] [--progress-interval-frames PROGRESS_INTERVAL_FRAMES] [--frames FRAMES] [--seed SEED] [--out-dir OUT_DIR] [--width WIDTH] [--height HEIGHT] [--camera-mode {orbit,drone,random,fixed,spline}] [--look-at {target,random_point,free}] [--camera-distance CAMERA_DISTANCE] [--camera-altitude CAMERA_ALTITUDE] [--fov FOV] [--pitch PITCH] [--yaw YAW] [--roll ROLL] [--near-clip-cm NEAR_CLIP_CM] [--far-clip-cm FAR_CLIP_CM] [--export-intrinsics] [--fixed-camera-position FIXED_CAMERA_POSITION] [--fixed-camera-rotation FIXED_CAMERA_ROTATION] [--fixed-camera-actor FIXED_CAMERA_ACTOR] [--flight-path FLIGHT_PATH] [--scatter-existing-targets | --no-scatter-existing-targets] [--shuffle-per-frame | --no-shuffle-per-frame] [--weather WEATHER] [--weather-driver {builtin,ultra_dynamic}] [--weather-weights WEATHER_WEIGHTS] [--uds-actor UDS_ACTOR] [--uds-params UDS_PARAMS] [--udw-actor UDW_ACTOR] [--udw-params UDW_PARAMS] [--weather-settle-seconds WEATHER_SETTLE_SECONDS] src
ArgumentWhat it doesDefault
srcrequiredStudio YAML or compiled capture JSON
--out <value>optional validation JSON path
--valid-viewpoints-only, --no-valid-viewpoints-only <value>
--viewpoint-min-targets <value>
--viewpoint-max-targets <value>
--viewpoint-min-visible-percent <value>
--viewpoint-min-bbox-width <value>
--viewpoint-min-bbox-height <value>
--viewpoint-min-camera-distance <value>
--viewpoint-max-camera-distance <value>
--viewpoint-max-retries <value>
--viewpoint-require-fully-visible, --no-viewpoint-require-fully-visible <value>
--viewpoint-reject-camera-collision, --no-viewpoint-reject-camera-collision <value>
--viewpoint-reject-under-landscape, --no-viewpoint-reject-under-landscape <value>
--viewpoint-reject-empty-segmentation, --no-viewpoint-reject-empty-segmentation <value>
--viewpoint-min-segmentation-coverage-percent <value>
--viewpoint-reject-invalid-depth, --no-viewpoint-reject-invalid-depth <value>
--viewpoint-reject-blur, --no-viewpoint-reject-blur <value>
--viewpoint-reject-exposure, --no-viewpoint-reject-exposure <value>
--viewpoint-min-depth-valid-percent <value>
--viewpoint-min-focus-score <value>
--viewpoint-min-mean-luma <value>
--viewpoint-max-mean-luma <value>
--viewpoint-fallback <value>
choices: continue, skip_frame, stop_job, relax_constraints
--performance-profile <value>
choices: safe, balanced, fast, custom
--render-quality <value>
choices: standard, cinematic
--write-depth, --no-write-depth <value>
--use-ray-tracing-if-enabled, --no-use-ray-tracing-if-enabled <value>
--precompile-assets, --no-precompile-assets <value>
--warm-target-shaders, --no-warm-target-shaders <value>
--stream-all-resources, --no-stream-all-resources <value>
--force-target-textures-resident, --no-force-target-textures-resident <value>
--settle-weather-on-change-only, --no-settle-weather-on-change-only <value>
--dynamic-weather-replay, --no-dynamic-weather-replay <value>
--cull-id-targets-outside-view, --no-cull-id-targets-outside-view <value>
--group-id-targets, --no-group-id-targets <value>
--declare-camera-cut, --no-declare-camera-cut <value>
--collect-frame-timings, --no-collect-frame-timings <value>
--rgb-antialiasing, --no-rgb-antialiasing <value>
--rgb-bloom, --no-rgb-bloom <value>
--rgb-global-illumination, --no-rgb-global-illumination <value>
--rgb-lumen, --no-rgb-lumen <value>
--rgb-shadows, --no-rgb-shadows <value>
--rgb-reflections, --no-rgb-reflections <value>
--rgb-volumetrics, --no-rgb-volumetrics <value>
--rgb-particles, --no-rgb-particles <value>
--rgb-translucency, --no-rgb-translucency <value>
--streaming-timeout-seconds <value>
--initial-warmup-frames <value>
--weather-batch-frames <value>
--weather-warmup-frames <value>
--camera-warmup-frames <value>
--progress-interval-frames <value>
--frames <value>
--seed <value>
--out-dir <value>
--width <value>
--height <value>
--camera-mode <value>
choices: orbit, drone, random, fixed, spline
--look-at <value>
choices: target, random_point, free
--camera-distance <value>
--camera-altitude <value>
--fov <value>
--pitch <value>
--yaw <value>
--roll <value>
--near-clip-cm <value>
--far-clip-cm <value>
--export-intrinsicsoff
--fixed-camera-position <value>
--fixed-camera-rotation <value>
--fixed-camera-actor <value>
--flight-path <value>
--scatter-existing-targets, --no-scatter-existing-targets <value>
--shuffle-per-frame, --no-shuffle-per-frame <value>
--weather <value>
--weather-driver <value>
choices: builtin, ultra_dynamic
--weather-weights <value>
--uds-actor <value>
--uds-params <value>
--udw-actor <value>
--udw-params <value>
--weather-settle-seconds <value>

nameframe studio-dry-run

write a planned frame table without running Unreal

nameframe studio-dry-run [-h] [--valid-viewpoints-only | --no-valid-viewpoints-only] [--viewpoint-min-targets VIEWPOINT_MIN_TARGETS] [--viewpoint-max-targets VIEWPOINT_MAX_TARGETS] [--viewpoint-min-visible-percent VIEWPOINT_MIN_VISIBLE_PERCENT] [--viewpoint-min-bbox-width VIEWPOINT_MIN_BBOX_WIDTH] [--viewpoint-min-bbox-height VIEWPOINT_MIN_BBOX_HEIGHT] [--viewpoint-min-camera-distance VIEWPOINT_MIN_CAMERA_DISTANCE] [--viewpoint-max-camera-distance VIEWPOINT_MAX_CAMERA_DISTANCE] [--viewpoint-max-retries VIEWPOINT_MAX_RETRIES] [--viewpoint-require-fully-visible | --no-viewpoint-require-fully-visible] [--viewpoint-reject-camera-collision | --no-viewpoint-reject-camera-collision] [--viewpoint-reject-under-landscape | --no-viewpoint-reject-under-landscape] [--viewpoint-reject-empty-segmentation | --no-viewpoint-reject-empty-segmentation] [--viewpoint-min-segmentation-coverage-percent VIEWPOINT_MIN_SEGMENTATION_COVERAGE_PERCENT] [--viewpoint-reject-invalid-depth | --no-viewpoint-reject-invalid-depth] [--viewpoint-reject-blur | --no-viewpoint-reject-blur] [--viewpoint-reject-exposure | --no-viewpoint-reject-exposure] [--viewpoint-min-depth-valid-percent VIEWPOINT_MIN_DEPTH_VALID_PERCENT] [--viewpoint-min-focus-score VIEWPOINT_MIN_FOCUS_SCORE] [--viewpoint-min-mean-luma VIEWPOINT_MIN_MEAN_LUMA] [--viewpoint-max-mean-luma VIEWPOINT_MAX_MEAN_LUMA] [--viewpoint-fallback {continue,skip_frame,stop_job,relax_constraints}] [--performance-profile {safe,balanced,fast,custom}] [--render-quality {standard,cinematic}] [--write-depth | --no-write-depth] [--use-ray-tracing-if-enabled | --no-use-ray-tracing-if-enabled] [--precompile-assets | --no-precompile-assets] [--warm-target-shaders | --no-warm-target-shaders] [--stream-all-resources | --no-stream-all-resources] [--force-target-textures-resident | --no-force-target-textures-resident] [--settle-weather-on-change-only | --no-settle-weather-on-change-only] [--dynamic-weather-replay | --no-dynamic-weather-replay] [--cull-id-targets-outside-view | --no-cull-id-targets-outside-view] [--group-id-targets | --no-group-id-targets] [--declare-camera-cut | --no-declare-camera-cut] [--collect-frame-timings | --no-collect-frame-timings] [--rgb-antialiasing | --no-rgb-antialiasing] [--rgb-bloom | --no-rgb-bloom] [--rgb-global-illumination | --no-rgb-global-illumination] [--rgb-lumen | --no-rgb-lumen] [--rgb-shadows | --no-rgb-shadows] [--rgb-reflections | --no-rgb-reflections] [--rgb-volumetrics | --no-rgb-volumetrics] [--rgb-particles | --no-rgb-particles] [--rgb-translucency | --no-rgb-translucency] [--streaming-timeout-seconds STREAMING_TIMEOUT_SECONDS] [--initial-warmup-frames INITIAL_WARMUP_FRAMES] [--weather-batch-frames WEATHER_BATCH_FRAMES] [--weather-warmup-frames WEATHER_WARMUP_FRAMES] [--camera-warmup-frames CAMERA_WARMUP_FRAMES] [--progress-interval-frames PROGRESS_INTERVAL_FRAMES] [--frames FRAMES] [--seed SEED] [--out-dir OUT_DIR] [--width WIDTH] [--height HEIGHT] [--camera-mode {orbit,drone,random,fixed,spline}] [--look-at {target,random_point,free}] [--camera-distance CAMERA_DISTANCE] [--camera-altitude CAMERA_ALTITUDE] [--fov FOV] [--pitch PITCH] [--yaw YAW] [--roll ROLL] [--near-clip-cm NEAR_CLIP_CM] [--far-clip-cm FAR_CLIP_CM] [--export-intrinsics] [--fixed-camera-position FIXED_CAMERA_POSITION] [--fixed-camera-rotation FIXED_CAMERA_ROTATION] [--fixed-camera-actor FIXED_CAMERA_ACTOR] [--flight-path FLIGHT_PATH] [--scatter-existing-targets | --no-scatter-existing-targets] [--shuffle-per-frame | --no-shuffle-per-frame] [--weather WEATHER] [--weather-driver {builtin,ultra_dynamic}] [--weather-weights WEATHER_WEIGHTS] [--uds-actor UDS_ACTOR] [--uds-params UDS_PARAMS] [--udw-actor UDW_ACTOR] [--udw-params UDW_PARAMS] [--weather-settle-seconds WEATHER_SETTLE_SECONDS] src out
ArgumentWhat it doesDefault
srcrequiredStudio YAML or compiled capture JSON
outrequiredoutput folder for dry_run.json and dry_run.csv
--valid-viewpoints-only, --no-valid-viewpoints-only <value>
--viewpoint-min-targets <value>
--viewpoint-max-targets <value>
--viewpoint-min-visible-percent <value>
--viewpoint-min-bbox-width <value>
--viewpoint-min-bbox-height <value>
--viewpoint-min-camera-distance <value>
--viewpoint-max-camera-distance <value>
--viewpoint-max-retries <value>
--viewpoint-require-fully-visible, --no-viewpoint-require-fully-visible <value>
--viewpoint-reject-camera-collision, --no-viewpoint-reject-camera-collision <value>
--viewpoint-reject-under-landscape, --no-viewpoint-reject-under-landscape <value>
--viewpoint-reject-empty-segmentation, --no-viewpoint-reject-empty-segmentation <value>
--viewpoint-min-segmentation-coverage-percent <value>
--viewpoint-reject-invalid-depth, --no-viewpoint-reject-invalid-depth <value>
--viewpoint-reject-blur, --no-viewpoint-reject-blur <value>
--viewpoint-reject-exposure, --no-viewpoint-reject-exposure <value>
--viewpoint-min-depth-valid-percent <value>
--viewpoint-min-focus-score <value>
--viewpoint-min-mean-luma <value>
--viewpoint-max-mean-luma <value>
--viewpoint-fallback <value>
choices: continue, skip_frame, stop_job, relax_constraints
--performance-profile <value>
choices: safe, balanced, fast, custom
--render-quality <value>
choices: standard, cinematic
--write-depth, --no-write-depth <value>
--use-ray-tracing-if-enabled, --no-use-ray-tracing-if-enabled <value>
--precompile-assets, --no-precompile-assets <value>
--warm-target-shaders, --no-warm-target-shaders <value>
--stream-all-resources, --no-stream-all-resources <value>
--force-target-textures-resident, --no-force-target-textures-resident <value>
--settle-weather-on-change-only, --no-settle-weather-on-change-only <value>
--dynamic-weather-replay, --no-dynamic-weather-replay <value>
--cull-id-targets-outside-view, --no-cull-id-targets-outside-view <value>
--group-id-targets, --no-group-id-targets <value>
--declare-camera-cut, --no-declare-camera-cut <value>
--collect-frame-timings, --no-collect-frame-timings <value>
--rgb-antialiasing, --no-rgb-antialiasing <value>
--rgb-bloom, --no-rgb-bloom <value>
--rgb-global-illumination, --no-rgb-global-illumination <value>
--rgb-lumen, --no-rgb-lumen <value>
--rgb-shadows, --no-rgb-shadows <value>
--rgb-reflections, --no-rgb-reflections <value>
--rgb-volumetrics, --no-rgb-volumetrics <value>
--rgb-particles, --no-rgb-particles <value>
--rgb-translucency, --no-rgb-translucency <value>
--streaming-timeout-seconds <value>
--initial-warmup-frames <value>
--weather-batch-frames <value>
--weather-warmup-frames <value>
--camera-warmup-frames <value>
--progress-interval-frames <value>
--frames <value>
--seed <value>
--out-dir <value>
--width <value>
--height <value>
--camera-mode <value>
choices: orbit, drone, random, fixed, spline
--look-at <value>
choices: target, random_point, free
--camera-distance <value>
--camera-altitude <value>
--fov <value>
--pitch <value>
--yaw <value>
--roll <value>
--near-clip-cm <value>
--far-clip-cm <value>
--export-intrinsicsoff
--fixed-camera-position <value>
--fixed-camera-rotation <value>
--fixed-camera-actor <value>
--flight-path <value>
--scatter-existing-targets, --no-scatter-existing-targets <value>
--shuffle-per-frame, --no-shuffle-per-frame <value>
--weather <value>
--weather-driver <value>
choices: builtin, ultra_dynamic
--weather-weights <value>
--uds-actor <value>
--uds-params <value>
--udw-actor <value>
--udw-params <value>
--weather-settle-seconds <value>

nameframe studio-ui-state

emit JSON values for hydrating the Unreal Studio panel

nameframe studio-ui-state [-h] src
ArgumentWhat it doesDefault
srcrequired

nameframe studio-postprocess

run Studio verify/report/dataset stages with progress

nameframe studio-postprocess [-h] [--dump DUMP] [--progress-file PROGRESS_FILE] [--verify | --no-verify] [--report | --no-report] [--dataset | --no-dataset] [--report-out REPORT_OUT] [--dataset-out DATASET_OUT] [--dataset-task {box,pose}] [--val-frac VAL_FRAC] [--test-frac TEST_FRAC] [--preview-limit PREVIEW_LIMIT] [--lens-profile LENS_PROFILE] [--lens-intensity LENS_INTENSITY] [--lens-profile-weights LENS_PROFILE_WEIGHTS] [--report-show-clean-images | --no-report-show-clean-images] [--report-show-segmentation | --no-report-show-segmentation] [--include-clean-images | --no-include-clean-images] [--include-segmentation | --no-include-segmentation] [--precipitation | --no-precipitation] [--extra-report-args EXTRA_REPORT_ARGS] [--extra-dataset-args EXTRA_DATASET_ARGS] job
ArgumentWhat it doesDefault
jobrequiredprepared capture job JSON
--dump <value>
--progress-file <value>
--verify, --no-verify <value>on
--report, --no-report <value>on
--dataset, --no-dataset <value>on
--report-out <value>empty
--dataset-out <value>empty
--dataset-task <value>
choices: box, pose
box
--val-frac <value>0.2
--test-frac <value>0.1
--preview-limit <value>12
--lens-profile <value>empty
--lens-intensity <value>1.0
--lens-profile-weights <value>empty
--report-show-clean-images, --no-report-show-clean-images <value>on
--report-show-segmentation, --no-report-show-segmentation <value>on
--include-clean-images, --no-include-clean-images <value>off
--include-segmentation, --no-include-segmentation <value>off
--precipitation, --no-precipitation <value>on
--extra-report-args <value>empty
--extra-dataset-args <value>empty

nameframe prepare-job

compile/copy a job and apply runtime capture overrides

nameframe prepare-job [-h] [--frames FRAMES] [--seed SEED] [--out-dir OUT_DIR] [--width WIDTH] [--height HEIGHT] [--valid-viewpoints-only | --no-valid-viewpoints-only] [--viewpoint-min-targets VIEWPOINT_MIN_TARGETS] [--viewpoint-max-targets VIEWPOINT_MAX_TARGETS] [--viewpoint-min-visible-percent VIEWPOINT_MIN_VISIBLE_PERCENT] [--viewpoint-min-bbox-width VIEWPOINT_MIN_BBOX_WIDTH] [--viewpoint-min-bbox-height VIEWPOINT_MIN_BBOX_HEIGHT] [--viewpoint-min-camera-distance VIEWPOINT_MIN_CAMERA_DISTANCE] [--viewpoint-max-camera-distance VIEWPOINT_MAX_CAMERA_DISTANCE] [--viewpoint-max-retries VIEWPOINT_MAX_RETRIES] [--viewpoint-require-fully-visible | --no-viewpoint-require-fully-visible] [--viewpoint-reject-camera-collision | --no-viewpoint-reject-camera-collision] [--viewpoint-reject-under-landscape | --no-viewpoint-reject-under-landscape] [--viewpoint-reject-empty-segmentation | --no-viewpoint-reject-empty-segmentation] [--viewpoint-min-segmentation-coverage-percent VIEWPOINT_MIN_SEGMENTATION_COVERAGE_PERCENT] [--viewpoint-reject-invalid-depth | --no-viewpoint-reject-invalid-depth] [--viewpoint-reject-blur | --no-viewpoint-reject-blur] [--viewpoint-reject-exposure | --no-viewpoint-reject-exposure] [--viewpoint-min-depth-valid-percent VIEWPOINT_MIN_DEPTH_VALID_PERCENT] [--viewpoint-min-focus-score VIEWPOINT_MIN_FOCUS_SCORE] [--viewpoint-min-mean-luma VIEWPOINT_MIN_MEAN_LUMA] [--viewpoint-max-mean-luma VIEWPOINT_MAX_MEAN_LUMA] [--viewpoint-fallback {continue,skip_frame,stop_job,relax_constraints}] [--performance-profile {safe,balanced,fast,custom}] [--render-quality {standard,cinematic}] [--write-depth | --no-write-depth] [--use-ray-tracing-if-enabled | --no-use-ray-tracing-if-enabled] [--precompile-assets | --no-precompile-assets] [--warm-target-shaders | --no-warm-target-shaders] [--stream-all-resources | --no-stream-all-resources] [--force-target-textures-resident | --no-force-target-textures-resident] [--settle-weather-on-change-only | --no-settle-weather-on-change-only] [--dynamic-weather-replay | --no-dynamic-weather-replay] [--cull-id-targets-outside-view | --no-cull-id-targets-outside-view] [--group-id-targets | --no-group-id-targets] [--declare-camera-cut | --no-declare-camera-cut] [--collect-frame-timings | --no-collect-frame-timings] [--rgb-antialiasing | --no-rgb-antialiasing] [--rgb-bloom | --no-rgb-bloom] [--rgb-global-illumination | --no-rgb-global-illumination] [--rgb-lumen | --no-rgb-lumen] [--rgb-shadows | --no-rgb-shadows] [--rgb-reflections | --no-rgb-reflections] [--rgb-volumetrics | --no-rgb-volumetrics] [--rgb-particles | --no-rgb-particles] [--rgb-translucency | --no-rgb-translucency] [--streaming-timeout-seconds STREAMING_TIMEOUT_SECONDS] [--initial-warmup-frames INITIAL_WARMUP_FRAMES] [--weather-batch-frames WEATHER_BATCH_FRAMES] [--weather-warmup-frames WEATHER_WARMUP_FRAMES] [--camera-warmup-frames CAMERA_WARMUP_FRAMES] [--progress-interval-frames PROGRESS_INTERVAL_FRAMES] [--camera-mode {orbit,drone,random,fixed,spline}] [--look-at {target,random_point,free}] [--camera-distance CAMERA_DISTANCE] [--camera-altitude CAMERA_ALTITUDE] [--fov FOV] [--pitch PITCH] [--yaw YAW] [--roll ROLL] [--near-clip-cm NEAR_CLIP_CM] [--far-clip-cm FAR_CLIP_CM] [--export-intrinsics] [--fixed-camera-position FIXED_CAMERA_POSITION] [--fixed-camera-rotation FIXED_CAMERA_ROTATION] [--fixed-camera-actor FIXED_CAMERA_ACTOR] [--flight-path FLIGHT_PATH] [--scatter-existing-targets | --no-scatter-existing-targets] [--shuffle-per-frame | --no-shuffle-per-frame] [--weather WEATHER] [--weather-driver {builtin,ultra_dynamic}] [--weather-weights WEATHER_WEIGHTS] [--uds-actor UDS_ACTOR] [--uds-params UDS_PARAMS] [--udw-actor UDW_ACTOR] [--udw-params UDW_PARAMS] [--weather-settle-seconds WEATHER_SETTLE_SECONDS] src dst
ArgumentWhat it doesDefault
srcrequired
dstrequired
--frames <value>
--seed <value>
--out-dir <value>
--width <value>
--height <value>
--valid-viewpoints-only, --no-valid-viewpoints-only <value>
--viewpoint-min-targets <value>
--viewpoint-max-targets <value>
--viewpoint-min-visible-percent <value>
--viewpoint-min-bbox-width <value>
--viewpoint-min-bbox-height <value>
--viewpoint-min-camera-distance <value>
--viewpoint-max-camera-distance <value>
--viewpoint-max-retries <value>
--viewpoint-require-fully-visible, --no-viewpoint-require-fully-visible <value>
--viewpoint-reject-camera-collision, --no-viewpoint-reject-camera-collision <value>
--viewpoint-reject-under-landscape, --no-viewpoint-reject-under-landscape <value>
--viewpoint-reject-empty-segmentation, --no-viewpoint-reject-empty-segmentation <value>
--viewpoint-min-segmentation-coverage-percent <value>
--viewpoint-reject-invalid-depth, --no-viewpoint-reject-invalid-depth <value>
--viewpoint-reject-blur, --no-viewpoint-reject-blur <value>
--viewpoint-reject-exposure, --no-viewpoint-reject-exposure <value>
--viewpoint-min-depth-valid-percent <value>
--viewpoint-min-focus-score <value>
--viewpoint-min-mean-luma <value>
--viewpoint-max-mean-luma <value>
--viewpoint-fallback <value>
choices: continue, skip_frame, stop_job, relax_constraints
--performance-profile <value>
choices: safe, balanced, fast, custom
--render-quality <value>
choices: standard, cinematic
--write-depth, --no-write-depth <value>
--use-ray-tracing-if-enabled, --no-use-ray-tracing-if-enabled <value>
--precompile-assets, --no-precompile-assets <value>
--warm-target-shaders, --no-warm-target-shaders <value>
--stream-all-resources, --no-stream-all-resources <value>
--force-target-textures-resident, --no-force-target-textures-resident <value>
--settle-weather-on-change-only, --no-settle-weather-on-change-only <value>
--dynamic-weather-replay, --no-dynamic-weather-replay <value>
--cull-id-targets-outside-view, --no-cull-id-targets-outside-view <value>
--group-id-targets, --no-group-id-targets <value>
--declare-camera-cut, --no-declare-camera-cut <value>
--collect-frame-timings, --no-collect-frame-timings <value>
--rgb-antialiasing, --no-rgb-antialiasing <value>
--rgb-bloom, --no-rgb-bloom <value>
--rgb-global-illumination, --no-rgb-global-illumination <value>
--rgb-lumen, --no-rgb-lumen <value>
--rgb-shadows, --no-rgb-shadows <value>
--rgb-reflections, --no-rgb-reflections <value>
--rgb-volumetrics, --no-rgb-volumetrics <value>
--rgb-particles, --no-rgb-particles <value>
--rgb-translucency, --no-rgb-translucency <value>
--streaming-timeout-seconds <value>
--initial-warmup-frames <value>
--weather-batch-frames <value>
--weather-warmup-frames <value>
--camera-warmup-frames <value>
--progress-interval-frames <value>
--camera-mode <value>
choices: orbit, drone, random, fixed, spline
--look-at <value>
choices: target, random_point, free
--camera-distance <value>target-orbit distance/radius in metres, fixed '12' or range '4,24'
--camera-altitude <value>camera height above target/zone in metres, fixed '18' or range '10,28'
--fov <value>degrees, fixed '70' or range '50,95'
--pitch <value>degrees, fixed or 'min,max'
--yaw <value>degrees, fixed or 'min,max'
--roll <value>degrees, fixed or 'min,max'
--near-clip-cm <value>
--far-clip-cm <value>
--export-intrinsicsoff
--fixed-camera-position <value>fixed camera world position in metres: x,y,z
--fixed-camera-rotation <value>fixed camera rotation in degrees: pitch,yaw,roll
--fixed-camera-actor <value>CameraActor name or label used by camera mode fixed
--flight-path <value>NameFrameFlightPath name used by camera mode spline
--scatter-existing-targets, --no-scatter-existing-targets <value>
--shuffle-per-frame, --no-shuffle-per-frame <value>
--weather <value>clear_sun, fog, overcast, rain, storm, snow, random
--weather-driver <value>
choices: builtin, ultra_dynamic
builtin drives NameFrame sun/fog/weather; ultra_dynamic leaves weather to UDS/UDW
--weather-weights <value>for --weather random: clear_sun:20,fog:20,overcast:20,rain:20,storm:10,snow:10
--uds-actor <value>Ultra Dynamic Sky actor name/label to drive
--uds-params <value>Ultra Dynamic Sky params: Property=number or min,max;Other=true
--udw-actor <value>Ultra Dynamic Weather actor name/label to drive
--udw-params <value>Ultra Dynamic Weather params: Rain Amount=0,1;Snow Amount=0,1
--weather-settle-seconds <value>advance the world after weather changes before each capture frame

nameframe presets

write a JSON/HTML gallery for Studio preset YAML files

nameframe presets [-h] root out
ArgumentWhat it doesDefault
rootrequireddirectory containing studio_*.yml preset files
outrequiredoutput folder for presets.json and index.html

nameframe preset-new

create an editable Studio YAML preset

nameframe preset-new [-h] --name NAME --preset PRESET --map MAP --out-dir OUT_DIR [--frames FRAMES] [--seed SEED] [--class CLASSES] [--camera-center CAMERA_CENTER] [--camera-radius CAMERA_RADIUS] [--camera-altitude CAMERA_ALTITUDE] [--camera-size CAMERA_SIZE] [--camera-yaw CAMERA_YAW] [--camera-weight CAMERA_WEIGHT] [--spawn-center SPAWN_CENTER] [--spawn-radius SPAWN_RADIUS] [--spawn-size SPAWN_SIZE] [--spawn-yaw SPAWN_YAW] [--spawn-weight SPAWN_WEIGHT] [--spawn-actor-yaw SPAWN_ACTOR_YAW] [--no-shuffle-per-frame] [--use-level-spawn-zones] [--ground-actor-prefix GROUND_ACTOR_PREFIX] [--render-profile RENDER_PROFILE] dst
ArgumentWhat it doesDefault
dstrequiredoutput studio_*.yml path
--name <value>
required
--preset <value>
required
stable preset id
--map <value>
required
expected Unreal map package
--out-dir <value>
required
default raw dump output folder
--frames <value>100
--seed <value>42
--class <value>class spec: label,prefix=BP_,keypoints=coco or car,actor_tag=DatasetTargetCar
--camera-center <value>camera zone center as x,y,z metres
--camera-radius <value>camera zone radius range as min,max metres
--camera-altitude <value>camera altitude range as min,max metres
--camera-size <value>rectangle camera zone size as length,width metres
--camera-yaw <value>rectangle camera zone yaw in degrees
--camera-weight <value>relative shuffle weight for the camera zone
--spawn-center <value>spawn zone center as x,y,z metres
--spawn-radius <value>spawn zone radius range as min,max metres
--spawn-size <value>rectangle spawn zone size as length,width metres
--spawn-yaw <value>rectangle spawn zone yaw in degrees
--spawn-weight <value>relative shuffle weight for the spawn zone
--spawn-actor-yaw <value>actor yaw range inside spawn zone as min,max degrees
--no-shuffle-per-framekeep scattered actors fixed across frameson
--use-level-spawn-zonesimport NameFrameSpawnZone actors from the level at capture timeoff
--ground-actor-prefix <value>Landscape
--render-profile <value>beach_sunny_drone

nameframe distribution-preview

sample a distribution spec and write JSON+SVG preview

nameframe distribution-preview [-h] [--samples SAMPLES] [--seed SEED] [--bins BINS] spec out
ArgumentWhat it doesDefault
specrequiredJSON string or path to JSON distribution spec
outrequiredoutput directory for distribution_preview.json/svg
--samples <value>1000
--seed <value>42
--bins <value>20

Scenario manager#

Promotes loose YAML files into versioned scenarios with stable ids, immutable versions, config hashes and field-level comparison.

CommandPurpose
scenario-initcreate a local Scenario Manager store
scenario-createcreate a managed scenario from a Studio YAML/JSON file
scenario-listlist managed scenarios
scenario-showshow scenario metadata and a saved version
scenario-versionadd a new immutable version from a Studio YAML/JSON file
scenario-duplicateduplicate a managed scenario under a new id
scenario-renamerename a managed scenario
scenario-archivearchive or unarchive a managed scenario
scenario-comparecompare two saved scenario versions

nameframe scenario-init

create a local Scenario Manager store

nameframe scenario-init [-h] root
ArgumentWhat it doesDefault
rootrequired

nameframe scenario-create

create a managed scenario from a Studio YAML/JSON file

nameframe scenario-create [-h] [--id ID] [--name NAME] [--description DESCRIPTION] [--author AUTHOR] [--note NOTE] root src
ArgumentWhat it doesDefault
rootrequired
srcrequired
--id <value>stable scenario id; defaults to preset/name
--name <value>
--description <value>empty
--author <value>empty
--note <value>initial version

nameframe scenario-list

list managed scenarios

nameframe scenario-list [-h] [--all] [--json] root
ArgumentWhat it doesDefault
rootrequired
--allinclude archived scenariosoff
--jsonoff

nameframe scenario-show

show scenario metadata and a saved version

nameframe scenario-show [-h] [--version VERSION] root id
ArgumentWhat it doesDefault
rootrequired
idrequired
--version <value>version id such as v001; defaults to current

nameframe scenario-version

add a new immutable version from a Studio YAML/JSON file

nameframe scenario-version [-h] [--author AUTHOR] [--note NOTE] root id src
ArgumentWhat it doesDefault
rootrequired
idrequired
srcrequired
--author <value>empty
--note <value>empty

nameframe scenario-duplicate

duplicate a managed scenario under a new id

nameframe scenario-duplicate [-h] [--name NAME] [--author AUTHOR] [--note NOTE] root source_id new_id
ArgumentWhat it doesDefault
rootrequired
source_idrequired
new_idrequired
--name <value>
--author <value>empty
--note <value>duplicated scenario

nameframe scenario-rename

rename a managed scenario

nameframe scenario-rename [-h] root id name
ArgumentWhat it doesDefault
rootrequired
idrequired
namerequired

nameframe scenario-archive

archive or unarchive a managed scenario

nameframe scenario-archive [-h] [--unarchive] root id
ArgumentWhat it doesDefault
rootrequired
idrequired
--unarchiveoff

nameframe scenario-compare

compare two saved scenario versions

nameframe scenario-compare [-h] --from FROM_VERSION --to TO_VERSION [--json] root id
ArgumentWhat it doesDefault
rootrequired
idrequired
--from <value>
required
--to <value>
required
--jsonoff

Metadata, analytics and reports#

Metadata v1 sidecars are the queryable record of a run. Build them, index them into local SQLite, then query, compare and report.

CommandPurpose
metadata-buildmaterialize a deterministic Metadata v1 sidecar from a raw dump
metadata-indexidempotently index one or more Metadata v1 sidecars into local SQLite
metadata-index-summaryshow local Metadata v1 index counts
metadata-reportwrite a reproducible run-level KPI report from the local metadata index
metadata-comparecompare stable metrics and frozen configuration for two indexed runs
metadata-queryquery indexed runs with typed Analytics filters
metadata-view-savecreate or update a deterministic saved local Analytics view
metadata-viewslist saved local Analytics views
metadata-view-reportregenerate stable KPI records selected by a saved local view
metadata-link-versionlink an immutable assembled-dataset version to source Metadata v1 frames
metadata-backupbackup local metadata stores without raw blobs or secrets
metadata-restorerestore a metadata backup into a target directory

nameframe metadata-build

materialize a deterministic Metadata v1 sidecar from a raw dump

nameframe metadata-build [-h] [--out OUT] [--dataset-id DATASET_ID] [--dataset-name DATASET_NAME] [--run-id RUN_ID] [--created-at CREATED_AT] [--checksums] dump
ArgumentWhat it doesDefault
dumprequiredNameFrame raw dump directory
--out <value>dataset sidecar root (default: raw dump root)
--dataset-id <value>
--dataset-name <value>
--run-id <value>
--created-at <value>ISO 8601 UTC creation time; otherwise use authoritative capture metadata
--checksumscalculate SHA-256 for every referenced frame artifactoff

nameframe metadata-index

idempotently index one or more Metadata v1 sidecars into local SQLite

nameframe metadata-index [-h] index sidecars [sidecars ...]
ArgumentWhat it doesDefault
indexrequiredSQLite index path
sidecarsrequiredone or more Metadata v1 sidecar roots

nameframe metadata-index-summary

show local Metadata v1 index counts

nameframe metadata-index-summary [-h] [--json] index
ArgumentWhat it doesDefault
indexrequiredSQLite index path
--jsonoff

nameframe metadata-report

write a reproducible run-level KPI report from the local metadata index

nameframe metadata-report [-h] --out OUT [--html-out HTML_OUT] [--run-id RUN_ID] index
ArgumentWhat it doesDefault
indexrequiredSQLite metadata index path
--out <value>
required
output JSON report
--html-out <value>optional deterministic HTML report
--run-id <value>limit to an indexed run; repeatable[]

nameframe metadata-compare

compare stable metrics and frozen configuration for two indexed runs

nameframe metadata-compare [-h] --out OUT [--html-out HTML_OUT] [--representative-limit REPRESENTATIVE_LIMIT] index baseline_run_id candidate_run_id
ArgumentWhat it doesDefault
indexrequiredSQLite metadata index path
baseline_run_idrequired
candidate_run_idrequired
--out <value>
required
output JSON comparison
--html-out <value>optional deterministic HTML comparison
--representative-limit <value>maximum paired sample references per split (default: 12)12

nameframe metadata-query

query indexed runs with typed Analytics filters

nameframe metadata-query [-h] [--out OUT] [--run-id RUN_ID] [--scenario SCENARIO] [--seed SEED] [--map MAP] [--status STATUS] [--class-name CLASS_NAME] [--quality-grade QUALITY_GRADE] [--min-quality-score MIN_QUALITY_SCORE] [--max-quality-score MAX_QUALITY_SCORE] [--split {train,val,test}] index
ArgumentWhat it doesDefault
indexrequiredSQLite metadata index path
--out <value>optional deterministic JSON query output
--run-id <value>match an indexed run ID; repeatable[]
--scenario <value>match a scenario ID; repeatable[]
--seed <value>match a global seed; repeatable[]
--map <value>match a map ID; repeatable[]
--status <value>match a run status; repeatable[]
--class-name <value>require a semantic class name; repeatable[]
--quality-grade <value>match an assembled dataset quality grade; repeatable[]
--min-quality-score <value>
--max-quality-score <value>
--split <value>
choices: train, val, test
require sample membership in a split; repeatable[]

nameframe metadata-view-save

create or update a deterministic saved local Analytics view

nameframe metadata-view-save [-h] [--description DESCRIPTION] [--run-id RUN_ID] [--scenario SCENARIO] [--seed SEED] [--map MAP] [--status STATUS] [--class-name CLASS_NAME] [--quality-grade QUALITY_GRADE] [--min-quality-score MIN_QUALITY_SCORE] [--max-quality-score MAX_QUALITY_SCORE] [--split {train,val,test}] store name
ArgumentWhat it doesDefault
storerequiredlocal JSON view store
namerequiredstable, user-facing view name
--description <value>empty
--run-id <value>match an indexed run ID; repeatable[]
--scenario <value>match a scenario ID; repeatable[]
--seed <value>match a global seed; repeatable[]
--map <value>match a map ID; repeatable[]
--status <value>match a run status; repeatable[]
--class-name <value>require a semantic class name; repeatable[]
--quality-grade <value>match an assembled dataset quality grade; repeatable[]
--min-quality-score <value>
--max-quality-score <value>
--split <value>
choices: train, val, test
require sample membership in a split; repeatable[]

nameframe metadata-views

list saved local Analytics views

nameframe metadata-views [-h] [--json] store
ArgumentWhat it doesDefault
storerequiredlocal JSON view store
--jsonoff

nameframe metadata-view-report

regenerate stable KPI records selected by a saved local view

nameframe metadata-view-report [-h] --out OUT [--html-out HTML_OUT] store view index
ArgumentWhat it doesDefault
storerequiredlocal JSON view store
viewrequiredsaved view ID or name
indexrequiredSQLite metadata index path
--out <value>
required
output JSON report
--html-out <value>optional deterministic HTML report

nameframe metadata-backup

backup local metadata stores without raw blobs or secrets

nameframe metadata-backup [-h] [--root ROOT] --source SOURCE [--max-file-bytes MAX_FILE_BYTES] [--name NAME] out
ArgumentWhat it doesDefault
outrequired
--root <value>.
--source <value>
required
metadata file or directory to include
--max-file-bytes <value>5000000
--name <value>nameframe-metadata

nameframe metadata-restore

restore a metadata backup into a target directory

nameframe metadata-restore [-h] [--overwrite] [--dry-run] archive dst
ArgumentWhat it doesDefault
archiverequired
dstrequired
--overwriteoff
--dry-runoff

Dataset versions, lineage and storage#

Immutable published dataset versions, per-sample lineage, and local content-addressed object storage.

CommandPurpose
dataset-version-publishpublish an immutable dataset version into the control plane
dataset-versionslist dataset versions
lineage-sampleslist sample lineage for a dataset version
object-putstore a file in local content-addressed storage
object-listlist local object-store entries
object-getmaterialize an object by sha256 or URI

nameframe dataset-version-publish

publish an immutable dataset version into the control plane

nameframe dataset-version-publish [-h] [--project-id PROJECT_ID] [--source-job SOURCE_JOB] [--source-scenario SOURCE_SCENARIO] [--created-by CREATED_BY] [--object-store OBJECT_STORE] [--validation VALIDATION] store dataset
ArgumentWhat it doesDefault
storerequiredcontrol-plane JSON path
datasetrequiredassembled dataset root
--project-id <value>empty
--source-job <value>[]
--source-scenario <value>[]
--created-by <value>system
--object-store <value>optional object store root for dataset manifests
--validation <value>optional validation.json to preserve with the immutable version

nameframe dataset-versions

list dataset versions

nameframe dataset-versions [-h] [--dataset-id DATASET_ID] [--json] store
ArgumentWhat it doesDefault
storerequiredcontrol-plane JSON path
--dataset-id <value>
--jsonoff

nameframe lineage-samples

list sample lineage for a dataset version

nameframe lineage-samples [-h] [--limit LIMIT] [--json] store version_id
ArgumentWhat it doesDefault
storerequiredcontrol-plane JSON path
version_idrequired
--limit <value>20
--jsonoff

nameframe object-put

store a file in local content-addressed storage

nameframe object-put [-h] [--namespace NAMESPACE] [--metadata METADATA] store path
ArgumentWhat it doesDefault
storerequiredobject store root
pathrequiredfile to store
--namespace <value>empty
--metadata <value>object metadata key=value; repeatable[]

nameframe object-list

list local object-store entries

nameframe object-list [-h] [--namespace NAMESPACE] [--json] store
ArgumentWhat it doesDefault
storerequiredobject store root
--namespace <value>empty
--jsonoff

nameframe object-get

materialize an object by sha256 or URI

nameframe object-get [-h] store sha256 out
ArgumentWhat it doesDefault
storerequiredobject store root
sha256requiredobject sha256 or nameframe-object URI
outrequiredoutput file

Queue, control plane and workers#

Run long or many jobs without babysitting them: a local persistent queue, a local control plane with job sharding, and machine-local workers.

CommandPurpose
queue-submitappend a command to a local persistent queue
queue-listlist a local persistent queue
queue-runrun queued commands sequentially
control-initcreate a local enterprise control-plane store
control-worker-registerregister or heartbeat a worker
control-job-submitsubmit a command to the control plane
control-shard-submitsplit a large control-plane job into deterministic shards
control-jobslist control-plane jobs
control-auditlist structured control-plane audit events
control-metricssummarise control-plane operational metrics
control-logsread structured control-plane JSONL logs
worker-runrun compatible control-plane jobs on this machine

nameframe queue-submit

append a command to a local persistent queue

nameframe queue-submit [-h] [--name NAME] [--cwd CWD] [--max-retries MAX_RETRIES] queue command [command ...]
ArgumentWhat it doesDefault
queuerequiredqueue JSON path
commandrequiredcommand argv to run; use -- before commands with options
--name <value>empty
--cwd <value>
--max-retries <value>0

nameframe queue-list

list a local persistent queue

nameframe queue-list [-h] [--status STATUS] [--json] queue
ArgumentWhat it doesDefault
queuerequiredqueue JSON path
--status <value>
--jsonoff

nameframe queue-run

run queued commands sequentially

nameframe queue-run [-h] [--limit LIMIT] [--timeout TIMEOUT] [--continue-on-failure] queue
ArgumentWhat it doesDefault
queuerequiredqueue JSON path
--limit <value>
--timeout <value>
--continue-on-failureoff

nameframe control-init

create a local enterprise control-plane store

nameframe control-init [-h] --org ORG --project PROJECT store
ArgumentWhat it doesDefault
storerequiredcontrol-plane JSON path
--org <value>
required
--project <value>
required

nameframe control-worker-register

register or heartbeat a worker

nameframe control-worker-register [-h] [--worker-id WORKER_ID] [--status {online,busy,draining,offline,unhealthy}] [--capability CAPABILITY] store
ArgumentWhat it doesDefault
storerequiredcontrol-plane JSON path
--worker-id <value>
--status <value>
choices: online, busy, draining, offline, unhealthy
online
--capability <value>worker capability key=value; repeatable[]

nameframe control-job-submit

submit a command to the control plane

nameframe control-job-submit [-h] [--project-id PROJECT_ID] [--scenario-id SCENARIO_ID] [--name NAME] [--priority PRIORITY] [--cwd CWD] [--max-retries MAX_RETRIES] [--require REQUIRE] store command [command ...]
ArgumentWhat it doesDefault
storerequiredcontrol-plane JSON path
commandrequiredcommand argv to run; use -- before commands with options
--project-id <value>
--scenario-id <value>
--name <value>empty
--priority <value>0
--cwd <value>
--max-retries <value>0
--require <value>worker requirement key=value; repeatable[]

nameframe control-shard-submit

split a large control-plane job into deterministic shards

nameframe control-shard-submit [-h] [--project-id PROJECT_ID] [--scenario-id SCENARIO_ID] [--name NAME] --samples SAMPLES --shard-size SHARD_SIZE [--seed SEED] [--priority PRIORITY] [--cwd CWD] [--max-retries MAX_RETRIES] [--require REQUIRE] store command [command ...]
ArgumentWhat it doesDefault
storerequiredcontrol-plane JSON path
commandrequiredcommand template; supports {shard_id}, {sample_start}, {sample_end}, {seed_start}, {seed_end}
--project-id <value>
--scenario-id <value>
--name <value>empty
--samples <value>
required
--shard-size <value>
required
--seed <value>0
--priority <value>0
--cwd <value>
--max-retries <value>0
--require <value>worker requirement key=value; repeatable[]

nameframe control-jobs

list control-plane jobs

nameframe control-jobs [-h] [--status STATUS] [--json] store
ArgumentWhat it doesDefault
storerequiredcontrol-plane JSON path
--status <value>
--jsonoff

nameframe control-audit

list structured control-plane audit events

nameframe control-audit [-h] [--event EVENT] [--object-kind OBJECT_KIND] [--object-id OBJECT_ID] [--json] store
ArgumentWhat it doesDefault
storerequiredcontrol-plane JSON path
--event <value>
--object-kind <value>
--object-id <value>
--jsonoff

nameframe control-metrics

summarise control-plane operational metrics

nameframe control-metrics [-h] [--json] store
ArgumentWhat it doesDefault
storerequiredcontrol-plane JSON path
--jsonoff

nameframe control-logs

read structured control-plane JSONL logs

nameframe control-logs [-h] [--limit LIMIT] [--json] store
ArgumentWhat it doesDefault
storerequiredcontrol-plane JSON path
--limit <value>
--jsonoff

nameframe worker-run

run compatible control-plane jobs on this machine

nameframe worker-run [-h] [--worker-id WORKER_ID] [--capability CAPABILITY] [--limit LIMIT] [--timeout TIMEOUT] store
ArgumentWhat it doesDefault
storerequiredcontrol-plane JSON path
--worker-id <value>
--capability <value>worker capability key=value; repeatable[]
--limit <value>
--timeout <value>

AI assistants (MCP) and API#

Serve NameFrame to an AI client over MCP, or serve API v1 for the Python SDK and Studio Results.

CommandPurpose
api-serveserve API v1 discovery endpoints on localhost
mcp-serveserve NameFrame MCP over STDIO or authenticated HTTP
mcp-doctordiagnose MCP and NameFrame connectivity read-only
mcp-approval-listlist sanitized durable MCP generation approvals
mcp-approval-decideapprove or deny one durable MCP generation request

nameframe api-serve

serve API v1 discovery endpoints on localhost

nameframe api-serve [-h] [--host HOST] [--port PORT] [--scene-manifest SCENE_MANIFEST] [--remote-url REMOTE_URL] [--timeout TIMEOUT] [--studio-dir STUDIO_DIR] [--metadata-index METADATA_INDEX] [--metadata-view-store METADATA_VIEW_STORE] [--analytics-output-dir ANALYTICS_OUTPUT_DIR] [--task-store TASK_STORE] [--task-output-root TASK_OUTPUT_ROOT] [--max-active-tasks MAX_ACTIVE_TASKS]
ArgumentWhat it doesDefault
--host <value>127.0.0.1
--port <value>8010
--scene-manifest <value>serve this saved SceneManifest v1 instead of querying Unreal
--remote-url <value>Unreal Remote Control URL used when --scene-manifest is absenthttp://127.0.0.1:30010
--timeout <value>30.0
--studio-dir <value>serve a static external studio UI at /studio/
--metadata-index <value>enable Studio Results with this local Metadata v1 SQLite index
--metadata-view-store <value>saved-view JSON path (default: nameframe_views.json beside index)
--analytics-output-dir <value>report output directory (default: nameframe_reports beside index)
--task-store <value>durable JSON task store path_local/nameframe_tasks.json
--task-output-root <value>allowed generation output root; repeat to add roots['_local']
--max-active-tasks <value>bounded concurrent API tasks (1..16)2

nameframe mcp-serve

serve NameFrame MCP over STDIO or authenticated HTTP

nameframe mcp-serve [-h] [--transport {stdio,streamable-http}] [--api-url API_URL] [--timeout TIMEOUT] [--scope SCOPE] [--disable-writes] [--actor ACTOR] [--output-root OUTPUT_ROOT] [--structured-log STRUCTURED_LOG] [--structured-log-max-bytes STRUCTURED_LOG_MAX_BYTES] [--approval-store APPROVAL_STORE] [--host HOST] [--port PORT] [--path PATH] [--control-store CONTROL_STORE] [--project-id PROJECT_ID] [--issuer-url ISSUER_URL] [--resource-server-url RESOURCE_SERVER_URL] [--max-generation-tasks-per-day MAX_GENERATION_TASKS_PER_DAY] [--max-requests-per-minute MAX_REQUESTS_PER_MINUTE] [--token-verifier {control-store,oauth-introspection}] [--oauth-introspection-url OAUTH_INTROSPECTION_URL] [--oauth-client-id OAUTH_CLIENT_ID] [--oauth-timeout OAUTH_TIMEOUT]
ArgumentWhat it doesDefault
--transport <value>
choices: stdio, streamable-http
MCP transport (HTTP requires a control-plane project and bearer token)stdio
--api-url <value>local NameFrame API base URLhttp://127.0.0.1:8010
--timeout <value>NameFrame API read timeout in seconds5.0
--scope <value>grant an MCP scope; repeat for each explicit write scope[]
--disable-writesforce the server to safe read-only scopes, ignoring write grantsoff
--actor <value>bounded actor identity recorded in the MCP auditlocal-stdio
--output-root <value>allowed generation output root; repeat to grant more roots[]
--structured-log <value>optional bounded JSONL request log pathempty
--structured-log-max-bytes <value>maximum JSONL bytes before file events are dropped5000000
--approval-store <value>optional absolute durable operator-approval JSON storeempty
--host <value>HTTP bind host; loopback by default127.0.0.1
--port <value>HTTP bind port8020
--path <value>Streamable HTTP endpoint path/mcp
--control-store <value>control-plane JSON store containing projects, users, and token hashes_local/control.json
--project-id <value>project isolated by this HTTP serverempty
--issuer-url <value>HTTPS authorization issuer URL (loopback HTTP allowed for development)empty
--resource-server-url <value>canonical HTTPS URL of this MCP resource serverempty
--max-generation-tasks-per-day <value>per-project daily accepted generation-request quota100
--max-requests-per-minute <value>per-authenticated-client tool-call limit in a 60-second window600
--token-verifier <value>
choices: control-store, oauth-introspection
bearer-token verifier; local control store or RFC 7662 introspectioncontrol-store
--oauth-introspection-url <value>RFC 7662 token introspection endpointempty
--oauth-client-id <value>confidential resource-server client IDempty
--oauth-timeout <value>OAuth introspection timeout in seconds5.0

nameframe mcp-doctor

diagnose MCP and NameFrame connectivity read-only

nameframe mcp-doctor [-h] [--transport {stdio,streamable-http}] [--api-url API_URL] [--timeout TIMEOUT] [--scope SCOPE] [--actor ACTOR] [--output-root OUTPUT_ROOT] [--host HOST] [--port PORT] [--path PATH] [--control-store CONTROL_STORE] [--project-id PROJECT_ID] [--issuer-url ISSUER_URL] [--resource-server-url RESOURCE_SERVER_URL] [--max-generation-tasks-per-day MAX_GENERATION_TASKS_PER_DAY] [--token-verifier {control-store,oauth-introspection}] [--oauth-introspection-url OAUTH_INTROSPECTION_URL] [--oauth-client-id OAUTH_CLIENT_ID] [--oauth-timeout OAUTH_TIMEOUT] [--json]
ArgumentWhat it doesDefault
--transport <value>
choices: stdio, streamable-http
stdio
--api-url <value>http://127.0.0.1:8010
--timeout <value>5.0
--scope <value>[]
--actor <value>local-stdio
--output-root <value>[]
--host <value>127.0.0.1
--port <value>8020
--path <value>/mcp
--control-store <value>_local/control.json
--project-id <value>empty
--issuer-url <value>empty
--resource-server-url <value>empty
--max-generation-tasks-per-day <value>100
--token-verifier <value>
choices: control-store, oauth-introspection
control-store
--oauth-introspection-url <value>empty
--oauth-client-id <value>empty
--oauth-timeout <value>5.0
--jsonemit the bounded JSON reportoff

nameframe mcp-approval-list

list sanitized durable MCP generation approvals

nameframe mcp-approval-list [-h] [--status {pending,approved,denied,consumed}] [--limit LIMIT] store
ArgumentWhat it doesDefault
storerequiredapproval JSON store
--status <value>
choices: pending, approved, denied, consumed
empty
--limit <value>50

nameframe mcp-approval-decide

approve or deny one durable MCP generation request

nameframe mcp-approval-decide [-h] --decision {approved,denied} [--actor ACTOR] store approval_id
ArgumentWhat it doesDefault
storerequiredapproval JSON store
approval_idrequired
--decision <value>
choices: approved, denied
required
--actor <value>unreal-studio

Experiments and model feedback#

Close the loop between a trained model and the next dataset: measure coverage, compare synthetic against real, mine failures, and plan hard cases.

CommandPurpose
experiment-createcreate a local experiment record
experiment-add-variantadd a variant dataset to an experiment
experimentslist local experiments
paired-planbuild a paired generation freeze/vary plan
coverage-evalevaluate a required coverage matrix
goal-planplan sampling weights from target distributions
adaptive-updatebounded adaptive sampling probability update
real-dataset-importprofile/import a real YOLO dataset
dataset-profilewrite a dataset statistics profile
compare-profilescompare real and synthetic dataset profiles
domain-gapwrite domain-gap findings and recommendations
model-evalevaluate model metrics by scenario slice
failure-minemine underperforming evaluation slices
hard-casesplan generation for mined failure slices
regression-campaigncombine evaluations into pass/fail campaign

nameframe experiment-create

create a local experiment record

nameframe experiment-create [-h] --name NAME --hypothesis HYPOTHESIS [--baseline-dataset BASELINE_DATASET] [--controlled-variable CONTROLLED_VARIABLE] [--notes NOTES] store
ArgumentWhat it doesDefault
storerequiredexperiment store JSON path
--name <value>
required
--hypothesis <value>
required
--baseline-dataset <value>empty
--controlled-variable <value>[]
--notes <value>empty

nameframe experiment-add-variant

add a variant dataset to an experiment

nameframe experiment-add-variant [-h] --label LABEL --dataset-version-id DATASET_VERSION_ID [--variable VARIABLE] [--metric METRIC] store experiment_id
ArgumentWhat it doesDefault
storerequiredexperiment store JSON path
experiment_idrequired
--label <value>
required
--dataset-version-id <value>
required
--variable <value>[]
--metric <value>[]

nameframe experiments

list local experiments

nameframe experiments [-h] [--json] store
ArgumentWhat it doesDefault
storerequiredexperiment store JSON path
--jsonoff

nameframe paired-plan

build a paired generation freeze/vary plan

nameframe paired-plan [-h] [--name NAME] [--locked LOCKED] --vary VARY base out
ArgumentWhat it doesDefault
baserequiredbase scenario/config JSON
outrequiredpaired plan JSON output
--name <value>paired_plan
--locked <value>locked config path; repeatable[]
--vary <value>
required
variable path=value,value; repeatable

nameframe coverage-eval

evaluate a required coverage matrix

nameframe coverage-eval [-h] --axis AXIS [--observation OBSERVATION] [--target TARGET] out
ArgumentWhat it doesDefault
outrequiredcoverage matrix JSON output
--axis <value>
required
axis=value,value; repeatable
--observation <value>observation as axis=value,axis=value; repeatable[]
--target <value>target observations per cell1

nameframe goal-plan

plan sampling weights from target distributions

nameframe goal-plan [-h] --target TARGET [--current CURRENT] [--candidate CANDIDATE] out
ArgumentWhat it doesDefault
outrequired
--target <value>
required
target key=value; repeatable
--current <value>current count key=value; repeatable[]
--candidate <value>candidate:key=value,value; repeatable[]

nameframe adaptive-update

bounded adaptive sampling probability update

nameframe adaptive-update [-h] --current-weights CURRENT_WEIGHTS --target TARGET --observed OBSERVED [--learning-rate LEARNING_RATE] [--max-delta MAX_DELTA] out
ArgumentWhat it doesDefault
outrequired
--current-weights <value>
required
--target <value>
required
--observed <value>
required
--learning-rate <value>0.5
--max-delta <value>0.2

nameframe real-dataset-import

profile/import a real YOLO dataset

nameframe real-dataset-import [-h] [--format FORMAT] [--copy-files] src out
ArgumentWhat it doesDefault
srcrequired
outrequired
--format <value>yolo
--copy-filesoff

nameframe dataset-profile

write a dataset statistics profile

nameframe dataset-profile [-h] [--kind {synthetic,real}] dataset out
ArgumentWhat it doesDefault
datasetrequired
outrequired
--kind <value>
choices: synthetic, real
synthetic

nameframe compare-profiles

compare real and synthetic dataset profiles

nameframe compare-profiles [-h] real_profile synthetic_profile out
ArgumentWhat it doesDefault
real_profilerequired
synthetic_profilerequired
outrequired

nameframe domain-gap

write domain-gap findings and recommendations

nameframe domain-gap [-h] [--threshold THRESHOLD] comparison out
ArgumentWhat it doesDefault
comparisonrequired
outrequired
--threshold <value>0.1

nameframe model-eval

evaluate model metrics by scenario slice

nameframe model-eval [-h] [--metric METRIC] [--pass-threshold PASS_THRESHOLD] [--slice-key SLICE_KEY] results out
ArgumentWhat it doesDefault
resultsrequiredJSON list or {'results': [...]} file
outrequired
--metric <value>map50
--pass-threshold <value>0.5
--slice-key <value>['distance', 'weather', 'object_size', 'occlusion']

nameframe failure-mine

mine underperforming evaluation slices

nameframe failure-mine [-h] [--max-slices MAX_SLICES] evaluation out
ArgumentWhat it doesDefault
evaluationrequired
outrequired
--max-slices <value>10

nameframe hard-cases

plan generation for mined failure slices

nameframe hard-cases [-h] [--samples-per-slice SAMPLES_PER_SLICE] failures out
ArgumentWhat it doesDefault
failuresrequired
outrequired
--samples-per-slice <value>1000

nameframe regression-campaign

combine evaluations into pass/fail campaign

nameframe regression-campaign [-h] --name NAME --evaluation EVALUATION [--required-pass-rate REQUIRED_PASS_RATE] out
ArgumentWhat it doesDefault
outrequired
--name <value>
required
--evaluation <value>
required
--required-pass-rate <value>1.0

Access, packaging and release#

Local users, tokens and RBAC, plus the bundles you hand to somebody else.

CommandPurpose
auth-user-createcreate or update a local control-plane user
auth-token-createcreate a one-time visible local API token
auth-checkcheck a local RBAC permission
auth-roleslist local RBAC roles and permissions
extension-listlist registered extension SDK providers
extension-exportrun an extension exporter
package-onprembuild a sanitized on-prem source bundle
support-bundlebuild a clean pilot/support diagnostics bundle
release-readinessaudit release gates against repo evidence and manual blockers
hardening-smokeoffline reproducibility/corruption smoke over demo data

nameframe auth-user-create

create or update a local control-plane user

nameframe auth-user-create [-h] --email EMAIL --role {org_admin,project_admin,simulation_engineer,dataset_engineer,ml_engineer,viewer} [--name NAME] [--project-id PROJECT_ID] [--actor ACTOR] store
ArgumentWhat it doesDefault
storerequiredcontrol-plane JSON path
--email <value>
required
--role <value>
choices: org_admin, project_admin, simulation_engineer, dataset_engineer, ml_engineer, viewer
required
--name <value>empty
--project-id <value>empty
--actor <value>system

nameframe auth-token-create

create a one-time visible local API token

nameframe auth-token-create [-h] --user-id USER_ID [--actor ACTOR] store
ArgumentWhat it doesDefault
storerequiredcontrol-plane JSON path
--user-id <value>
required
--actor <value>system

nameframe auth-check

check a local RBAC permission

nameframe auth-check [-h] [--user-id USER_ID] [--token TOKEN] --permission PERMISSION [--project-id PROJECT_ID] [--json] store
ArgumentWhat it doesDefault
storerequiredcontrol-plane JSON path
--user-id <value>
--token <value>
--permission <value>
required
--project-id <value>empty
--jsonoff

nameframe auth-roles

list local RBAC roles and permissions

nameframe auth-roles [-h] [--json]
ArgumentWhat it doesDefault
--jsonoff

nameframe extension-list

list registered extension SDK providers

nameframe extension-list [-h] [--json]
ArgumentWhat it doesDefault
--jsonoff

nameframe extension-export

run an extension exporter

nameframe extension-export [-h] extension_id dataset out
ArgumentWhat it doesDefault
extension_idrequired
datasetrequired
outrequired

nameframe package-onprem

build a sanitized on-prem source bundle

nameframe package-onprem [-h] [--repo-root REPO_ROOT] [--name NAME] out
ArgumentWhat it doesDefault
outrequired
--repo-root <value>.
--name <value>nameframe-onprem

nameframe support-bundle

build a clean pilot/support diagnostics bundle

nameframe support-bundle [-h] [--repo-root REPO_ROOT] [--include INCLUDE] [--max-file-bytes MAX_FILE_BYTES] [--name NAME] [--mcp] [--mcp-api-url MCP_API_URL] [--mcp-timeout MCP_TIMEOUT] [--mcp-output-root MCP_OUTPUT_ROOT] out
ArgumentWhat it doesDefault
outrequired
--repo-root <value>.
--include <value>extra artifact file to include when safe, e.g. report.json[]
--max-file-bytes <value>skip files larger than this and record only hash/metadata1000000
--name <value>nameframe-support
--mcpinclude a sanitized read-only MCP diagnostic snapshotoff
--mcp-api-url <value>http://127.0.0.1:8010
--mcp-timeout <value>5.0
--mcp-output-root <value>[]

nameframe release-readiness

audit release gates against repo evidence and manual blockers

nameframe release-readiness [-h] [--repo-root REPO_ROOT] [--gate-file GATE_FILE] [--fail-on-not-ready] out
ArgumentWhat it doesDefault
outrequiredoutput directory for release_readiness.json/md
--repo-root <value>.
--gate-file <value>release gates markdown path relative to repo root
--fail-on-not-readyexit non-zero if any gate has manual or missing evidenceoff

nameframe hardening-smoke

offline reproducibility/corruption smoke over demo data

nameframe hardening-smoke [-h] [--out-root OUT_ROOT] [--frames FRAMES] [--seed SEED] [--avatars AVATARS] [--fail-under FAIL_UNDER]
ArgumentWhat it doesDefault
--out-root <value>directory for demo dumps, pipeline outputs, and summary JSON_local/hardening_smoke
--frames <value>8
--seed <value>42
--avatars <value>6
--fail-under <value>fail if final dataset quality score is below this90.0

Other commands#

Commands that do not fit the groups above.

nameframe metadata-coverage

compare measured distributions with explicit target bins and categories

nameframe metadata-coverage [-h] --out OUT [--run-id RUN_ID] index targets
ArgumentWhat it doesDefault
indexrequiredSQLite metadata index path
targetsrequiredYAML or JSON target-distribution specification
--out <value>
required
output JSON coverage report
--run-id <value>limit to an indexed run; repeatable[]

nameframe performance-benchmark-evidence

bind a complete measured matrix to source/binary hashes

nameframe performance-benchmark-evidence [-h] --engine-version ENGINE_VERSION --project PROJECT --runtime-source RUNTIME_SOURCE --runtime-binary RUNTIME_BINARY --editor-binary EDITOR_BINARY [--cpu CPU] [--gpu GPU] report out
ArgumentWhat it doesDefault
reportrequiredmeasured benchmark_report.json
outrequiredsource-controlled evidence JSON path
--engine-version <value>
required
--project <value>
required
--runtime-source <value>
required
--runtime-binary <value>
required
--editor-binary <value>
required
--cpu <value>not_recorded
--gpu <value>not_recorded

nameframe performance-benchmark-plan

write equivalent target-count and Actor/ISM/HISM Studio recipes

nameframe performance-benchmark-plan [-h] [--target-count TARGET_COUNT] [--representation {actor,ism,hism}] base out
ArgumentWhat it doesDefault
baserequiredbase Studio YAML with an asset-backed spawn zone
outrequiredbenchmark recipe/output directory
--target-count <value>
--representation <value>
choices: actor, ism, hism

nameframe performance-benchmark-report

aggregate measured capture dumps into JSON/CSV/SVG evidence

nameframe performance-benchmark-report [-h] plan out
ArgumentWhat it doesDefault
planrequiredbenchmark_plan.json
outrequiredreport output directory

nameframe pilot-evidence-init

create an incomplete clean-machine/external-pilot evidence form

nameframe pilot-evidence-init [-h] --session-id SESSION_ID [--role ROLE] [--overwrite] out
ArgumentWhat it doesDefault
outrequired
--session-id <value>
required
--role <value>empty
--overwriteoff

nameframe pilot-evidence-report

validate a pilot session and write JSON/Markdown evidence reports

nameframe pilot-evidence-report [-h] [--require-external-pass] session out
ArgumentWhat it doesDefault
sessionrequired
outrequired
--require-external-passoff

nameframe placement-capacity

estimate constrained spawn capacity before Unreal generation

nameframe placement-capacity [-h] --out OUT scenario
ArgumentWhat it doesDefault
scenariorequiredStudio YAML or JSON scenario
--out <value>
required
output JSON feasibility report

nameframe qa-acceptance-report

validate and report the complete T01-T43 QA inventory

nameframe qa-acceptance-report [-h] [--evidence EVIDENCE] matrix out
ArgumentWhat it doesDefault
matrixrequirednameframe.qa-acceptance/v1 YAML
outrequiredJSON/Markdown report directory
--evidence <value>optional JSON object keyed by T01..T43

nameframe scenario-compile

compile ScenarioConfig + SceneManifest to a capture job with parity evidence

nameframe scenario-compile [-h] --output-root OUTPUT_ROOT [--result RESULT] [--job-id JOB_ID] [--target-samples TARGET_SAMPLES] [--width WIDTH] [--height HEIGHT] scenario scene out
ArgumentWhat it doesDefault
scenariorequiredScenarioConfig v1 JSON
scenerequiredSceneManifest v1 JSON
outrequiredcompiled CaptureJob JSON
--output-root <value>
required
execution root used to derive the raw capture destination
--result <value>compilation evidence JSON (default beside CaptureJob)
--job-id <value>
--target-samples <value>
--width <value>320
--height <value>240

nameframe spawner-visual-edit

apply one structured Advanced Spawner edit without losing YAML-only fields

nameframe spawner-visual-edit [-h] [--model-out MODEL_OUT] request out
ArgumentWhat it doesDefault
requestrequiredJSON request containing population_yaml and edit
outrequiredupdated population YAML fragment
--model-out <value>optional updated visual model JSON

nameframe spawner-visual-model

build the Advanced Spawner visual model from a population YAML fragment

nameframe spawner-visual-model [-h] [--out OUT] fragment
ArgumentWhat it doesDefault
fragmentrequired
--out <value>optional JSON model output path