AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
The cdf-augmentation skill provides a structured workflow for managing remote-API pipelines within the Cosmos Data Factory ecosystem. It enables users to author and validate YAML configurations for tasks including Cosmos Transfer, Cosmos Predict, image editing, and image-to-video inference. The skill handles the entire lifecycle of an augmentation task, from verifying container environments and endpoint connectivity to executing inference loops and applying quality gates via external evaluators.
What it does
- Author and validate PipelineConfig YAML files for various augmentation tasks.
- Manage remote inference pipelines for video transfer, prediction, and image editing.
- Verify container runtime environments and Git commit integrity before execution.
- Configure and execute captioning strategies using VLM and LLM endpoints.
- Implement quality gates and evaluation loops with external Cosmos evaluators.
- Handle precomputed WSM controls for advanced video generation workflows.
When to use it
- When you need to perform scene attribute changes on video using Cosmos Transfer.
- When generating or extending video content via Cosmos Predict.
- When editing specific attributes of an image or animating a frame into video.
- When you need to validate a pipeline configuration against schema requirements.
- When integrating external Cosmos evaluation into a media generation workflow.
Advantages
- Provides a standardized, repeatable workflow for complex media augmentation tasks.
- Ensures configuration consistency through mandatory validation steps.
- Supports flexible, remote-API based model execution without local weight dependencies.
- Includes built-in quality control via configurable evaluation gates.
- Enforces strict environment verification to ensure reproducible results.
Usage examples
- “I need to change the weather in this video to rainy. How do I start?”
- The agent will guide you through selecting the appropriate Cosmos Transfer config, verifying your input video, and setting up the required VLM/LLM endpoints for captioning.
- “Validate my config_video_transfer_CT3_omni.yaml file.”
- The agent will launch the container, run the validation command against the specified YAML, and report any schema or configuration errors.
- “Run an image-to-video generation using my image at s3://my-bucket/frame.png.”
- The agent will verify the environment, check the provided S3 URI, and execute the inference pipeline using the configured Cosmos3 image-to-video model.
Install
Download the skill as a ZIP:
https://autogineer.com/agent-skills/nvidia/cdf-augmentation/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip cdf-augmentation.zip -d .agents/skills
Documentation by NVIDIA
CDF Augmentation Pipeline Skill
Remote-API pipeline for captioning, generating, and evaluating augmented camera data. Models are configured as HTTP endpoints; no local model weights are included.
Purpose
Use it to select a supported generation mode, author and validate
PipelineConfig YAML, configure captioning/evaluators, and run the
cdf-augmentation:1.2.0 container. It covers Cosmos Transfer/Predict,
Cosmos3 WSM controls, image editing, image-to-video, BYOM endpoints, and
quality gates.
Do not use this skill for training or fine-tuning models, deploying clusters or NIM endpoints, or unrelated application/database development.
Prerequisites
| Requirement | Detail |
|---|---|
| Docker | docker --version. The image is remote-API only — it bundles no Cosmos/torch weights, so plain remote inference needs no GPU and no HF_TOKEN. |
| NVIDIA GPU (conditional) | Only when a configured local stage requires CUDA or decodes H.264 in the augmentation container. See Limitations. |
| Endpoint URLs | One reachable URL per role used by the selected config. The examples name local Qwen services (Qwen/Qwen3.6-27B-FP8 on vlm, Qwen/Qwen2.5-14B-Instruct on llm), but those are not guaranteed to be running. Resolve every required role independently: keep each reachable configured endpoint and ask only for the missing role URLs. |
| API keys (conditional) | Only for endpoints requiring authentication. Pass the environment variable named by each endpoint's api_key_env; never hardcode values in YAML. Local unauthenticated endpoints need none. |
| Input media | A video/image reachable by multistorageclient (s3://, msc://, gs://, az://, or HTTPS). Local paths are allowed only when no external Cosmos evaluator is enabled; external evaluation requires checker-readable remote URIs. |
| Approved release commit (execution only) | A 40-character commit hash confirmed by the user as release-owner-approved or retrieved from the verified release manifest. Never invent it or rely on an unverified environment value. |
Inputs
Resolve each value in this precedence order: state file → explicit prompt arguments → agent context → user prompt. Ask the user only for what remains unresolved.
| Input | Required | Description |
|---|---|---|
config_path | Yes | Path to the pipeline YAML, e.g. configs/cookbook/video-data-augmentation/config_video_transfer_CT3_omni.yaml. If absent, pick a starting config from Supported Models and confirm with the user. |
input_media | Conditional | Source video/image → data[].inputs.rgb. Required for every mode except Cosmos Predict inference_type: text2world, where inputs may be null or rgb omitted. Overridable at run time via data.0.inputs.rgb=.... |
control_media | For precomputed control | Control video → data[].inputs.controls.<type>. For Cosmos3 WSM transfer, set controls.wsm; the client uploads it rather than exposing its local path to the server. |
output_paths | Yes | data[].output.{video,caption,metadata}; evaluation optional. |
model_name | Yes | augmentation.model.name — an endpoint id, a role, or a known model name. Free-form string, not an enum. |
endpoint_urls | Yes | One endpoints[] entry per role in use. |
api_key_env | If auth | Env-var name per endpoint; the value comes from the environment. |
target_attributes | No | captioning.llm.variables (e.g. weather_condition, lighting_condition). |
generation_params | No | augmentation.parameters — pass-through; only set knobs are sent. |
seed | No | Under augmentation.parameters. Before the first candidate, null resolves once to the generator/executor seed when available, otherwise the current Unix time. Retry n uses that resolved base seed plus n. pipeline.retry defaults to 1, so evaluation permits at most 2 candidates by default. |
BYOM model: endpoints, adapters, roles
Each endpoints: list entry declares role, url, wire model, and optional
id, adapter, api_key_env, and timeout. Roles are vlm, llm,
image_edit, video_transfer, video_predict, image2video, and evaluator.
augmentation.model.name resolves by endpoint id, then role, then the known
model-name mapping. Adapter contracts and full fields are in
configuration-schema.md.
Supported Models
When the user hasn't specified a model, choose from their input type and goal:
| Input Type → Goal | model.name | Role / default adapter | Input → Output |
|---|---|---|---|
| Video — change scene attributes (weather, lighting, style) | cosmos-transfer2.5 | video_transfer / nim | Video (+ controls) → Video |
| Video + precomputed WSM — follow world-state geometry/motion | A video_transfer endpoint id, e.g. cosmos3-transfer-wsm | video_transfer / openai.video.async | RGB video + WSM control + prompt → Video |
| Video + text — extend or predict continuation | cosmos-predict | video_predict / nim | Video+Text → Video |
| Text only — generate video from scratch | cosmos-predict (inference_type: text2world) | video_predict / nim | Text → Video |
| Image — edit specific attributes | image-edit | image_edit / nim (or openai.chat.completions, openai.images.edits) | Image → Image |
| Image — animate a first frame | cosmos3-image2video (or your Veo endpoint id) | image2video / openai.video.sync (Veo: openai.video.async) | Image + prompt → Video |
Key rule: use Cosmos Transfer for video scene changes, Cosmos Predict for
new/continued video, image edit for still edits, and image-to-video to animate a
frame. For Cosmos3 WSM, set data[].inputs.controls.wsm. Config selection
details are in config-decision-tree.md.
All models run via remote HTTP through one BaseExecutor; there is no local torchrun and no executor_type field.
Canonical Workflow
Follow this ordered decision tree; open the linked references only for the selected mode's details.
Config Correction Budget
config_attempts counts YAML versions, not validation or preflight calls. Keep
it across the whole workflow and never reset it.
Set it to
1after initial authoring.On a correctable error, if it is already
3, STOP and report the error. Otherwise increment it once and make one correction pass containing all currently reported YAML fixes.Validate and preflight that edited version without another increment. Repeat rule 2 only if a later check finds another correctable YAML error.
STEP 0 — Mandatory Entry Gate
Execute this gate before every other step:
Scope gate: if the request asks for training, fine-tuning, cluster/NIM deployment, or unrelated development, decline it and STOP.
Input gate: resolve values using Inputs. If required values remain unresolved, request only those values and STOP until they are supplied.
Proceed only when both gates pass and the input type and augmentation goal are known.
Select the model from Supported Models using that input type and goal.
Author the YAML in this order:
data,endpoints,captioning,augmentation,evaluators,pipeline, thendata_processing. Omit optional sections rather than creating placeholders. Setconfig_attempts = 1(config attempt 1 of 3).Branch on the requested outcome:
Configuration only or “do not execute”: do not build, launch, run preflight, or infer. A trusted runtime is an already-running container whose recorded immutable image ID/digest, checkout commit, and config mounts satisfy step 4. If validation was explicitly requested and such a runtime exists, run only the validation command and apply step 5's failure rules. Return the config (mark it unvalidated if validation was not run) and STOP.
Inference/run requested: proceed to step 4.
Prepare the runtime in these verifiable sub-steps: a. Obtain
EXPECTED_RELEASE_REFfrom the user as a release-owner-approved full commit or retrieve it from the verified release manifest. b. Verify the Git working tree is clean. c. VerifyHEADmatchesEXPECTED_RELEASE_REF. If a release tag selected the revision, verify the tag first, then compare its resolved full commit. d. Build the image and capture its immutablesha256:image ID, or obtain a verified registry digest. e. Create thecdfDocker bridge if needed and attach local services. f. Launch the container using the recorded image ID, thecdfnetwork, required volume mounts,--entrypoint /bin/bash, and only the endpoint key variables named byapi_key_envplus the scoped storage credential variables required for the configured remote media. If any sub-step fails, STOP and report the exact failure and relevant remediation: clean a dirty tree, supply the approved revision, resolve a revision mismatch, check the Docker daemon/build, fix network setup, or fix the container launch. Do not continue with a partial runtime.Inside the container, run the validation-only command in Usage Step 2 and classify its result while preserving
config_attempts(current config attempt N of 3):Success: if no external Cosmos evaluator is enabled, proceed directly to step 7. If one is enabled, proceed to step 6.
Editable YAML/schema error: when required endpoint URL/model details are known, apply the Config Correction Budget rule, then rerun validation on that YAML version.
Infrastructure/unknown input: for missing endpoint details, credentials, DNS, connectivity, or unhealthy services, do not edit speculatively. STOP and report the error or ask for the missing endpoint details.
With external Cosmos evaluation enabled, preserve
config_attempts(current config attempt N of 3) and run its hard preflight gate before captioning/generation by querying/health,/checkers, and/dependency-graph:Pass: require
/health.status == "healthy"; require every configuredchecks[].nameto exactly equal one string in the top-levelcheckersarray returned by/checkersand one key in the top-levelcheckersobject returned by/dependency-graph. Do not use substring, alias, or nested-field matching. Then proceed to step 7.Config error: only a 4xx response from
/checkersor/dependency-graphwhose body explicitly identifies a configured checker name or invalid config field qualifies. Apply the Config Correction Budget rule, then return to step 5; revalidation does not increment the counter.Infrastructure failure: any timeout, network/DNS error, 5xx response,
/healthfailure, unhealthy service, or missing deployed checker stops the workflow before generation. Create no candidate and report the root cause.
Enter inference only after step 5 succeeds and, when external evaluation is enabled, step 6 passes. Run a candidate loop bounded to
pipeline.retry + 1candidates (retrydefaults to1, so the default maximum is 2). Resolve the base seed once before the first candidate as defined in Inputs; retrynusesbase_seed + n:Generate a candidate and run its configured evaluators.
On pass, accept it and exit the loop.
On quality failure with attempts remaining, set the next seed to
base_seed + next_retry_number. Ifregenerate_caption_on_retry: true, regenerate the caption next; then generate the replacement. If false, generate the replacement immediately.On exhausted quality retries, fail evaluation and exit the loop.
On a service/contract failure, stop on the current candidate without generating another. For external Cosmos evaluation, this means a submission, polling, or discovery failure; a failed execution; a missing or skipped result; or an invalid gating contract without a literal top-level boolean
passed. Withpipeline.evaluation.strict: true(the default), applyretain_failures: its defaulttrueretains video, caption, metadata, and evaluation outputs for inspection; explicitfalsedeletes them. Withstrict: false, retain the files and report the evaluator failure without failing the sample.If provider metadata contains
error_code: ambiguous_post, preserve the retained candidate, do not resubmit automatically, STOP, and defer to operator recovery. Follow the ambiguous-POST recovery flow.
Usage
Step 1: Verify, Build, and Launch the Docker Container
Set EXPECTED_RELEASE_REF to a release-owner-reviewed full 40-character commit,
never a tag or branch. If a signed release tag selects the revision, verify the
tag first and record its resolved full commit as EXPECTED_RELEASE_REF. Build
only from a clean matching checkout, then record the resulting immutable image
ID. For a prebuilt release, use its verified digest.
set -e
EXPECTED_RELEASE_REF="${EXPECTED_RELEASE_REF:?set a reviewed full commit ID}"
test "${#EXPECTED_RELEASE_REF}" -eq 40
case "$EXPECTED_RELEASE_REF" in *[!0-9a-fA-F]*) exit 1 ;; esac
test -z "$(git status --porcelain)"
test "$(git rev-parse HEAD)" = "$(git rev-parse "${EXPECTED_RELEASE_REF}^{commit}")"
DOCKER_BUILDKIT=0 docker build \
-t cdf-augmentation:1.2.0 \
-f docker/Dockerfile .
CDF_IMAGE_ID="$(docker image inspect --format '{{.Id}}' cdf-augmentation:1.2.0)"
case "$CDF_IMAGE_ID" in sha256:*) ;; *) exit 1 ;; esac
test "$(docker image inspect --format '{{.Id}}' cdf-augmentation:1.2.0)" = "$CDF_IMAGE_ID"
docker network inspect cdf >/dev/null 2>&1 || \
docker network create cdf
# Attach each local model container once, for example:
# docker network connect cdf vlm
# Example only: replace these with exactly the api_key_env names declared by
# the selected config; use an empty array when every endpoint is unauthenticated.
CDF_ENDPOINT_KEY_ARGS=()
# Authenticated example:
# CDF_ENDPOINT_KEY_ARGS=(-e VLM_API_KEY -e LLM_API_KEY -e VEO_API_KEY)
# Forward only credential names required by the configured remote media. Give
# checker containers their own scoped credentials in their deployment.
CDF_STORAGE_CREDENTIAL_ARGS=()
# S3-compatible example (include only the names your storage config requires):
# CDF_STORAGE_CREDENTIAL_ARGS=(-e AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY \
# -e AWS_DEFAULT_REGION -e AWS_ENDPOINT_URL)
docker run -it --rm \
--network cdf \
"${CDF_ENDPOINT_KEY_ARGS[@]}" \
"${CDF_STORAGE_CREDENTIAL_ARGS[@]}" \
-v "$(pwd)/modules:/workspace/modules" \
-v "$(pwd)/configs:/workspace/configs" \
-v "$(pwd)/data:/workspace/data" \
--entrypoint /bin/bash \
"$CDF_IMAGE_ID"Persist the captured sha256: ID and use it directly for every later launch;
never re-resolve the mutable tag as the launch target. For registry releases,
verify the signed manifest and use name:tag@sha256:<manifest-digest>.
Networking: augmentation is an outbound-only client and does not publish ports. Use the user-defined
cdfbridge for the augmentation container and every local model, Arbitrator, and checker container.cosmos-evaluatormay be a container/DNS hostname on that bridge; it is not a second bridge name. Change endpoint URLs from hostlocalhostaddresses to container DNS names, for examplehttp://vlm:8000/v1. The default bridge is sufficient when every endpoint is remote.API keys: prefer a platform secrets manager that injects the required environment variables. Otherwise, export only the required keys and forward their names with
-e VAR_NAME; never mount or load a broad credential file.No GPU needed for remote inference — add
--gpusfordata_processing.alignmentand any H.264 decode; pick a GPU not shared with a busy model server. Container runs as uid 10000; ensuredata/is writable (or--user "$(id -u):$(id -g)").
Warning: Never enable Docker host-network mode on shared, multi-tenant, or production hosts. It is permitted only when all three conditions hold: (1) a required host-local service cannot be moved onto the
cdfbridge, (2) the host is single-tenant and isolated with no other workloads, and (3) the user sends an explicit message in the current conversation choosing host networking after receiving a warning that it removes network namespace isolation. Silence, prior documentation, or an earlier unrelated approval is not acceptance. Do not select it automatically. Review pipeline-operations.md.
Step 2: Validate, Then Run (Inside the Container)
# Schema and cross-section preflight only: no endpoint calls or inference.
uv run --no-sync modules/cli.py --config configs/<config_file>.yaml --validate-only
# Run only after validation succeeds.
uv run --no-sync modules/cli.py --config configs/<config_file>.yaml
# With OmegaConf CLI overrides (dot-list syntax)
uv run --no-sync modules/cli.py --config configs/<config_file>.yaml \
data.0.inputs.rgb=/workspace/data/input.mp4 \
augmentation.parameters.seed=42Environment variables: generation/captioning keys resolve as the api_key_env
var → the role's default env var. External Cosmos evaluation reads only the
variable explicitly named by its endpoint and fails initialization when that
variable is unset. Leave api_key_env off for unauthenticated endpoints.
LOG_LEVEL sets logging.
Configuration Schema
Configs are validated against PipelineConfig (modules/aug_utils/schema/) and have seven top-level sections. Author them in the canonical order above; YAML key order does not change runtime semantics. Full per-section YAML is in configuration-schema.md; runtime flow and common editing tasks are in pipeline-operations.md.
Troubleshooting
Run all inference and schema validation inside the Docker container for a consistent environment. For config-validation errors, runtime/endpoint errors, and typical per-stage timings, see troubleshooting.md.
Limitations
Remote inference only. All models run behind remote HTTP endpoints; no local weights, no
torchrun, noexecutor_type, no Gradio executor.GPU for configured local stages. Remote inference needs no augmentation-container GPU. A CUDA GPU is required by
data_processing.alignment(cupy) and by any local stage decoding H.264 because the image ships only the hardwareh264_cuviddecoder (software AVC decode is off for licensing). VP9 decodes in software. Video output is VP9-only.External-evaluator media must be remote. When an external evaluator is enabled, schema validation rejects local
data[].inputs.rgb, control media, generateddata[].output.video, and configured companion media. Use checker-readables3://,msc://,gs://,az://, or HTTP(S) URIs; the pipeline does not upload local files solely for evaluation.Inference only. This pipeline augments and generates media — it does not train or fine-tune models.
Auth varies by endpoint. Hosted endpoints (e.g. Veo) need a key via
api_key_env; local endpoints (e.g. vLLM) need none.
Reference files
configuration-schema.md — full per-section YAML for every config section.
config-decision-tree.md — which config to start from, model/captioning selection, alignment override rules.
pipeline-operations.md — pipeline flow, worked example, common tasks, storage, security notes.
captioning-strategy-guide.md — all 6 captioning modes with complete YAML.
evaluator-setup-guide.md — built-in evaluator tuning plus external Cosmos discovery, gating, and failure semantics.
troubleshooting.md — validation/runtime errors and per-stage timings.
image-attribute-augmentation.md — Image Attribute Augmentation image-edit workflow and dataset packaging.
event-video-gen.md — smart-space image-to-video event generation.
Files
- ATTRIBUTION.mdAdded by AutoGineer906 B
- BENCHMARK.md10.1 KiB
- LICENSELicence file added by AutoGineer11.2 KiB
- SKILL.md20.8 KiB
- evals/evals.json20.5 KiB
- references/captioning-strategy-guide.md14.3 KiB
- references/config-decision-tree.md17.0 KiB
- references/configuration-schema.md24.5 KiB
- references/evaluator-setup-guide.md20.0 KiB
- references/event-video-gen.md16.2 KiB
- references/image-attribute-augmentation.md16.2 KiB
- references/pipeline-operations.md8.0 KiB
- references/troubleshooting.md5.4 KiB
- skill-card.md4.3 KiB
- skill.oms.sig6.4 KiB
references/event-video-gen.md
Event Video Generation
Use this reference for Smart Spaces seed-image creation and event video generation with Cosmos 3 Super. It covers text-to-image (T2I) seed creation, image-to-video (I2V) event generation, distribution workflows, and VLM verification.
Keep this as a reference under the augmentation skill. Do not create a separate end-to-end Event Video Generation skill.
Contents
Core Rules
Supported Configs
Deterministic Docker CLI Workflow
Create One Seed Image
Create Multiple Seed Images
Generate One Event Video
Generate Multiple Event Videos
Prompt Requirements
VLM Verification
Validation and Output Inspection
Troubleshooting
Core Rules
Use the checked-in Smart Spaces configs as templates. Make runtime copies for concrete endpoint URLs, input paths, output paths, environment descriptions, and anomaly distributions.
Do not write API keys into YAML, shell history, logs, or generated configs. Pass them through the environment variables named by each endpoint's
api_key_env.Preserve the seed image as the first frame of I2V output. Keep the camera, crop, perspective, layout, lighting, fixed objects, and background stable.
Generate one explicit, physically plausible, non-graphic anomaly per clip. Prefer a visible setup, main action, and short aftermath.
Keep runtime and distribution configs separate. Runtime configs execute one sample; distribution configs create multiple runtime configs.
Use the generic
data[*].output.videoschema field for generated media. In the T2I config it intentionally points to a.png; in the I2V config it points to an.mp4.Use remote endpoints without local GPU flags. Add local GPU access only when a model endpoint or another processing stage runs inside the same container.
Do not modify pipeline code to change environments, anomalies, endpoints, seeds, or output paths. These are config or CLI overrides.
Supported Configs
| Workflow | Config | Purpose |
|---|---|---|
| T2I runtime | configs/cookbook/event-video-generation/config_seed_image_gen_cosmos3_super_t2i_smart_spaces.yaml | Create one seed image from an environment description |
| T2I distribution | configs/cookbook/event-video-generation/distribution_seed_image_gen_cosmos3_super_t2i_smart_spaces.yaml | Create multiple T2I runtime configs |
| I2V runtime | configs/cookbook/event-video-generation/config_event_video_gen_cosmos3_smart_spaces.yaml | Create and verify one event video from one seed image |
| I2V distribution | configs/cookbook/event-video-generation/distribution_event_video_gen_smart_spaces.yaml | Create multiple I2V runtime configs from one or more seed images |
The runtime configs use endpoint-registry entries. T2I requires a prompt LLM and Cosmos 3 Super Text2Image endpoint. I2V requires scene-understanding, prompt-generation, question-generation, answering VLM/LLM endpoints, and a Cosmos 3 Super Image2Video endpoint.
The OpenAI client appends /chat/completions, so configure chat endpoints with
a base URL ending in /v1, not with the full /chat/completions route. The
openai.video.sync adapter posts to {url}/videos/sync; keep the I2V endpoint
base URL ending in /v1 when that is the service contract.
Deterministic Docker CLI Workflow
Build the augmentation image from the repo root when a fresh local image is required:
docker build -t cdf-augmentation:latest -f docker/Dockerfile .For a prebuilt image, replace cdf-augmentation:latest with the exact tag or
digest being validated. Mount the current branch's configs and modules
read-only, and mount input and output directories separately:
HOST_INPUT="/absolute/path/to/smart_spaces_inputs"
HOST_OUTPUT="/absolute/path/to/smart_spaces_outputs"
mkdir -p "$HOST_OUTPUT"
docker network inspect cdf >/dev/null 2>&1 || \
docker network create cdf
docker run --rm -it \
--user "$(id -u):$(id -g)" \
--network cdf \
--cap-drop=ALL \
--security-opt=no-new-privileges:true \
-e VLM_API_KEY \
-e LLM_API_KEY \
-e BUILD_NVIDIA_API_KEY \
-e VLM_ENDPOINT_MODEL \
-e LLM_ENDPOINT_MODEL \
-v "$(pwd)/modules:/workspace/modules:ro" \
-v "$(pwd)/configs:/workspace/configs:ro" \
-v "$HOST_INPUT:/workspace/data/in:ro" \
-v "$HOST_OUTPUT:/workspace/data/out" \
-w /workspace \
--entrypoint /bin/bash \
cdf-augmentation:latestMount the subdirectories individually, as above. Never mount over /workspace
itself (-v "$(pwd):/workspace") — it hides the image's venv at /workspace/.venv.
Augmentation is an outbound client, so publish no ports with -p/--publish.
Keep the shared cdf bridge above for remote endpoints. When a model runs in
another container, attach it to the same bridge and use its container name in
the endpoint URL. Run host-local models in a container on the same bridge, or
use a remote endpoint.
Security: Host networking is prohibited because it exposes host loopback services and internal interfaces to the container. Use only the isolated
cdfbridge.
The commands below assume /workspace as the working directory inside the container.
Create One Seed Image
Use the T2I runtime config to create one normal Smart Spaces seed image. Supply an environment type, an optional detailed environment description, and unique output paths:
uv run modules/cli.py \
--config configs/cookbook/event-video-generation/config_seed_image_gen_cosmos3_super_t2i_smart_spaces.yaml \
'captioning.llm.variables.env_type=[warehouse]' \
'captioning.llm.variables.env_description=[warehouse receiving area with pallet racks, loading doors, floor markings, and 2-3 adult workers]' \
data.0.output.video=/workspace/data/out/seeds/warehouse.png \
data.0.output.caption=/workspace/data/out/seeds/warehouse_prompt.txt \
data.0.output.metadata=/workspace/data/out/seeds/warehouse_metadata.jsonOverride both T2I endpoint URLs before running when the defaults still point to
localhost:8000. Keep the endpoint IDs unchanged unless the corresponding
consumer endpoint_id or model name is updated too.
Use 1024x576 unless the deployed Cosmos 3 Super T2I endpoint documents
another supported size. This size is known to satisfy the model's distributed
sequence-length constraints; some smaller 16:9 sizes do not.
Create Multiple Seed Images
Make a runtime copy of the T2I distribution config and set these fields:
workflow_type: seed_image_gen_t2i
env_type: warehouse
env_description: warehouse receiving area with pallet racks and 2-3 adult workers
n_augmentations: 5
example_augmentation_config: /workspace/configs/cookbook/event-video-generation/config_seed_image_gen_cosmos3_super_t2i_smart_spaces.yaml
config_output: /workspace/data/out/generated_configs/seed_image_gen_t2i
output_root: /workspace/data/out/generated_seed_images
output_basename: seed_image
seed_base: 42Generate one runtime YAML per requested seed image:
uv run python \
modules/config_distribution_generation/generate_augmentation_configs.py \
--workflow /workspace/data/out/distribution_seed_image_gen.yamlPaths in a distribution file are resolved relative to that file. Use absolute
container paths when the runtime copy is outside /workspace/configs.
For n_augmentations: 5, the generated configs use deterministic seeds from
seed_base through seed_base + 4 and produce this layout:
/workspace/data/out/generated_seed_images/
└── warehouse/
├── aug_0/
│ ├── seed_image.png
│ ├── seed_image_prompt.txt
│ └── seed_image_metadata.json
└── ...Run each generated runtime config separately:
find /workspace/data/out/generated_configs/seed_image_gen_t2i \
-type f -name '*.yaml' -print0 | sort -z | \
while IFS= read -r -d '' config; do
uv run modules/cli.py --config "$config"
doneGenerate One Event Video
Use the I2V runtime config with an existing seed image. Override the input, anomaly, environment, and every output path for a reproducible run:
uv run modules/cli.py \
--config configs/cookbook/event-video-generation/config_event_video_gen_cosmos3_smart_spaces.yaml \
data.0.inputs.rgb=/workspace/data/in/retail.png \
'captioning.llm.variables.anomaly_type=[person_falling]' \
'captioning.llm.variables.env_type=[retail]' \
augmentation.parameters.seed=86000 \
data.0.output.video=/workspace/data/out/videos/retail_person_falling.mp4 \
data.0.output.caption=/workspace/data/out/videos/retail_person_falling_prompt.txt \
data.0.output.metadata=/workspace/data/out/videos/retail_person_falling_metadata.json \
data.0.output.evaluation=/workspace/data/out/videos/retail_person_falling_evaluation.jsonBefore running, replace the cosmos3-super-image2video endpoint's default
localhost:8000 URL with the deployed I2V base URL, or add the equivalent
endpoints.4.url=https://<i2v-host>/v1 CLI override for this exact template.
Retarget the four chat endpoints too when they are not served from the
checked-in NVIDIA API base URL.
Use anomaly values that describe a direct visible action. The checked-in prompt supports these values explicitly:
person_falling
person_climbing
person_running
smoking_or_vaping
person_fighting
fire_or_smokeOther values are accepted as prompt variables, but verify that the prompt
generator and evaluator questions describe the intended event clearly. Update
evaluator extra_questions when a custom anomaly needs fixed, event-specific
questions.
Generate Multiple Event Videos
Use the I2V distribution config instead of a shell loop when generating a
dataset. Put one or more supported seed images under data_dir, make a runtime
copy of the distribution YAML, and set concrete paths:
workflow_type: event_video_gen_i2v
data_dir: /workspace/data/in/seeds
n_augmentations: 2
example_augmentation_config: /workspace/configs/cookbook/event-video-generation/config_event_video_gen_cosmos3_smart_spaces.yaml
config_output: /workspace/data/out/generated_configs/event_video_gen
output_root: /workspace/data/out/event_video_outputs
variables:
anomaly_type:
person_falling: 0.5
fire_or_smoke: 0.5Weights are relative positive probabilities. Use one value with weight 1.0
when every generated clip must have the same anomaly.
Generate runtime configs:
uv run python \
modules/config_distribution_generation/generate_augmentation_configs.py \
--workflow /workspace/data/out/distribution_event_video_gen.yamlFor each seed image, the generator writes n_augmentations runtime configs and
uses this output layout:
/workspace/data/out/event_video_outputs/
└── <seed_stem>/
├── aug_0/
│ ├── output.mp4
│ ├── output_prompt.txt
│ ├── output_metadata.json
│ └── output.mp4_evaluation.json
└── ...Run the generated configs in deterministic filename order:
find /workspace/data/out/generated_configs/event_video_gen \
-type f -name '*.yaml' -print0 | sort -z | \
while IFS= read -r -d '' config; do
uv run modules/cli.py --config "$config"
donePrompt Requirements
Build the final I2V prompt in this order:
[Cinematography] + [Seed Preservation] + [Environment] + [Subject] +
[Action] + [Context] + [Style and Negative Constraints]Require the prompt generator to:
Use the seed image as the first frame.
Preserve the exact crop, perspective, field of view, layout, lighting, object locations, color palette, and background.
Lock the camera: no pan, tilt, zoom, dolly, tracking, handheld motion, reframing, cuts, montage, or time-lapse.
Preserve existing people and objects without popping, disappearing, teleporting, morphing, duplication, or scale changes.
Add only the minimum motion required for one anomaly.
Show the action across multiple frames with realistic contact, weight, balance, and aftermath.
Avoid graphic injury, visible camera hardware, text/UI overlays, cinematic effects, or unrelated side events.
VLM Verification
The verifier decodes the generated MP4 in the augmentation container, samples
frames evenly across the complete clip, JPEG-encodes them, and sends them as
chronological image_url items in one VLM request per question.
Set frames to the total number of sampled images, not the source frame rate.
Cosmos 3 Super produces approximately 8 seconds at 24 fps, or about 192 source
frames. The Smart Spaces config samples 24 frames, which gives approximately 3
observations per second across the setup, action, and aftermath:
evaluators:
- attribute_verification:
vlm_verification:
endpoint_id: answering_vlm
frames: 24The schema default is one first frame, so set frames explicitly for events
that occur later in a generated video. More frames improve temporal coverage
but increase local decode time, request size, and VLM vision processing. Frame
sampling requires a working CPU video decoder in the augmentation container;
it does not require the CUDA h264_cuvid decoder.
Validation and Output Inspection
Validate the shipped runtime configs and the targeted tests before running an expensive endpoint job:
uv run pytest -q \
tests/schema/test_schema.py \
tests/config_distribution_generation/test_generate_augmentation_configs.py \
tests/verification/test_verifier_adapter.pyFor generated distribution configs, first inspect one YAML and confirm:
data[0].inputs.rgbpoints to the intended seed image or isnullfor T2I.T2I output media ends in
.png; I2V output media ends in.mp4.captioning.llm.variablescontains the expected environment or anomaly.The selected endpoint IDs exist in
endpointswith the correct roles.Output paths are writable inside the container.
After a run, inspect the files instead of relying only on process exit status:
test -s /workspace/data/out/videos/retail_person_falling.mp4
ffprobe -v error -show_entries stream=codec_name,width,height,r_frame_rate \
-show_entries format=duration,size \
-of json /workspace/data/out/videos/retail_person_falling.mp4 | jq .
jq '.attribute_verification // .evaluators // .' \
/workspace/data/out/videos/retail_person_falling_metadata.json
jq . /workspace/data/out/videos/retail_person_falling_evaluation.jsonReport generation and verification separately. A valid MP4 can exist even when one or more evaluator questions fail.
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
401 or 403 | Missing or incorrect endpoint key | Check the endpoint's api_key_env and pass that variable with Docker -e; never put the key in YAML |
Chat endpoint returns 404 | Config contains the full /chat/completions path | Use the OpenAI-compatible base URL ending in /v1 |
Video endpoint returns 404 or 405 | Adapter and service route do not match | Use the adapter required by the service; openai.video.sync expects {url}/videos/sync |
| T2I fails for a small 16:9 resolution | Distributed sequence length is not divisible for that size | Retry with the verified 1024x576 setting |
| Generated distribution config cannot find its template | Relative path was resolved from the runtime workflow copy's directory | Set example_augmentation_config to an absolute container path |
| No distribution configs are generated | data_dir contains no supported media, or the mounted path is wrong | Inspect the mount and use image files for the I2V distribution input |
| MP4 exists but verification fails | Anomaly is unclear, evaluator questions do not match, or the answering response is unparseable | Inspect the prompt, questions, raw answers, and evaluation JSON; adjust config prompts/questions without changing generation code |
| Frame verification reports a decoder error | The container cannot decode the MP4 with its configured backend | Use a compatible CPU decoder and confirm it can read the generated H.264 MP4 |
| Output path is not writable | Container UID cannot write to the mounted host directory | Run with the host UID/GID or correct directory ownership; do not use world-writable permissions on shared systems |
Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Needs an API key, Needs a command-line tool, Needs Python
Security
What our scanner noticed· Medium risk
- Large base64-encoded blobs
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Created by
- NVIDIA
- Publisher
- NVIDIA (Official)
- Source
- NVIDIA/skills · skills/cdf-augmentation · commit fce3cca
- Licence
- Apache License 2.0 (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE-APACHE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by NVIDIA or NVIDIA.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download cdf-augmentation.zip