[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71QBXMK18HBN0B3BZGFT6H9":3,"skill-same:01M71QBXMK18HBN0B3BZGFT6H9":122},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":53,"commitSha":54,"skillDirectory":55,"forksCount":14,"repositoryHtmlUrl":56,"repositoryHomepageUrl":57,"ownerHtmlUrl":58,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":59,"install":60,"resources":73},"01M71QBXMK18HBN0B3BZGFT6H9","vss-generate-video-calibration",null,"Use to run AutoMagicCalib on local MP4s, RTSP, or the bundled sample dataset, and to deploy vss-auto-calibration when needed. Do not use for non-AMC calibration or runtime analytics.","pattanation\u002FNorvik","pattanation","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F235419268?v=4","01M71M5THHYYB15ME8R2E4FCZG","Patta","01M71M5TJM1NDM992M8PDKYR2K",0,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvss-generate-video-calibration\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"vss generate video calibration","generate","generate video","calibration","Video","run","operational","github","sample","dataset","when","Blueprint","use","auto","local","search","runtime","for","NVIDIA","do","2026-11-10 13:02:02",false,"---\nname: vss-generate-video-calibration\ndescription: Use to run AutoMagicCalib on local MP4s, RTSP, or the bundled sample dataset, and to deploy vss-auto-calibration when needed. Do not use for non-AMC calibration or runtime analytics.\nlicense: Apache-2.0\nmetadata:\n  version: \"3.2.0\"\n  github-url: \"https:\u002F\u002Fgithub.com\u002FNVIDIA-AI-Blueprints\u002Fvideo-search-and-summarization\"\n  tags: \"nvidia blueprint operational\"\n---\n## Purpose\n\nRun AutoMagicCalib end-to-end on local files, RTSP streams, or the bundled sample dataset and (when needed) deploy the AMC microservice.\n\n## Instructions\n\nFollow the routing tables and step-by-step workflows below. Each section that ends in *workflow*, *quick start*, or *flow* is intended to be executed top-to-bottom. Detailed reference material lives in `references\u002F`; load only the reference needed for the selected input mode.\n\n## Examples\n\nWorked end-to-end examples are kept under `evals\u002F` (each `*.json` manifest contains a runnable scenario) and inline in the per-workflow `curl` blocks below. Run a Tier-3 evaluation with `nv-base validate \u003Cthis-skill-dir> --agent-eval` to replay them.\n\n## Limitations\n\n- Requires the matching VSS profile \u002F microservice to be deployed and reachable from the caller.\n- NGC-hosted models and NIMs may be subject to rate-limits, GPU memory requirements, and license restrictions.\n- Concurrency, GPU memory, and storage limits depend on the host hardware and the profile's compose file.\n\n## Troubleshooting\n\n- **Error**: REST call returns connection refused. **Cause**: target microservice not running. **Solution**: probe `\u002Fdocs` or `\u002Fhealth`; redeploy via `vss-deploy-profile` or the matching `vss-deploy-*` skill.\n- **Error**: HTTP 401\u002F403 from NGC pulls. **Cause**: missing\u002Fexpired `NGC_CLI_API_KEY`. **Solution**: `docker login nvcr.io` and re-export the key before retrying.\n- **Error**: container OOM or model fails to load. **Cause**: insufficient GPU memory for the selected profile. **Solution**: switch to a smaller variant or free GPUs via `docker compose down`.\n\n# VSS Generate Video Calibration\n\nRun AutoMagicCalib over one of three input sources and drive the calibration through the microservice REST API. The input-resolution work differs per source; everything from `verify_project` onward is identical and lives in this file. Pick the right input-mode reference and pair it with the [Shared Calibration Tail](#shared-calibration-tail) below.\n\nShared helper references are loaded only when needed:\n- Read [`references\u002Fcommon-steps.md`](references\u002Fcommon-steps.md) when a mode reference needs the shared `create_project`, video-upload, or handoff snippets.\n- Read [`references\u002Fcalibration-tail.md`](references\u002Fcalibration-tail.md) when you need the reusable Python implementation of the verify → calibrate → poll → results tail.\n\n## Input Routing\n\nMatch the user's request to a mode, then load that mode's reference for input collection, mode-specific API calls, and the full Python script.\n\n| User says \u002F has | Mode | Reference |\n|---|---|---|\n| \"launch AMC\" \u002F \"deploy auto-calibration\" \u002F \"set up auto-magic-calib\" \u002F \"start AMC microservice\" | `deploy` | [`references\u002Fdeploy-auto-calibration-service.md`](references\u002Fdeploy-auto-calibration-service.md) |\n| \"calibrate my videos\" \u002F \"calibrate from video files\" \u002F local `cam_*.mp4` files | `videos` | [`references\u002Fvideos.md`](references\u002Fvideos.md) |\n| \"calibrate RTSP streams\" \u002F \"calibrate from live cameras\" \u002F live RTSP URLs | `rtsp` | [`references\u002Frtsp.md`](references\u002Frtsp.md) |\n| \"test sample dataset\" \u002F \"verify AMC install\" \u002F \"launch and test\" | `sample-dataset` | [`references\u002Fsample-dataset.md`](references\u002Fsample-dataset.md) |\n\n**Disambiguation rule:** if the user is asking to launch \u002F deploy \u002F set up AMC (no calibration verb) → `deploy`. If they provide RTSP URLs → `rtsp`. If they mention local files \u002F a videos directory → `videos`. If they ask to verify install or test the bundled sample → `sample-dataset`. Combined intents (e.g. \"launch AMC and calibrate my videos\") → walk `deploy` first, then the calibration mode. When ambiguous, ask via `AskUserQuestion`.\n\n## Prerequisites (shared across calibration modes)\n\n- AMC microservice + UI running. If not, walk [`references\u002Fdeploy-auto-calibration-service.md`](references\u002Fdeploy-auto-calibration-service.md) first.\n- Microservice reachable at `http:\u002F\u002F\u003CHOST_IP>:${VSS_AUTO_CALIBRATION_PORT:-8010}\u002Fv1\u002Fready` → `{\"code\":0,...}`.\n- Projects directory writable by the container user. If you didn't just deploy (so Step 5 of the deploy reference hasn't run), confirm the write test in [`references\u002Fdeploy-auto-calibration-service.md` § Step 5](references\u002Fdeploy-auto-calibration-service.md#step-5--confirm-the-projects-directory-is-writable) — otherwise the first `create_project` returns `[Errno 13] Permission denied`.\n- Python 3 with `requests` installed (each input-mode reference includes a self-healing venv fallback for direct runs).\n\nMode-specific prerequisites (VIOS for `rtsp`, sample zip for `sample-dataset`) live in the respective references.\n\n## Shared Calibration Tail\n\nThe verify → calibrate → poll → results sequence is identical regardless of input mode. After the mode-specific reference has uploaded videos \u002F ingested RTSP clips \u002F uploaded the bundled sample, run this tail. Use [`references\u002Fcalibration-tail.md`](references\u002Fcalibration-tail.md) for the shared Python snippet.\n\n### Step A — Verify Project\n\n```\nPOST \u002Fv1\u002Fverify_project\u002F\u003Cproject_id>\n```\n\nResponse: `{\"project_state\": \"READY\"}` — must be `READY` before calibrating. If not READY, re-check that videos + alignment + layout are present (either via API or via UI manual alignment).\n\n### Step B — Start Calibration\n\n**Confirm the plan before calibrating.** Whether the settings file and detector were auto-detected or asked, present a short summary and confirm via `AskUserQuestion` before the `POST \u002Fcalibrate`. The resolved values are the defaults, so confirming is one click — but the user can switch the detector or skip an auto-detected settings file. Summarize:\n\n- **Detector** — `resnet` or `transformer` (the value to be sent).\n- **Calibration settings** — the file being applied (path), or default parameters (with the option to tune them in the UI first — see below).\n- **Optional overrides** — ground-truth zip and focal lengths, if any.\n\nThe sample-dataset install-check run uses a fixed `resnet` and can proceed without this confirmation.\n\n```\nPOST \u002Fv1\u002Fcalibrate\u002F\u003Cproject_id>\nContent-Type: application\u002Fjson\n\n{\"detector_type\": \"resnet\"}   # or \"transformer\"\n```\n\n`detector_type` is a separate `\u002Fcalibrate` parameter — **not** consumed by `\u002Fv1\u002Fconfig\u002F\u003Cid>`. If the user provided a calibration settings file, parse it for `\"detector\"` \u002F `\"detector_type\"` and use that value. If the file doesn't specify one, the default (`resnet`) is the value shown in the confirmation above — the user can switch it there before calibrating. If there's no settings file at all, ask the user via `AskUserQuestion`:\n\n- `resnet` — default, fast.\n- `transformer` — slower, better under heavy occlusion.\n\nUI Step 3 (Parameters) does NOT cover detector choice; never assume the user picked one in the UI.\n\n**Also when there's no settings file, ask whether to tune the calibration parameters first** (`AskUserQuestion`):\n\n- **Proceed with the default parameters** — well-suited to typical warehouse scenes; recommended unless the user has specific tuning in mind.\n- **Adjust parameters in the UI first** — open the project, go to Step 3: Parameters, change values, and click Save; then continue.\n\nWait for the user's choice — and, if they choose to tune, for them to confirm they've Saved — before calling `\u002Fcalibrate`.\n\n### Step C — Poll for Completion\n\n```\nGET \u002Fv1\u002Fget_project_info\u002F\u003Cproject_id>\n```\n\nPoll every 10 s. `project_info.project_state`:\n\n| State | Meaning |\n|---|---|\n| `RUNNING` | Calibration in progress |\n| `COMPLETED` | Finished |\n| `ERROR` | Failed — pull log via `GET \u002Fv1\u002Famc\u002Fcalibrate\u002F\u003Cid>\u002Flog` |\n\nWhen calibration starts, surface the project ID, the UI URL (`http:\u002F\u002F\u003CHOST_IP>:${VSS_AUTO_CALIBRATION_UI_PORT:-5000}`), and the log endpoint so the user can watch progress while the run proceeds. During `RUNNING`, emit a progress line at least once a minute with elapsed time so a long run doesn't look stalled. On `ERROR`, fetch and show the last lines of `GET \u002Fv1\u002Famc\u002Fcalibrate\u002F\u003Cid>\u002Flog` before stopping. Live logs can also be streamed via `GET \u002Fv1\u002Fcalibrate\u002F\u003Cproject_id>\u002Flog\u002F\u003Ctype>\u002Fstream`.\n\nTypical time: **10–60 min** (your-own videos), **10–30 min** (bundled sample).\n\n### Step D — Results\n\n```\nGET \u002Fv1\u002Fget_project_info\u002F\u003Cproject_id>                    # project state\nGET \u002Fv1\u002Fresult\u002F\u003Cproject_id>\u002Fevaluation_statistics        # only if GT uploaded\nGET \u002Fv1\u002Fresult\u002F\u003Cproject_id>\u002Foverlay_image                # visual overlay (PNG)\nGET \u002Fv1\u002Famc\u002Fcalibrate\u002F\u003Cproject_id>\u002Flog                   # calibration log\n```\n\nEvaluation response includes `Average L2 distance(m)` and `Average reprojection error 0(px)`. Evaluation metrics are produced **only when a ground-truth `GT.zip` was uploaded** — a missing `evaluation_statistics` result is normal otherwise and is not the end of result reporting.\n\nAfter `COMPLETED`, always give the user a way to review the result for that exact project, regardless of whether metrics exist:\n\n- **UI** — `http:\u002F\u002F\u003CHOST_IP>:${VSS_AUTO_CALIBRATION_UI_PORT:-5000}`; open the project, then the Results page to view the overlay.\n- **Overlay image on disk** — `${VSS_APPS_DIR}\u002Fservices\u002Fauto-calibration\u002Fprojects\u002Fproject_\u003Cid>\u002Foutput\u002Fmulti_view_results\u002FBA_output\u002Fresults_ba_scaled_world\u002Foverlay_img_*.png` (single-camera projects use `output\u002Fsingle_view_results\u002Fcam_00\u002Fverification_map_overlay.png`).\n- **Project files** — `${VSS_APPS_DIR}\u002Fservices\u002Fauto-calibration\u002Fprojects\u002Fproject_\u003Cid>\u002F`.\n\n### Step E — VGGT Refinement\n\nAfter the AMC run completes, always check `vggt_state` in project info. VGGT model staging is optional during setup and must not block the AMC result, but post-AMC handling follows the state:\n\n- If `vggt_state == \"READY\"` and the user explicitly requested VGGT refinement or staged VGGT during this setup flow, run VGGT refinement without asking again.\n- If `vggt_state == \"READY\"` but VGGT was already staged before this request and the user has not asked for VGGT-refined output, ask via `AskUserQuestion` whether to run refinement before starting it.\n- If VGGT is not ready, skip refinement and mention that VGGT refinement is available after staging the model (see [`references\u002Fdeploy-auto-calibration-service.md`](references\u002Fdeploy-auto-calibration-service.md) Step 2).\n\n```\nPOST \u002Fv1\u002Fvggt\u002Fcalibrate\u002F\u003Cproject_id>\nGET  \u002Fv1\u002Fget_project_info\u002F\u003Cproject_id>                    # poll vggt_state\nGET  \u002Fv1\u002Fvggt_results\u002F\u003Cproject_id>\u002Fevaluation_statistics  # VGGT metrics\n```\n\n## Settings File + Detector Pattern\n\nOptional across all three modes. When the user provides a JSON settings file (typically exported from UI Step 3 Download), POST it verbatim:\n\n```\nPOST \u002Fv1\u002Fconfig\u002F\u003Cproject_id>\nContent-Type: application\u002Fjson\n\n\u003Cfile contents, posted as-is>\n```\n\nThe file replaces what the user would otherwise tune in UI Step 3 (rectification, bundle-adjustment, evaluation knobs, detector, …). After a successful POST, **also** parse the file for `\"detector\"` \u002F `\"detector_type\"` — if it's `\"resnet\"` or `\"transformer\"`, use that value for the `\u002Fcalibrate` call in Step B (detector is a separate API parameter, not consumed by `\u002Fconfig`).\n\nNon-2xx is surfaced — do not silently fall back. Skip this call entirely if the user chose the UI-fallback path.\n\n## UI Fallback Pattern\n\nWhen alignment \u002F layout files aren't on disk, direct the user to the appropriate AMC UI step:\n\n- **Settings missing** → \"Open UI project `\u003Cproject_id>`, go to **Step 3: Parameters**, tune via the settings dialog (or accept defaults), click Save.\" **Also**: before the `\u002Fcalibrate` call, ask the user via `AskUserQuestion` whether to use the `resnet` or `transformer` detector — Step 3 doesn't cover detector choice.\n- **Layout missing** → \"Open UI project `\u003Cproject_id>`, go to **Step 2: Video Configuration**, upload `layout.png` only (do NOT re-upload videos — they're already attached via API\u002FRTSP), click Save.\"\n- **Alignment missing** → \"Open UI project `\u003Cproject_id>`, go to **Step 4: Alignment**, either upload `alignment_data.json` or mark correspondence points on the layout, click Save.\"\n\nWait for user confirmation. For alignment\u002Flayout, verify on disk before continuing:\n\n```bash\n# Project state lives under $VSS_APPS_DIR\u002Fservices\u002Fauto-calibration\u002Fprojects\n# (the path bind-mounted into the MS container in\n#  deploy\u002Fdocker\u002Fservices\u002Fauto-calibration\u002Fms\u002Fcompose.yml).\nHOST_PROJECTS=\"${VSS_APPS_DIR}\u002Fservices\u002Fauto-calibration\u002Fprojects\"\n\nls \"$HOST_PROJECTS\u002Fproject_\u003Cproject_id>\u002Fmanual_adjustment\u002F\"\n# Expected: alignment_data.json, layout.png\n```\n\n## Success Criteria\n\n- `project_state == \"COMPLETED\"` after polling.\n- If manual alignment was used: `${VSS_APPS_DIR}\u002Fservices\u002Fauto-calibration\u002Fprojects\u002Fproject_\u003Cid>\u002Fmanual_adjustment\u002F` contains `alignment_data.json` + `layout.png`.\n- If GT was uploaded: evaluation returns typical thresholds (`Average L2 distance(m)` \u003C 1.5, `Average reprojection error 0(px)` \u003C 5 for your data; \u003C 10 for the bundled sample).\n- No `ERROR` state.\n\n## Key Output Files\n\nUnder `${VSS_APPS_DIR}\u002Fservices\u002Fauto-calibration\u002Fprojects\u002Fproject_\u003Cproject_id>\u002F`:\n\n```\nproject_\u003Cproject_id>\u002F\n├── manual_adjustment\u002F\n│   ├── alignment_data.json\n│   └── layout.png\n├── output\u002F\n│   ├── single_view_results\u002Fcam_XX\u002F\n│   │   ├── camInfo_hyper_XX.yaml\n│   │   └── trajDump_Stream_0_3d.txt\n│   ├── multi_view_results\u002FBA_output\u002Fresults_ba\u002F\n│   │   ├── initial\u002FcamInfo_XX.yaml\n│   │   └── refined\u002FcamInfo_XX.yaml          # ← final calibration\n│   └── multi_view_results\u002FBA_output\u002Fresults_ba_scaled_world\u002F\n│       └── overlay_img_XX.png               # ← visual overlay for review\n└── calibration.log\n```\n\n## Cross-cutting Troubleshooting\n\nMode-specific issues live in each reference's own troubleshooting table.\n\n| Issue | Fix |\n|---|---|\n| `verify_project` state not `READY` | Confirm videos uploaded\u002Fingested and alignment + layout are present (either via API or via UI manual alignment). Mode-specific upload steps in the reference. |\n| Manual alignment files missing after UI step | User didn't click Save; also verify `${VSS_APPS_DIR}\u002Fservices\u002Fauto-calibration\u002Fprojects\u002Fproject_\u003Cid>\u002Fmanual_adjustment\u002F` exists. |\n| Calibration stuck `RUNNING` > 90 min | `GET \u002Fv1\u002Famc\u002Fcalibrate\u002F\u003Cid>\u002Flog` — usually insufficient tracklets (scene too static). See \"Custom Dataset\" guidelines in root `README.md`. |\n| Immediate `ERROR` state | Check video naming: must be `cam_00.mp4`, `cam_01.mp4`, … contiguous (videos mode) \u002F camera_name labels (RTSP mode). |\n| Low L2 but high reprojection | Provide explicit `focal_length` override during input upload (see videos \u002F rtsp references). |\n| VGGT `INIT`, never `READY` | VGGT model not loaded — see [`references\u002Fdeploy-auto-calibration-service.md`](references\u002Fdeploy-auto-calibration-service.md) Step 2. |\n| Upload timeout | Large videos — bump `timeout=300` to e.g. `600` in the per-mode Python script. |\n| Port scan finds no backend | Backend not running — walk [`references\u002Fdeploy-auto-calibration-service.md`](references\u002Fdeploy-auto-calibration-service.md) first. |\n\n## For Downstream Skills — MV3DT Export\n\nDownstream consumers (e.g. a Multi-View 3D Tracking skill owned by another team) fetch the MV3DT-format calibration output directly from the microservice. This skill returns the `project_id`; the downstream skill calls:\n\n```\nGET \u002Fv1\u002Fresult\u002F{project_id}\u002Fmv3dt_result?result_type=amc\n# Response: application\u002Fzip — mv3dt_output.zip containing transforms.yml\n```\n\nFor VGGT-refined output (only available if VGGT ran to `COMPLETED`, see Step E):\n\n```\nGET \u002Fv1\u002Fresult\u002F{project_id}\u002Fmv3dt_result?result_type=vggt\n# Response: application\u002Fzip — vggt_mv3dt_output.zip\n```\n\nDownstream skill flow:\n1. Call this skill with the user's inputs; capture the printed `project_id`.\n2. Wait for the skill to return (it polls until `COMPLETED` internally).\n3. `GET \u002Fv1\u002Fresult\u002F{project_id}\u002Fmv3dt_result?result_type=amc` — save the ZIP locally.\n4. If VGGT also ran, optionally fetch `?result_type=vggt` for the refined MV3DT.\n\n## Related Skills\n\n- [`vss-manage-video-io-storage`](..\u002Fvss-manage-video-io-storage\u002FSKILL.md) — VIOS API skill; only the `rtsp` calibration mode depends on VIOS being reachable.\n\nRoot `README.md` \"Custom Dataset\" and \"Calibration Workflow (UI)\" sections document input-video guidelines and the UI-driven alternative to this API flow.\n\nbump:1\n","## Purpose\n\nRun AutoMagicCalib end-to-end on local files, RTSP streams, or the bundled sample dataset and (when needed) deploy the AMC microservice.\n\n## Instructions\n\nFollow the routing tables and step-by-step workflows below. Each section that ends in *workflow*, *quick start*, or *flow* is intended to be executed top-to-bottom. Detailed reference material lives in `references\u002F`; load only the reference needed for the selected input mode.\n\n## Examples\n\nWorked end-to-end examples are kept under `evals\u002F` (each `*.json` manifest contains a runnable scenario) and inline in the per-workflow `curl` blocks below. Run a Tier-3 evaluation with `nv-base validate \u003Cthis-skill-dir> --agent-eval` to replay them.\n\n## Limitations\n\n- Requires the matching VSS profile \u002F microservice to be deployed and reachable from the caller.\n- NGC-hosted models and NIMs may be subject to rate-limits, GPU memory requirements, and license restrictions.\n- Concurrency, GPU memory, and storage limits depend on the host hardware and the profile's compose file.\n\n## Troubleshooting\n\n- **Error**: REST call returns connection refused. **Cause**: target microservice not running. **Solution**: probe `\u002Fdocs` or `\u002Fhealth`; redeploy via `vss-deploy-profile` or the matching `vss-deploy-*` skill.\n- **Error**: HTTP 401\u002F403 from NGC pulls. **Cause**: missing\u002Fexpired `NGC_CLI_API_KEY`. **Solution**: `docker login nvcr.io` and re-export the key before retrying.\n- **Error**: container OOM or model fails to load. **Cause**: insufficient GPU memory for the selected profile. **Solution**: switch to a smaller variant or free GPUs via `docker compose down`.\n\n# VSS Generate Video Calibration\n\nRun AutoMagicCalib over one of three input sources and drive the calibration through the microservice REST API. The input-resolution work differs per source; everything from `verify_project` onward is identical and lives in this file. Pick the right input-mode reference and pair it with the [Shared Calibration Tail](#shared-calibration-tail) below.\n\nShared helper references are loaded only when needed:\n- Read [`references\u002Fcommon-steps.md`](references\u002Fcommon-steps.md) when a mode reference needs the shared `create_project`, video-upload, or handoff snippets.\n- Read [`references\u002Fcalibration-tail.md`](references\u002Fcalibration-tail.md) when you need the reusable Python implementation of the verify → calibrate → poll → results tail.\n\n## Input Routing\n\nMatch the user's request to a mode, then load that mode's reference for input collection, mode-specific API calls, and the full Python script.\n\n| User says \u002F has | Mode | Reference |\n|---|---|---|\n| \"launch AMC\" \u002F \"deploy auto-calibration\" \u002F \"set up auto-magic-calib\" \u002F \"start AMC microservice\" | `deploy` | [`references\u002Fdeploy-auto-calibration-service.md`](references\u002Fdeploy-auto-calibration-service.md) |\n| \"calibrate my videos\" \u002F \"calibrate from video files\" \u002F local `cam_*.mp4` files | `videos` | [`references\u002Fvideos.md`](references\u002Fvideos.md) |\n| \"calibrate RTSP streams\" \u002F \"calibrate from live cameras\" \u002F live RTSP URLs | `rtsp` | [`references\u002Frtsp.md`](references\u002Frtsp.md) |\n| \"test sample dataset\" \u002F \"verify AMC install\" \u002F \"launch and test\" | `sample-dataset` | [`references\u002Fsample-dataset.md`](references\u002Fsample-dataset.md) |\n\n**Disambiguation rule:** if the user is asking to launch \u002F deploy \u002F set up AMC (no calibration verb) → `deploy`. If they provide RTSP URLs → `rtsp`. If they mention local files \u002F a videos directory → `videos`. If they ask to verify install or test the bundled sample → `sample-dataset`. Combined intents (e.g. \"launch AMC and calibrate my videos\") → walk `deploy` first, then the calibration mode. When ambiguous, ask via `AskUserQuestion`.\n\n## Prerequisites (shared across calibration modes)\n\n- AMC microservice + UI running. If not, walk [`references\u002Fdeploy-auto-calibration-service.md`](references\u002Fdeploy-auto-calibration-service.md) first.\n- Microservice reachable at `http:\u002F\u002F\u003CHOST_IP>:${VSS_AUTO_CALIBRATION_PORT:-8010}\u002Fv1\u002Fready` → `{\"code\":0,...}`.\n- Projects directory writable by the container user. If you didn't just deploy (so Step 5 of the deploy reference hasn't run), confirm the write test in [`references\u002Fdeploy-auto-calibration-service.md` § Step 5](references\u002Fdeploy-auto-calibration-service.md#step-5--confirm-the-projects-directory-is-writable) — otherwise the first `create_project` returns `[Errno 13] Permission denied`.\n- Python 3 with `requests` installed (each input-mode reference includes a self-healing venv fallback for direct runs).\n\nMode-specific prerequisites (VIOS for `rtsp`, sample zip for `sample-dataset`) live in the respective references.\n\n## Shared Calibration Tail\n\nThe verify → calibrate → poll → results sequence is identical regardless of input mode. After the mode-specific reference has uploaded videos \u002F ingested RTSP clips \u002F uploaded the bundled sample, run this tail. Use [`references\u002Fcalibration-tail.md`](references\u002Fcalibration-tail.md) for the shared Python snippet.\n\n### Step A — Verify Project\n\n```\nPOST \u002Fv1\u002Fverify_project\u002F\u003Cproject_id>\n```\n\nResponse: `{\"project_state\": \"READY\"}` — must be `READY` before calibrating. If not READY, re-check that videos + alignment + layout are present (either via API or via UI manual alignment).\n\n### Step B — Start Calibration\n\n**Confirm the plan before calibrating.** Whether the settings file and detector were auto-detected or asked, present a short summary and confirm via `AskUserQuestion` before the `POST \u002Fcalibrate`. The resolved values are the defaults, so confirming is one click — but the user can switch the detector or skip an auto-detected settings file. Summarize:\n\n- **Detector** — `resnet` or `transformer` (the value to be sent).\n- **Calibration settings** — the file being applied (path), or default parameters (with the option to tune them in the UI first — see below).\n- **Optional overrides** — ground-truth zip and focal lengths, if any.\n\nThe sample-dataset install-check run uses a fixed `resnet` and can proceed without this confirmation.\n\n```\nPOST \u002Fv1\u002Fcalibrate\u002F\u003Cproject_id>\nContent-Type: application\u002Fjson\n\n{\"detector_type\": \"resnet\"}   # or \"transformer\"\n```\n\n`detector_type` is a separate `\u002Fcalibrate` parameter — **not** consumed by `\u002Fv1\u002Fconfig\u002F\u003Cid>`. If the user provided a calibration settings file, parse it for `\"detector\"` \u002F `\"detector_type\"` and use that value. If the file doesn't specify one, the default (`resnet`) is the value shown in the confirmation above — the user can switch it there before calibrating. If there's no settings file at all, ask the user via `AskUserQuestion`:\n\n- `resnet` — default, fast.\n- `transformer` — slower, better under heavy occlusion.\n\nUI Step 3 (Parameters) does NOT cover detector choice; never assume the user picked one in the UI.\n\n**Also when there's no settings file, ask whether to tune the calibration parameters first** (`AskUserQuestion`):\n\n- **Proceed with the default parameters** — well-suited to typical warehouse scenes; recommended unless the user has specific tuning in mind.\n- **Adjust parameters in the UI first** — open the project, go to Step 3: Parameters, change values, and click Save; then continue.\n\nWait for the user's choice — and, if they choose to tune, for them to confirm they've Saved — before calling `\u002Fcalibrate`.\n\n### Step C — Poll for Completion\n\n```\nGET \u002Fv1\u002Fget_project_info\u002F\u003Cproject_id>\n```\n\nPoll every 10 s. `project_info.project_state`:\n\n| State | Meaning |\n|---|---|\n| `RUNNING` | Calibration in progress |\n| `COMPLETED` | Finished |\n| `ERROR` | Failed — pull log via `GET \u002Fv1\u002Famc\u002Fcalibrate\u002F\u003Cid>\u002Flog` |\n\nWhen calibration starts, surface the project ID, the UI URL (`http:\u002F\u002F\u003CHOST_IP>:${VSS_AUTO_CALIBRATION_UI_PORT:-5000}`), and the log endpoint so the user can watch progress while the run proceeds. During `RUNNING`, emit a progress line at least once a minute with elapsed time so a long run doesn't look stalled. On `ERROR`, fetch and show the last lines of `GET \u002Fv1\u002Famc\u002Fcalibrate\u002F\u003Cid>\u002Flog` before stopping. Live logs can also be streamed via `GET \u002Fv1\u002Fcalibrate\u002F\u003Cproject_id>\u002Flog\u002F\u003Ctype>\u002Fstream`.\n\nTypical time: **10–60 min** (your-own videos), **10–30 min** (bundled sample).\n\n### Step D — Results\n\n```\nGET \u002Fv1\u002Fget_project_info\u002F\u003Cproject_id>                    # project state\nGET \u002Fv1\u002Fresult\u002F\u003Cproject_id>\u002Fevaluation_statistics        # only if GT uploaded\nGET \u002Fv1\u002Fresult\u002F\u003Cproject_id>\u002Foverlay_image                # visual overlay (PNG)\nGET \u002Fv1\u002Famc\u002Fcalibrate\u002F\u003Cproject_id>\u002Flog                   # calibration log\n```\n\nEvaluation response includes `Average L2 distance(m)` and `Average reprojection error 0(px)`. Evaluation metrics are produced **only when a ground-truth `GT.zip` was uploaded** — a missing `evaluation_statistics` result is normal otherwise and is not the end of result reporting.\n\nAfter `COMPLETED`, always give the user a way to review the result for that exact project, regardless of whether metrics exist:\n\n- **UI** — `http:\u002F\u002F\u003CHOST_IP>:${VSS_AUTO_CALIBRATION_UI_PORT:-5000}`; open the project, then the Results page to view the overlay.\n- **Overlay image on disk** — `${VSS_APPS_DIR}\u002Fservices\u002Fauto-calibration\u002Fprojects\u002Fproject_\u003Cid>\u002Foutput\u002Fmulti_view_results\u002FBA_output\u002Fresults_ba_scaled_world\u002Foverlay_img_*.png` (single-camera projects use `output\u002Fsingle_view_results\u002Fcam_00\u002Fverification_map_overlay.png`).\n- **Project files** — `${VSS_APPS_DIR}\u002Fservices\u002Fauto-calibration\u002Fprojects\u002Fproject_\u003Cid>\u002F`.\n\n### Step E — VGGT Refinement\n\nAfter the AMC run completes, always check `vggt_state` in project info. VGGT model staging is optional during setup and must not block the AMC result, but post-AMC handling follows the state:\n\n- If `vggt_state == \"READY\"` and the user explicitly requested VGGT refinement or staged VGGT during this setup flow, run VGGT refinement without asking again.\n- If `vggt_state == \"READY\"` but VGGT was already staged before this request and the user has not asked for VGGT-refined output, ask via `AskUserQuestion` whether to run refinement before starting it.\n- If VGGT is not ready, skip refinement and mention that VGGT refinement is available after staging the model (see [`references\u002Fdeploy-auto-calibration-service.md`](references\u002Fdeploy-auto-calibration-service.md) Step 2).\n\n```\nPOST \u002Fv1\u002Fvggt\u002Fcalibrate\u002F\u003Cproject_id>\nGET  \u002Fv1\u002Fget_project_info\u002F\u003Cproject_id>                    # poll vggt_state\nGET  \u002Fv1\u002Fvggt_results\u002F\u003Cproject_id>\u002Fevaluation_statistics  # VGGT metrics\n```\n\n## Settings File + Detector Pattern\n\nOptional across all three modes. When the user provides a JSON settings file (typically exported from UI Step 3 Download), POST it verbatim:\n\n```\nPOST \u002Fv1\u002Fconfig\u002F\u003Cproject_id>\nContent-Type: application\u002Fjson\n\n\u003Cfile contents, posted as-is>\n```\n\nThe file replaces what the user would otherwise tune in UI Step 3 (rectification, bundle-adjustment, evaluation knobs, detector, …). After a successful POST, **also** parse the file for `\"detector\"` \u002F `\"detector_type\"` — if it's `\"resnet\"` or `\"transformer\"`, use that value for the `\u002Fcalibrate` call in Step B (detector is a separate API parameter, not consumed by `\u002Fconfig`).\n\nNon-2xx is surfaced — do not silently fall back. Skip this call entirely if the user chose the UI-fallback path.\n\n## UI Fallback Pattern\n\nWhen alignment \u002F layout files aren't on disk, direct the user to the appropriate AMC UI step:\n\n- **Settings missing** → \"Open UI project `\u003Cproject_id>`, go to **Step 3: Parameters**, tune via the settings dialog (or accept defaults), click Save.\" **Also**: before the `\u002Fcalibrate` call, ask the user via `AskUserQuestion` whether to use the `resnet` or `transformer` detector — Step 3 doesn't cover detector choice.\n- **Layout missing** → \"Open UI project `\u003Cproject_id>`, go to **Step 2: Video Configuration**, upload `layout.png` only (do NOT re-upload videos — they're already attached via API\u002FRTSP), click Save.\"\n- **Alignment missing** → \"Open UI project `\u003Cproject_id>`, go to **Step 4: Alignment**, either upload `alignment_data.json` or mark correspondence points on the layout, click Save.\"\n\nWait for user confirmation. For alignment\u002Flayout, verify on disk before continuing:\n\n```bash\n# Project state lives under $VSS_APPS_DIR\u002Fservices\u002Fauto-calibration\u002Fprojects\n# (the path bind-mounted into the MS container in\n#  deploy\u002Fdocker\u002Fservices\u002Fauto-calibration\u002Fms\u002Fcompose.yml).\nHOST_PROJECTS=\"${VSS_APPS_DIR}\u002Fservices\u002Fauto-calibration\u002Fprojects\"\n\nls \"$HOST_PROJECTS\u002Fproject_\u003Cproject_id>\u002Fmanual_adjustment\u002F\"\n# Expected: alignment_data.json, layout.png\n```\n\n## Success Criteria\n\n- `project_state == \"COMPLETED\"` after polling.\n- If manual alignment was used: `${VSS_APPS_DIR}\u002Fservices\u002Fauto-calibration\u002Fprojects\u002Fproject_\u003Cid>\u002Fmanual_adjustment\u002F` contains `alignment_data.json` + `layout.png`.\n- If GT was uploaded: evaluation returns typical thresholds (`Average L2 distance(m)` \u003C 1.5, `Average reprojection error 0(px)` \u003C 5 for your data; \u003C 10 for the bundled sample).\n- No `ERROR` state.\n\n## Key Output Files\n\nUnder `${VSS_APPS_DIR}\u002Fservices\u002Fauto-calibration\u002Fprojects\u002Fproject_\u003Cproject_id>\u002F`:\n\n```\nproject_\u003Cproject_id>\u002F\n├── manual_adjustment\u002F\n│   ├── alignment_data.json\n│   └── layout.png\n├── output\u002F\n│   ├── single_view_results\u002Fcam_XX\u002F\n│   │   ├── camInfo_hyper_XX.yaml\n│   │   └── trajDump_Stream_0_3d.txt\n│   ├── multi_view_results\u002FBA_output\u002Fresults_ba\u002F\n│   │   ├── initial\u002FcamInfo_XX.yaml\n│   │   └── refined\u002FcamInfo_XX.yaml          # ← final calibration\n│   └── multi_view_results\u002FBA_output\u002Fresults_ba_scaled_world\u002F\n│       └── overlay_img_XX.png               # ← visual overlay for review\n└── calibration.log\n```\n\n## Cross-cutting Troubleshooting\n\nMode-specific issues live in each reference's own troubleshooting table.\n\n| Issue | Fix |\n|---|---|\n| `verify_project` state not `READY` | Confirm videos uploaded\u002Fingested and alignment + layout are present (either via API or via UI manual alignment). Mode-specific upload steps in the reference. |\n| Manual alignment files missing after UI step | User didn't click Save; also verify `${VSS_APPS_DIR}\u002Fservices\u002Fauto-calibration\u002Fprojects\u002Fproject_\u003Cid>\u002Fmanual_adjustment\u002F` exists. |\n| Calibration stuck `RUNNING` > 90 min | `GET \u002Fv1\u002Famc\u002Fcalibrate\u002F\u003Cid>\u002Flog` — usually insufficient tracklets (scene too static). See \"Custom Dataset\" guidelines in root `README.md`. |\n| Immediate `ERROR` state | Check video naming: must be `cam_00.mp4`, `cam_01.mp4`, … contiguous (videos mode) \u002F camera_name labels (RTSP mode). |\n| Low L2 but high reprojection | Provide explicit `focal_length` override during input upload (see videos \u002F rtsp references). |\n| VGGT `INIT`, never `READY` | VGGT model not loaded — see [`references\u002Fdeploy-auto-calibration-service.md`](references\u002Fdeploy-auto-calibration-service.md) Step 2. |\n| Upload timeout | Large videos — bump `timeout=300` to e.g. `600` in the per-mode Python script. |\n| Port scan finds no backend | Backend not running — walk [`references\u002Fdeploy-auto-calibration-service.md`](references\u002Fdeploy-auto-calibration-service.md) first. |\n\n## For Downstream Skills — MV3DT Export\n\nDownstream consumers (e.g. a Multi-View 3D Tracking skill owned by another team) fetch the MV3DT-format calibration output directly from the microservice. This skill returns the `project_id`; the downstream skill calls:\n\n```\nGET \u002Fv1\u002Fresult\u002F{project_id}\u002Fmv3dt_result?result_type=amc\n# Response: application\u002Fzip — mv3dt_output.zip containing transforms.yml\n```\n\nFor VGGT-refined output (only available if VGGT ran to `COMPLETED`, see Step E):\n\n```\nGET \u002Fv1\u002Fresult\u002F{project_id}\u002Fmv3dt_result?result_type=vggt\n# Response: application\u002Fzip — vggt_mv3dt_output.zip\n```\n\nDownstream skill flow:\n1. Call this skill with the user's inputs; capture the printed `project_id`.\n2. Wait for the skill to return (it polls until `COMPLETED` internally).\n3. `GET \u002Fv1\u002Fresult\u002F{project_id}\u002Fmv3dt_result?result_type=amc` — save the ZIP locally.\n4. If VGGT also ran, optionally fetch `?result_type=vggt` for the refined MV3DT.\n\n## Related Skills\n\n- [`vss-manage-video-io-storage`](..\u002Fvss-manage-video-io-storage\u002FSKILL.md) — VIOS API skill; only the `rtsp` calibration mode depends on VIOS being reachable.\n\nRoot `README.md` \"Custom Dataset\" and \"Calibration Workflow (UI)\" sections document input-video guidelines and the UI-driven alternative to this API flow.\n\nbump:1\n",{"name":5,"license":15,"metadata":49,"description":7},{"tags":50,"version":51,"github-url":52},"nvidia blueprint operational","3.2.0","https:\u002F\u002Fgithub.com\u002FNVIDIA-AI-Blueprints\u002Fvideo-search-and-summarization","claude\u002Finstall-gsd-build-foQdV","d86cd127f527124b5fd0fd0bc679a4d79b7d01d7",".agents\u002Fskills\u002Fvss-generate-video-calibration","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik","https:\u002F\u002Fnorvik-orpin.vercel.app","https:\u002F\u002Fgithub.com\u002Fpattanation","2026-07-17 11:17:04",{"source":8,"skillName":5,"commands":61,"prompt":71,"zipAvailable":72},[62,65,68],{"tool":63,"command":64},"npx","npx skills add pattanation\u002FNorvik --skill vss-generate-video-calibration",{"tool":66,"command":67},"bunx","bunx skills add pattanation\u002FNorvik --skill vss-generate-video-calibration",{"tool":69,"command":70},"pnpm","pnpm dlx skills add pattanation\u002FNorvik --skill vss-generate-video-calibration","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvss-generate-video-calibration\u002FSKILL.md",true,[74,80,84,88,92,96,100,104,108,112,116],{"path":75,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":78,"sourceHtmlUrl":79},"BENCHMARK.md","REFERENCE","参考文档",4424,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvss-generate-video-calibration\u002FBENCHMARK.md",{"path":81,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":82,"sourceHtmlUrl":83},"evals\u002Fauto-calibration.json",11942,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvss-generate-video-calibration\u002Fevals\u002Fauto-calibration.json",{"path":85,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":86,"sourceHtmlUrl":87},"evals\u002Fevals.json",2311,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvss-generate-video-calibration\u002Fevals\u002Fevals.json",{"path":89,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":90,"sourceHtmlUrl":91},"references\u002Fcalibration-tail.md",4112,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvss-generate-video-calibration\u002Freferences\u002Fcalibration-tail.md",{"path":93,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":94,"sourceHtmlUrl":95},"references\u002Fcommon-steps.md",1401,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvss-generate-video-calibration\u002Freferences\u002Fcommon-steps.md",{"path":97,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":98,"sourceHtmlUrl":99},"references\u002Fdeploy-auto-calibration-service.md",20707,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvss-generate-video-calibration\u002Freferences\u002Fdeploy-auto-calibration-service.md",{"path":101,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":102,"sourceHtmlUrl":103},"references\u002Frtsp.md",17160,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvss-generate-video-calibration\u002Freferences\u002Frtsp.md",{"path":105,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":106,"sourceHtmlUrl":107},"references\u002Fsample-dataset.md",16674,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvss-generate-video-calibration\u002Freferences\u002Fsample-dataset.md",{"path":109,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":110,"sourceHtmlUrl":111},"references\u002Fvideos.md",13629,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvss-generate-video-calibration\u002Freferences\u002Fvideos.md",{"path":113,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":114,"sourceHtmlUrl":115},"skill-card.md",3713,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvss-generate-video-calibration\u002Fskill-card.md",{"path":117,"resourceType":118,"resourceTypeDesc":119,"sizeBytes":120,"sourceHtmlUrl":121},"skill.oms.sig","OTHER","其他",6289,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvss-generate-video-calibration\u002Fskill.oms.sig",[123,152,177,200,222,237],{"skillNo":124,"name":125,"nameZh":6,"description":126,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":127,"sourceHtmlUrl":128,"categories":129,"keywords":136,"publishedAt":44},"01M71QDV4DM8T19HEHWATEF1K4","webapp-testing","Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fwebapp-testing\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fwebapp-testing\u002FSKILL.md",[130,133],{"categoryNo":131,"categoryName":132,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":134,"categoryName":135,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发",[137,138,139,41,140,38,141,142,143,144,145,146,147,148,149,150,151],"webapp","testing","webapp testing","applications","frontend","debugging","toolkit","logs","browser","with","playwright","web","behavior","ui","screenshots",{"skillNo":153,"name":154,"nameZh":6,"description":155,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":156,"sourceHtmlUrl":157,"categories":158,"keywords":160,"publishedAt":44},"01M71QDH2GGMXGA9105C9W1N7B","web-artifacts-builder","Suite of tools for creating elaborate, multi-component claude.ai HTML artifacts using modern frontend web technologies (React, Tailwind CSS, shadcn\u002Fui). Use for complex artifacts requiring state management, routing, or shadcn\u002Fui components - not for simple single-file HTML\u002FJSX artifacts.","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fweb-artifacts-builder\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fweb-artifacts-builder\u002FSKILL.md",[159],{"categoryNo":134,"categoryName":135,"taxonomyType":21,"taxonomyTypeDesc":22},[161,162,163,148,164,165,166,41,167,168,141,169,36,170,171,172,173,174,175,176],"builder","artifacts builder","artifacts","web artifacts builder","single-file","css","Tailwind","ui components","single","file","components","react","multi","state","routing","state management",{"skillNo":178,"name":179,"nameZh":6,"description":180,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":181,"licenseFileUrl":182,"sourceHtmlUrl":183,"categories":184,"keywords":186,"publishedAt":44},"01M71QD9T2XC3EWMQNN9ACNWQ1","vueuse-functions","Apply VueUse composables where appropriate to build concise, maintainable Vue.js \u002F Nuxt features.","MIT","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvueuse-functions\u002FLICENSE.md","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvueuse-functions\u002FSKILL.md",[185],{"categoryNo":134,"categoryName":135,"taxonomyType":21,"taxonomyTypeDesc":22},[187,188,189,190,191,192,31,193,194,195,196,197,198,199],"functions","vueuse","vueuse functions","project","nuxt","apply","concise","build","https","features","vue","js","composables",{"skillNo":201,"name":202,"nameZh":6,"description":203,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":181,"licenseFileUrl":204,"sourceHtmlUrl":205,"categories":206,"keywords":209,"publishedAt":44},"01M71QD51HWSGYMCMB7RW7PGK8","vue-testing-best-practices","Use for Vue.js testing. Covers Vitest, Vue Test Utils, component testing, mocking, testing patterns, and Playwright for E2E testing.","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvue-testing-best-practices\u002FLICENSE.md","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvue-testing-best-practices\u002FSKILL.md",[207,208],{"categoryNo":131,"categoryName":132,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":134,"categoryName":135,"taxonomyType":21,"taxonomyTypeDesc":22},[210,138,211,197,212,147,213,214,215,31,216,41,217,218,219,36,220,198,221],"vue testing best practices","testing best practices","best practices","test","testing patterns","component","vitest","mocking","e2e","utils","patterns","e2e testing",{"skillNo":223,"name":224,"nameZh":6,"description":225,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":181,"licenseFileUrl":226,"sourceHtmlUrl":227,"categories":228,"keywords":230,"publishedAt":44},"01M71QD358H2DJ9THJRBP77T3T","vue-router-best-practices","Vue Router 4 patterns, navigation guards, route params, and route-component lifecycle interactions.","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvue-router-best-practices\u002FLICENSE.md","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvue-router-best-practices\u002FSKILL.md",[229],{"categoryNo":134,"categoryName":135,"taxonomyType":21,"taxonomyTypeDesc":22},[231,197,232,212,233,215,234,31,220,235,236],"router","vue router best practices","route","guards","navigation","lifecycle",{"skillNo":238,"name":239,"nameZh":6,"description":240,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":181,"licenseFileUrl":241,"sourceHtmlUrl":242,"categories":243,"keywords":245,"publishedAt":44},"01M71QCYPNWDE2MQZ1TF3ED5S4","vue-best-practices","MUST be used for Vue.js tasks. Strongly recommends Composition API with `\u003Cscript setup>` and TypeScript as the standard approach. Covers Vue 3, SSR, Volar, vue-tsc. Load for any Vue, .vue files, Vue Router, Pinia, or Vite with Vue work. ALWAYS use Composition API unless the project explicitly requires Options API.","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvue-best-practices\u002FLICENSE.md","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvue-best-practices\u002FSKILL.md",[244],{"categoryNo":134,"categoryName":135,"taxonomyType":21,"taxonomyTypeDesc":22},[246,197,212,247,190,248,249,250,231,251,252,253,254,255,256,41,257,36,258,259],"vue best practices","Composition","files","tasks","api","pinia","work","options","ssr","typescript","as","vite","load","standard"]