PAIDF Curator Operator Skill
GPU-accelerated video and image curation via NVIDIA Cosmos Curator inside
Physical AI Data Factory — Curation and Retrieval
(paidf-curation-and-retrieval). This skill is a short Curator index.
Embedding handoff boundaries live in
data-mining.md and
curation-retrieval-workflow.md;
mining execution is make help and the repository cookbooks.
- Video:
split, dedup, shard.
- Image:
annotate (load → filter → embed → caption → write).
- Handoff: Curator IV2 or CE1 parquet that downstream mining can consume.
See data-mining.md and
curation-retrieval-workflow.md.
Purpose
Turn raw video and image collections into curated, training-ready datasets. This
skill configures and runs cosmos-curator pipelines (clip splitting, filtering,
captioning, embeddings, SAM3 event verification, dedup, WebDataset sharding,
image annotate) and supports KPI-driven, distribution-aware, and restrictive
curation.
Instructions
- Classify the request as advisory, config, run, or TAO handoff. Do not mix
those routes.
- For config work, complete the mandatory pre-flight below before writing YAML.
- For an explicit run, load
running-pipelines.md, validate the config,
obtain credentials only through approved injection, then execute after
authorization.
- For a TAO handoff, validate Curator output and the declared embedding family
using data-mining.md before mining.
- Return the Output Format below. Never print secret values.
Examples
- Advisory: "How much SHM should I set?" → read
running-pipelines.md and report guidance.
Do not run Docker.
- Config with no KPI: complete the calibration interview in
calibration-config.md, then emit YAML.
- Run: after sample clips are staged,
make run-pipeline with the traffic
split-minimal cookbook recipe only after preflight and user authorization.
- FFmpeg missing in the container: install the host sidecar
(
make ffmpeg-install) per
ffmpeg-sidecar.md.
Inputs
Required inputs depend on the route:
- Advisory request: the question plus relevant repository and config context.
- Config request: input and output locations, domain and goal, available KPI
output or representative samples, and hardware constraints. If neither KPI
output nor samples exist, complete the calibration interview before writing
YAML.
- Run request: reviewed config path, data and model paths, runtime, GPU,
and SHM constraints, and explicit authorization to execute.
- TAO handoff: validated artifact paths and declared embedding family.
Optional inputs include target distributions, event taxonomy, prompt choices,
existing output metadata, and user-approved operational constraints.
Resolve inputs in this order: repository configuration and validated run
artifacts; explicit prompt arguments and corrections; available agent context;
then the broad user prompt. Explicit user instructions remain authoritative
unless unsafe or incompatible, in which case stop and explain the conflict.
Never infer secret values: credentials come only from approved runtime
injection.
Prerequisites
- GPU host with NVIDIA drivers +
nvidia-container-toolkit; Docker. SHM
sized from host RAM (SHM_SIZE, default 24gb).
cosmos-curator image: make pull uses the pin configured by the
example env file and Make. No separate product engine image. Source
builds are developer-only; see
cosmos-curator.md.
- FFmpeg host sidecar for distributable images (
make ffmpeg-install) —
they do not bundle FFmpeg. See
ffmpeg-sidecar.md.
- Credentials as needed: inject S3 and captioning API keys at runtime
through an approved secret manager or operator deployment mechanism. Never
put secret values in repository files, commands, logs, or examples. The env
file is for non-secret image and CDS profile overrides copied from the
example env file.
Mandatory pre-flight: do NOT emit a pipeline config without context
Before writing any *.yaml pipeline config, the agent MUST verify
that one of the following is true:
- KPI run output exists -- read it and use
distribution-analysis.md,
distribution-aware-curation.md,
and
configuration-decision-tree.md.
- KPI sample videos are available for inspection / discovery --
follow context-understanding.md
Phase 1.
- No KPI of any kind -- no baseline exists. Read
calibration-config.md and complete its
Phase 1 interview (Inputs / Domain / Goal / Hardware / Calibration)
BEFORE emitting a config. The interview is binding, not advisory.
If the user requests a config with only a one-line description
("configure cosmos-curator for my videos"), assume the calibration
workflow and ask the Phase 1 interview questions in one batched
message. Emit the config only after the answers come back, and
always include the calibration disclosure table that flags every
defaulted field.
Canonical Flow
Choose one route; do not collapse advisory and execution branches:
- Advisory only (sizing, monitoring, troubleshooting, expected commands):
inspect repository, config, and run evidence, load
running-pipelines.md, and report guidance.
Do not prepare credentials or execute.
- Create or change config:
- KPI output exists → analyze it, choose standard, distribution-aware, or
restrictive curation, then emit a reviewed config.
- Representative samples exist → inspect them or run discovery before
selecting defaults.
- Neither exists → complete the binding calibration interview; emit config
and disclosure only after answers.
Stop if required paths, intent, or hardware constraints remain unresolved.
- Explicit run request: prepare runtime → obtain credentials through
approved injection → validate config and runtime → request approval if not
already granted → execute → validate outputs. Stop before execution on any
failed preflight.
- Downstream TAO handoff: validate Curator output and embedding family,
then prepare compatible inputs for Data Mining. Mine only after the preceding
artifact validation succeeds.
Configs are flat YAML with pipeline: split|dedup|shard|annotate and upstream
snake_case argument names. Operator first-run recipes live under the
cookbook tree (split-minimal then full split, dedup, and shard YAML).
The configs directory is the full flag reference and the Makefile default when
CONFIG_FILE is omitted. split writes clips, metadata, and embeddings;
dedup consumes embeddings; shard writes WebDataset archives; annotate
processes still images (image annotate flag-reference YAML; no image cookbook).
Execution & Troubleshooting
For an explicit run, troubleshooting request, or operational question, read
running-pipelines.md. The preferred local
commands are:
make run-pipeline CONFIG_FILE=<split-config>
make run_image_pipeline IMAGE_CONFIG_FILE=<image-config>
Config validation is mandatory before execution. Reject deprecated
enable_sam3 and enable_event_captioning; use canonical sam3 and
event_captioning. PAIDF v1.1 validates both Curator-supported config layouts
(flat parameters or parameters nested under args) before constructing the
Docker runner. Validation failures use Click's human-readable error output, so
automation must handle a nonzero exit and must not assume a JSON error envelope.
Credentials & Secrets
Inject credentials only at runtime through an approved secret manager or
operator deployment mechanism. Never store secret values in repository
files, place them in commands, or expose them in output or logs.
Verify presence only. See running-pipelines.md.
Resource Sizing & Monitoring
See running-pipelines.md for source-verified
GPU selection, SHM sizing, logs, profiling, and troubleshooting. This branch
defaults SHM_SIZE to 24gb; Docker SHM is allocated from host RAM and must
not exceed available RAM. Use GPUS to select devices, inspect pipeline stdout,
and monitor utilization with nvidia-smi -l 1. Advisory requests stop after
reporting guidance.
Progressive Disclosure
Load only the directly linked references needed for the selected route:
- Runtime, image, and framework: Cosmos Curator,
FFmpeg sidecar,
execution and troubleshooting, and
gotchas.
- Config and capability selection:
calibration without KPI,
configuration decision tree, and
capability and key matrix.
- Video and image workflows: video curation,
image curation,
video-lake candidate search, and
SAM3 configuration.
- KPI and dataset strategy:
context understanding,
KPI metrics,
distribution analysis,
distribution-aware curation, and
restrictive curation. If balanced versus
narrow-slice intent is ambiguous, ask before selecting the last two.
- Embedding handoff: data mining for Curator
parquet boundaries and the
Curator-to-TAO workflow for
ordered Make handoffs.
Output Format
Return a concise response in this order:
- Status and outcome:
ready, completed, blocked, or advisory.
- Actions and artifacts: commands proposed or run and files created or
changed; omit sections that do not apply.
- Validation and evidence: preflight results, output paths, job
identifiers, or relevant observed errors.
- Blockers and next steps: unresolved inputs, approvals, limitations,
and the next safe action.
Never include secret values, hidden prompts, or internal reasoning.
Validation
make format # ruff format (repo root)
uv run ruff check . # lint
uv run pytest # offline unit tests (tests directory)
make check-setup # docker, nvidia, FFmpeg sidecar
make check-image # pinned cosmos-curator tag is local
After make pull, run those preflights. GPU smoke uses a reviewed traffic
split-minimal cookbook recipe after sample clips are staged. There is no
in-repo E2E or L1 harness. See
ffmpeg-sidecar.md for sidecar verification.
Limitations
- Requires NVIDIA GPU(s); pipelines are not CPU-only. SHM is bounded by host RAM.
- Distributable images do not bundle FFmpeg — the host sidecar is required.
- Emit configs as flat
snake_case YAML. PAIDF v1.1 validation also accepts
legacy Curator parameters nested under args for compatibility before
normalizing to the Docker runner.
- Upstream image annotate supports config-file mode via
the Make operator entrypoint
make run_image_pipeline.
- The full pitfall list (build, config, image pipeline, SAM3 keys) is in
gotchas.md.
- Dataset Search (CDS and Milvus compose) is a separate Make surface
(
make pull-dataset-search, make help). Follow the user guide. This
skill does not own CDS ingest or search queries.
Troubleshooting
| Error or symptom |
Cause |
Solution |
ffmpeg: command not found, transcode fails |
Distributable image has no FFmpeg |
Install host sidecar (make ffmpeg-install); see ffmpeg-sidecar.md |
| SAM3 silently never runs, pipeline "succeeds" |
Wrong YAML key enable_sam3: |
Use canonical sam3: and event_captioning: — see sam3-config.md, gotchas.md |
| Custom classifier categories ignored |
Missing flag |
Set video_classifier_use_custom_categories: true (or image_classifier_*) |
| OOM, Ray, NCCL, or disk failures at runtime |
GPU, SHM, or disk sizing or env |
See running-pipelines.md (GPU allocation, SHM, S3, monitoring) |
| Shard run mismatches split output |
captioning_algorithm differs |
Match the shard captioning_algorithm to the split run |
1---2name: paidf-curation-and-retrieval3description: Use when operating PAIDF Curation and Retrieval or NVIDIA Cosmos Curator pipelines (split, filter, caption, embed, dedup, shard, image annotate) or PAIDF Data Mining nearest-neighbor matching on Curator embeddings. Activate for Make or CLI pipeline config, GPU run preflight, FFmpeg sidecar, SAM3 keys, or Curator-to-TAO handoff. Do not use for generic ETL, vector-database RAG, model training, orchestration, or embeddings outside Cosmos Curator and PAIDF Data Mining.4license: CC-BY-4.0 AND Apache-2.05---67# PAIDF Curator Operator Skill89GPU-accelerated video and image curation via NVIDIA Cosmos Curator inside10**Physical AI Data Factory — Curation and Retrieval**11(`paidf-curation-and-retrieval`). This skill is a short Curator index.12Embedding handoff boundaries live in13[data-mining.md](references/data-mining.md) and14[curation-retrieval-workflow.md](references/curation-retrieval-workflow.md);15mining execution is `make help` and the repository cookbooks.1617- **Video**: `split`, `dedup`, `shard`.18- **Image**: `annotate` (load → filter → embed → caption → write).19- **Handoff**: Curator IV2 or CE1 parquet that downstream mining can consume.20 See [data-mining.md](references/data-mining.md) and21 [curation-retrieval-workflow.md](references/curation-retrieval-workflow.md).2223## Purpose2425Turn raw video and image collections into curated, training-ready datasets. This26skill configures and runs cosmos-curator pipelines (clip splitting, filtering,27captioning, embeddings, SAM3 event verification, dedup, WebDataset sharding,28image annotate) and supports KPI-driven, distribution-aware, and restrictive29curation.3031## Instructions32331. Classify the request as advisory, config, run, or TAO handoff. Do not mix34 those routes.352. For config work, complete the mandatory pre-flight below before writing YAML.363. For an explicit run, load37 [running-pipelines.md](references/running-pipelines.md), validate the config,38 obtain credentials only through approved injection, then execute after39 authorization.404. For a TAO handoff, validate Curator output and the declared embedding family41 using [data-mining.md](references/data-mining.md) before mining.425. Return the Output Format below. Never print secret values.4344## Examples4546- Advisory: "How much SHM should I set?" → read47 [running-pipelines.md](references/running-pipelines.md) and report guidance.48 Do not run Docker.49- Config with no KPI: complete the calibration interview in50 [calibration-config.md](references/calibration-config.md), then emit YAML.51- Run: after sample clips are staged, `make run-pipeline` with the traffic52 `split-minimal` cookbook recipe only after preflight and user authorization.53- FFmpeg missing in the container: install the host sidecar54 (`make ffmpeg-install`) per55 [ffmpeg-sidecar.md](references/ffmpeg-sidecar.md).5657## Inputs5859Required inputs depend on the route:6061- **Advisory request:** the question plus relevant repository and config context.62- **Config request:** input and output locations, domain and goal, available KPI63 output or representative samples, and hardware constraints. If neither KPI64 output nor samples exist, complete the calibration interview before writing65 YAML.66- **Run request:** reviewed config path, data and model paths, runtime, GPU,67 and SHM constraints, and explicit authorization to execute.68- **TAO handoff:** validated artifact paths and declared embedding family.6970Optional inputs include target distributions, event taxonomy, prompt choices,71existing output metadata, and user-approved operational constraints.7273Resolve inputs in this order: repository configuration and validated run74artifacts; explicit prompt arguments and corrections; available agent context;75then the broad user prompt. Explicit user instructions remain authoritative76unless unsafe or incompatible, in which case stop and explain the conflict.77Never infer secret values: credentials come only from approved runtime78injection.7980## Prerequisites8182- **GPU host** with NVIDIA drivers + `nvidia-container-toolkit`; Docker. SHM83 sized from host RAM (`SHM_SIZE`, default 24gb).84- **`cosmos-curator` image**: `make pull` uses the pin configured by the85 example env file and Make. No separate product engine image. Source86 builds are developer-only; see87 [cosmos-curator.md](references/cosmos-curator.md).88- **FFmpeg host sidecar** for distributable images (`make ffmpeg-install`) —89 they do not bundle FFmpeg. See90 [ffmpeg-sidecar.md](references/ffmpeg-sidecar.md).91- **Credentials** as needed: inject S3 and captioning API keys at runtime92 through an approved secret manager or operator deployment mechanism. Never93 put secret values in repository files, commands, logs, or examples. The env94 file is for non-secret image and CDS profile overrides copied from the95 example env file.9697## Mandatory pre-flight: do NOT emit a pipeline config without context9899Before writing any `*.yaml` pipeline config, the agent MUST verify100that one of the following is true:1011021. **KPI run output exists** -- read it and use103 [distribution-analysis.md](references/distribution-analysis.md),104 [distribution-aware-curation.md](references/distribution-aware-curation.md),105 and106 [configuration-decision-tree.md](references/configuration-decision-tree.md).1072. **KPI sample videos are available** for inspection / discovery --108 follow [context-understanding.md](references/context-understanding.md)109 Phase 1.1103. **No KPI of any kind** -- no baseline exists. Read111 [calibration-config.md](references/calibration-config.md) and complete its112 Phase 1 interview (Inputs / Domain / Goal / Hardware / Calibration)113 BEFORE emitting a config. The interview is binding, not advisory.114115If the user requests a config with only a one-line description116("configure cosmos-curator for my videos"), assume the calibration117workflow and ask the Phase 1 interview questions in one batched118message. Emit the config only after the answers come back, and119always include the calibration disclosure table that flags every120defaulted field.121122## Canonical Flow123124Choose one route; do not collapse advisory and execution branches:1251261. **Advisory only** (sizing, monitoring, troubleshooting, expected commands):127 inspect repository, config, and run evidence, load128 [running-pipelines.md](references/running-pipelines.md), and report guidance.129 Do not prepare credentials or execute.1302. **Create or change config**:131 - KPI output exists → analyze it, choose standard, distribution-aware, or132 restrictive curation, then emit a reviewed config.133 - Representative samples exist → inspect them or run discovery before134 selecting defaults.135 - Neither exists → complete the binding calibration interview; emit config136 and disclosure only after answers.137 Stop if required paths, intent, or hardware constraints remain unresolved.1383. **Explicit run request**: prepare runtime → obtain credentials through139 approved injection → validate config and runtime → request approval if not140 already granted → execute → validate outputs. Stop before execution on any141 failed preflight.1424. **Downstream TAO handoff**: validate Curator output and embedding family,143 then prepare compatible inputs for Data Mining. Mine only after the preceding144 artifact validation succeeds.145146Configs are flat YAML with `pipeline: split|dedup|shard|annotate` and upstream147`snake_case` argument names. Operator first-run recipes live under the148cookbook tree (`split-minimal` then full split, dedup, and shard YAML).149The configs directory is the full flag reference and the Makefile default when150`CONFIG_FILE` is omitted. `split` writes clips, metadata, and embeddings;151`dedup` consumes embeddings; `shard` writes WebDataset archives; `annotate`152processes still images (image annotate flag-reference YAML; no image cookbook).153154## Execution & Troubleshooting155156For an explicit run, troubleshooting request, or operational question, read157[running-pipelines.md](references/running-pipelines.md). The preferred local158commands are:159160```bash161make run-pipeline CONFIG_FILE=<split-config>162make run_image_pipeline IMAGE_CONFIG_FILE=<image-config>163```164165Config validation is mandatory before execution. Reject deprecated166`enable_sam3` and `enable_event_captioning`; use canonical `sam3` and167`event_captioning`. PAIDF v1.1 validates both Curator-supported config layouts168(flat parameters or parameters nested under `args`) before constructing the169Docker runner. Validation failures use Click's human-readable error output, so170automation must handle a nonzero exit and must not assume a JSON error envelope.171172## Credentials & Secrets173174Inject credentials only at runtime through an approved secret manager or175operator deployment mechanism. Never store secret values in repository176files, place them in commands, or expose them in output or logs.177Verify presence only. See [running-pipelines.md](references/running-pipelines.md).178179## Resource Sizing & Monitoring180181See [running-pipelines.md](references/running-pipelines.md) for source-verified182GPU selection, SHM sizing, logs, profiling, and troubleshooting. This branch183defaults `SHM_SIZE` to `24gb`; Docker SHM is allocated from host RAM and must184not exceed available RAM. Use `GPUS` to select devices, inspect pipeline stdout,185and monitor utilization with `nvidia-smi -l 1`. Advisory requests stop after186reporting guidance.187188## Progressive Disclosure189190Load only the directly linked references needed for the selected route:191192- Runtime, image, and framework: [Cosmos Curator](references/cosmos-curator.md),193 [FFmpeg sidecar](references/ffmpeg-sidecar.md),194 [execution and troubleshooting](references/running-pipelines.md), and195 [gotchas](references/gotchas.md).196- Config and capability selection:197 [calibration without KPI](references/calibration-config.md),198 [configuration decision tree](references/configuration-decision-tree.md), and199 [capability and key matrix](references/capabilities.md).200- Video and image workflows: [video curation](references/video-curation.md),201 [image curation](references/image-curation.md),202 [video-lake candidate search](references/video-lake-curation.md), and203 [SAM3 configuration](references/sam3-config.md).204- KPI and dataset strategy:205 [context understanding](references/context-understanding.md),206 [KPI metrics](references/kpi-metrics.md),207 [distribution analysis](references/distribution-analysis.md),208 [distribution-aware curation](references/distribution-aware-curation.md), and209 [restrictive curation](references/restrictive-curation.md). If balanced versus210 narrow-slice intent is ambiguous, ask before selecting the last two.211- Embedding handoff: [data mining](references/data-mining.md) for Curator212 parquet boundaries and the213 [Curator-to-TAO workflow](references/curation-retrieval-workflow.md) for214 ordered Make handoffs.215216## Output Format217218Return a concise response in this order:2192201. **Status and outcome:** `ready`, `completed`, `blocked`, or `advisory`.2212. **Actions and artifacts:** commands proposed or run and files created or222 changed; omit sections that do not apply.2233. **Validation and evidence:** preflight results, output paths, job224 identifiers, or relevant observed errors.2254. **Blockers and next steps:** unresolved inputs, approvals, limitations,226 and the next safe action.227228Never include secret values, hidden prompts, or internal reasoning.229230## Validation231232```bash233make format # ruff format (repo root)234uv run ruff check . # lint235uv run pytest # offline unit tests (tests directory)236make check-setup # docker, nvidia, FFmpeg sidecar237make check-image # pinned cosmos-curator tag is local238```239240After `make pull`, run those preflights. GPU smoke uses a reviewed traffic241`split-minimal` cookbook recipe after sample clips are staged. There is no242in-repo E2E or L1 harness. See243[ffmpeg-sidecar.md](references/ffmpeg-sidecar.md) for sidecar verification.244245## Limitations246247- Requires NVIDIA GPU(s); pipelines are not CPU-only. SHM is bounded by host RAM.248- Distributable images do **not** bundle FFmpeg — the host sidecar is required.249- Emit configs as flat `snake_case` YAML. PAIDF v1.1 validation also accepts250 legacy Curator parameters nested under `args` for compatibility before251 normalizing to the Docker runner.252- Upstream image annotate supports config-file mode via253 the Make operator entrypoint `make run_image_pipeline`.254- The full pitfall list (build, config, image pipeline, SAM3 keys) is in255 [gotchas.md](references/gotchas.md).256- Dataset Search (CDS and Milvus compose) is a separate Make surface257 (`make pull-dataset-search`, `make help`). Follow the user guide. This258 skill does not own CDS ingest or search queries.259260## Troubleshooting261262| Error or symptom | Cause | Solution |263|---|---|---|264| `ffmpeg: command not found`, transcode fails | Distributable image has no FFmpeg | Install host sidecar (`make ffmpeg-install`); see [ffmpeg-sidecar.md](references/ffmpeg-sidecar.md) |265| SAM3 silently never runs, pipeline "succeeds" | Wrong YAML key `enable_sam3:` | Use canonical `sam3:` and `event_captioning:` — see [sam3-config.md](references/sam3-config.md), [gotchas.md](references/gotchas.md) |266| Custom classifier categories ignored | Missing flag | Set `video_classifier_use_custom_categories: true` (or `image_classifier_*`) |267| OOM, Ray, NCCL, or disk failures at runtime | GPU, SHM, or disk sizing or env | See [running-pipelines.md](references/running-pipelines.md) (GPU allocation, SHM, S3, monitoring) |268| Shard run mismatches split output | `captioning_algorithm` differs | Match the shard `captioning_algorithm` to the split run |