Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when running video data augmentation and auto-labeling workflows on OSMO: flow selection, preflight, submit-time interpolation, monitoring, and output retrieval. Trigger keywords: video data augmentation, data enrichment, auto labeling, VDA demo, OSMO workflow, pseudo labeling.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-05 | ✗→✓ | ▲ Improved | 174% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 177% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 146% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 163% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 352% | 0% |
Default workflow skill for VDA execution on OSMO. It owns flow selection, preflight, cache readiness, inference-path decisions, submit-time interpolation, monitoring, and output retrieval. Component skills are consult-only.
Run the end-to-end VDA workflow safely and reproducibly from preflight to output download.
Do NOT use this skill for container-internal tuning-only questions.
Confirm these before running preflight or any submit. Missing required secrets surface as USER_INPUT_REQUIRED: from scripts/preflight_credentials.sh.
| Requirement | How it is satisfied | Used for | |---|---|---| | NGC API key (optional) | NGC_API_KEY, NGC_CLI_API_KEY, or compatible nvapi-* token in NVIDIA_API_KEY/OPENAI_API_KEY/VLM_API_KEY/LLM_API_KEY | Optional for nvcr_io credential refresh and NGC REST scope probe; default VDA image refs are validated via workflow registry probes | | Hugging Face token | HF_TOKEN (or HUGGING_FACE_HUB_TOKEN), or a cached token at ~/.cache/huggingface/token | Creates the OSMO hf_token credential; pulls gated Cosmos/SeedVR weights | | OSMO CLI access | osmo on PATH, logged in, with a default profile and a registered DATA credential profile matching storage_url | Submitting/monitoring workflows and listing/downloading objects | | GPU pool | At least one ONLINE pool in osmo pool list --mode free; POD_TEMPLATE carries GPU toleration/selectors | Scheduling setup + worker tasks |
Optional (only for the strict NGC org/team probe): NGC_ORG + NGC_TEAM (or NGC_CLI_ORG / NGC_CLI_TEAM). External VLM/LLM endpoint keys are validated separately, not by preflight.
Key handling rule: nvapi-* tokens are first-class inputs for nvcr_io. Never reject by token prefix alone; use workflow registry probe results as source of truth.
auto_labeling, augmentation_and_al, e2e,e2e_super_resolution) from user intent.
storage_url).
flows, and summarize task outcomes.
Use run_script(...) for script execution. Canonical examples:
pythonrun_script("bash scripts/preflight_credentials.sh --workflow assets/configs/osmo/augmentation_and_al.yaml") run_script("python3 scripts/pre_submit_guard.py --workflow assets/configs/osmo/auto_labeling.yaml") run_script("bash scripts/prepare_demo_assets.sh /srv/sdg/data/vda_inputs")
Use script-level --help for exact arguments.
| Script | Role | |---|---| | scripts/preflight_credentials.sh | Secrets/control-plane preflight and workflow image access checks | | scripts/pre_submit_guard.py | Submit-time interpolation, cache, and dataset safety checks | | scripts/prepare_demo_assets.sh | Demo video pull + flatten for default demo path | | scripts/generate_configs.py | Setup-time config and cookbook projection generation | | scripts/cosmos_worker.sh | Augmentation worker execution | | scripts/pl_original_worker.sh | Original-video auto-labeling worker execution | | scripts/pl_augmented_worker.sh | Augmented-video auto-labeling worker execution | | scripts/osmo_barrier.py | Multi-node barrier synchronization | | scripts/stage_run_artifacts.sh | Local mirror of full run output + input video | | scripts/render_side_by_side.sh | Side-by-side comparison render from local artifacts |
| Flow | OSMO YAML | Group sequence | Typical use | |---|---|---|---| | augmentation_and_al | assets/configs/osmo/augmentation_and_al.yaml | setup -> augmentation -> auto_labeling_augmented | Augment one or more videos, then auto-label augmented outputs | | auto_labeling | assets/configs/osmo/auto_labeling.yaml | setup -> auto_labeling | Label original videos only | | e2e | assets/configs/osmo/e2e.yaml | setup -> (auto_labeling_original + augmentation) -> auto_labeling_augmented | Throughput-first path | | e2e_super_resolution | assets/configs/osmo/e2e_super_resolution.yaml | setup -> auto_labeling_original -> augmentation -> auto_labeling_augmented | Sequential path with SR gate before augmentation |
Legacy alias assets/configs/osmo/augmentation_and_pl.yaml remains for backwards compatibility.
| User intent | Workflow | |---|---| | "Label my source videos" / "PL-only" / "no augmentation" | auto_labeling | | "Create augmented videos and label them" | augmentation_and_al | | "Run the full pipeline quickly" | e2e | | "Run full pipeline, but gate on SR-enhanced originals first" | e2e_super_resolution |
Default to autonomy: ask only when missing information blocks execution.
scripts/prepare_demo_assets.sh)and continue with dataset=vda-demo.
augmentation_and_al.automatic NIM deploy/repair when unhealthy.
setup_model_cache.yaml, rerun pre-submit guard, andcontinue automatically on success.
Do not pause with "Ready when you are" or equivalent approval prompts.
| Missing input | Why it matters | Ask | |---|---|---| | USER_INPUT_REQUIRED from preflight | Required secret is missing | Ask one concise unblock question for exactly the missing value(s) | | Storage backend prefix cannot be derived from the active dataset/upload root | Wrong scheme causes runtime storage auth mismatch | "What is the backend-native root prefix for this run?" | | No ONLINE GPU pool/platform can be selected | Workflow cannot schedule setup/workers | "Which GPU pool/platform should this run target?" |
the user explicitly requests a different dataset.
folder) as first-class and preferred.
scripts/prepare_demo_assets.sh (HF dataset flow) without asking extra source-selection questions.
input instead of demo assets.
nvidia/video-data-augmentation-demo) for thedefault demo path.
unless the user explicitly requests that behavior.
Collect only missing values:
dataset_url or local uploadfolder; otherwise default to VDA demo assets and proceed).
auto_labeling, augmentation_and_al, e2e, e2e_super_resolution);default to augmentation_and_al when unspecified.
gpu_platform for all VDA resources (auto-select an ONLINE platformwhen unambiguous; ask only when no valid option exists).
overridden).
Do not guess gpu_platform (for example microk8s). Use the exact current platform label shown by osmo pool list --mode free (for example gpu).
Generate run stamp before each submit:
bashSTAMP=$(cat /proc/sys/kernel/random/uuid | cut -c1-8) RUN_ID="run-$STAMP"
Before running any mutating command (osmo credential set, NIM install/repair, cache workflow submit, or target VDA workflow submit), provide a short ETA overview to the user.
Keep it concise (one short paragraph or 4-6 bullets) and include:
(NIM/cache already healthy),
Baseline ranges (from observed MicroK8s + OSMO runs):
| Phase | Typical duration | |---|---| | Credentials + preflight | ~1-2 min | | NIM deploy/download/warmup (if needed) | ~10-15 min | | Demo assets download/upload (if demo path) | ~1-3 min | | Model cache population (if needed) | ~15-25 min | | Workflow submit + queue/start | ~1-3 min |
Workflow runtime ranges after submit:
| Flow | Typical runtime | |---|---| | auto_labeling | ~6-15 min | | augmentation_and_al | ~20-35 min | | e2e | ~22-40 min | | e2e_super_resolution | ~25-45 min |
Cold-start end-to-end runs are commonly ~45-80 min; warm-start runs are usually ~20-45 min depending on flow and video length.
bash bash scripts/preflight_credentials.sh --workflow assets/configs/osmo/<mode>.yaml
Restricted egress:
bash bash scripts/preflight_credentials.sh --no-probe --workflow assets/configs/osmo/<mode>.yaml
Preflight does not require a workload-local .env. Runtime interpolation is driven by submit-time values (dataset, run_id, gpu_platform, video, storage_url, skills_dir) supplied in one --set-string list.
Passing --workflow validates pull access for the active workflow image refs (workflow.groups[].tasks[].image) using anonymous bearer access with credential fallback when provided. If replacement NGC/HF secrets are provided in env, preflight refreshes existing nvcr_io / hf_token automatically when present. Use --refresh to force overwrite even when no new env secrets were supplied:
bash bash scripts/preflight_credentials.sh --workflow assets/configs/osmo/<mode>.yaml --refresh
If output contains USER_INPUT_REQUIRED:, ask one concise unblock question and stop.
On workflow image 401/403, report registry access failure after probe checks on the listed image refs; do not claim a key family (for example nvapi-*) is categorically unsupported.
storage_url must be derived from the actual dataset/upload backend for the current run.
text dataset_url=azure://storiondevxah69/osmo-workflows/datasets/vda-demo storage_url=azure://storiondevxah69/osmo-workflows dataset=vda-demo
Never silently default to stale s3:// values on non-S3 backends.
user decision. Do NOT pause to ask; run the install with the VDA allow-list:
bash export NIM_SERVICES="qwen3-vl qwen25-14b" skills/physical-ai-infrastructure-setup-and-resilient-scaling/components/inference-nim-operator/scripts/install.sh
references/nim/README.md for full endpoint docs and health checks.then skip the in-cluster deploy.
bash osmo pool list --mode free osmo config show POD_TEMPLATE python3 scripts/pre_submit_guard.py --workflow assets/configs/osmo/<mode>.yaml
If pre_submit_guard.py reports cache failure, default action is to run:
bash osmo workflow submit assets/configs/osmo/setup_model_cache.yaml \ --set-string storage_url=<backend-prefix> path=data
Then rerun pre_submit_guard.py and submit the target VDA flow only after it passes. Ask user only when backend/prefix is ambiguous or cache setup fails.
VDA templates schedule setup and workers on gpu_platform (no system pool dependency for user workloads).
Every flow uses the same submit shape; only the workflow YAML changes. Choose the YAML for the requested flow, then run the command below. Full per-flow walkthroughs (stage matrix and flow details) live in the linked references.
| Flow | Workflow YAML | Walkthrough | |---|---|---| | Augmentation + auto-labeling | assets/configs/osmo/augmentation_and_al.yaml | references/flows/augmentation_and_al.md | | Auto-labeling only | assets/configs/osmo/auto_labeling.yaml | references/flows/auto_labeling.md | | E2E (parallel) | assets/configs/osmo/e2e.yaml | references/flows/e2e.md | | E2E (super-resolution gated) | assets/configs/osmo/e2e_super_resolution.yaml | references/flows/e2e_super_resolution.md |
bashSKILLS_DIR="$(cd "$(git rev-parse --show-toplevel)/skills/physical-ai-video-data-augmentation" && pwd)" STAMP=$(cat /proc/sys/kernel/random/uuid | cut -c1-8) osmo workflow submit assets/configs/osmo/<flow>.yaml \ --pool <pool> \ --set-string \ dataset=<dataset> \ run_id=run-$STAMP \ storage_url=<backend-prefix> \ gpu_platform=<gpu-platform> \ video=<video-stem> \ cosmos_model_cache_url=<backend-prefix>/data/models/cosmos_transfer \ auto_labeling_model_cache_url=<backend-prefix>/data/models/auto_labeling \ skills_dir="$SKILLS_DIR"
Compatibility note:
--set-string flag and pass all the key/value pairs after it.--set/--set-string flags in the same command; some OSMO buildsonly honor the last occurrence.
--set and --set-string in one submit command.*_model_cache_url values to avoid nested-template interpolationdifferences across OSMO environments.
Common optional overrides (append key/value pairs to the same --set-string list):
bashcookbook=<scene_profile> \ vlm_url=<openai_base_url> \ llm_url=<openai_base_url> \ cosmos_model_cache_url=<url> \ auto_labeling_model_cache_url=<url>
The auto-labeling-only flow has no augmentation stage, so it omits cosmos_model_cache_url at runtime; passing it is harmless and keeps one submit shape across flows.
bash# Workflow status + task states osmo workflow query <workflow_id> --format-type json \ | jq '{status, tasks: [.groups[].tasks[] | {name, status, exit_code}]}' # Logs for a specific task osmo workflow logs <workflow_id> --task <task_name> -n 200 # Output retrieval osmo data list --no-pager <output_url> osmo data download <output_url> <local_dir>/
For completion artifacts, always mirror the full run output into workspace:
bashROOT="$(git rev-parse --show-toplevel)" RUN_LOCAL_DIR="$ROOT/media/vda/runs/<run_id>" mkdir -p "$RUN_LOCAL_DIR" osmo data download "<storage_url>/datasets/<dataset>-outputs/<run_id>/" "$RUN_LOCAL_DIR/"
For runs expected to exceed two minutes, send heartbeat updates at least every two minutes. For media evidence, emit one standalone MEDIA:<absolute-path> line per message bubble.
Execution continuity requirement:
not permission prompts.
shape and corrected values; do not loop through ad-hoc flag experiments.
MEDIA formatting is strict:
MEDIA:/absolute/path/to/file.mp4MEDIA: contiguous on a single line (never split across lines).Applies to augmentation_and_al, e2e, and e2e_super_resolution after a successful run.
Required completion output (do not stop at raw output URLs):
bash bash scripts/stage_run_artifacts.sh \ --storage-url <storage_url> --dataset <dataset> --run-id <run_id> --video <video>
bash bash scripts/render_side_by_side.sh \ --run-local-dir "<repo>/media/vda/runs/<run_id>" --dataset <dataset> --video <video>
<run_local_dir>/setup_b0/configs/manifest.yaml(sampled_vars for <video>_aug0)
<run_local_dir>/outputs/pseudo_labeled_augmented/<video>_aug0e2e / e2e_super_resolution, original-label summary from<run_local_dir>/outputs/pseudo_labeled/<video>
If ffmpeg is unavailable, emit input and augmented MEDIA from the same local run copy and still provide augmentation + auto-labeling summaries.
For demo runs (no user video provided), explicitly state that input came from nvidia/video-data-augmentation-demo.
Use these canonical locations:
assets/configs/osmo/*.yamlscripts/*.sh, scripts/*.pyreferences/flows/*.mdreferences/setup.md, references/troubleshooting.mdreferences/container-images.md, references/nim/README.mdassets/cookbooks/TUNING_GUIDE.mdOther measured skills in the registry, with their headline benchmark lift.