[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-nvidia-amc-setup-calibration-stack":3,"mdc-j4wg5j-key":34,"related-org-nvidia-amc-setup-calibration-stack":7075,"related-repo-nvidia-amc-setup-calibration-stack":7234},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":29,"sourceUrl":32,"mdContent":33},"amc-setup-calibration-stack","deploy AutoMagicCalib microservice with Docker","Launch AutoMagicCalib microservice and web UI from NGC release images via Docker Compose. Use when user says 'deploy auto calibration', 'launch auto calibration', 'launch AMC', 'start MS+UI', or 'set up auto-magic-calib'. Requires NGC API key.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},"nvidia","NVIDIA","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fnvidia.png",[12,16,19,20],{"name":13,"slug":14,"type":15},"Operations","operations","tag",{"name":17,"slug":18,"type":15},"Deployment","deployment",{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},"Docker","docker",2473,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fskills","2026-07-17T05:28:56.913999","Apache-2.0",281,[],{"repoUrl":24,"stars":23,"forks":27,"topics":30,"description":31},[],"AI agent skills published by NVIDIA","https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fskills\u002Ftree\u002FHEAD\u002Fskills\u002Famc-setup-calibration-stack","---\nname: \"amc-setup-calibration-stack\"\ndescription: \"Launch AutoMagicCalib microservice and web UI from NGC release images via Docker Compose. Use when user says 'deploy auto calibration', 'launch auto calibration', 'launch AMC', 'start MS+UI', or 'set up auto-magic-calib'. Requires NGC API key.\"\nmetadata:\n  author: \"NVIDIA CORPORATION\"\n  tags: [amc, deepstream, docker, calibration, setup, ngc]\nowner: \"NVIDIA CORPORATION\"\nservice: \"auto-magic-calib\"\nversion: \"1.0.0\"\nreviewed: \"2026-04-28\"\nlicense: \"Apache-2.0\"\n---\n\n# Skill: Launch AutoMagicCalib Release Containers\n\nSet up the AutoMagicCalib microservice and UI from release containers: resolve an AMC checkout, authenticate to NGC, optionally download VGGT, configure Docker Compose, launch services, and verify readiness.\n\n## Prerequisites\n- Docker and Docker Compose installed\n- NVIDIA Docker Runtime configured (for GPU support)\n- `auto-magic-calib` repo on disk. Step 0b resolves the current repo, DeepStream `tools\u002Fauto-magic-calib`, `DEEPSTREAM_REPO_ROOT`, or `~\u002Fauto-magic-calib`; otherwise it asks before cloning `https:\u002F\u002Fgithub.com\u002FNVIDIA-AI-IOT\u002Fauto-magic-calib`.\n- NGC account with access to NVIDIA container registry\n- Docker runnable without `sudo`; verify with `docker ps` before continuing.\n\n## Instructions\n\n### Step 0: Verify Docker Runs Without sudo\n\n```bash\ndocker ps\n```\n\n- If it succeeds → continue.\n- If it fails with \"permission denied\" → the user is not in the `docker` group. Ask the user to run:\n  ```bash\n  sudo usermod -aG docker $USER && newgrp docker\n  ```\n  Then ask the user to confirm `docker ps` works before continuing.\n\n> **Agent note**: If `docker ps` cannot be run from within the agent sandbox, ask the user to confirm it works (e.g. \"Can you confirm `docker ps` runs without sudo?\") before proceeding.\n\n### Step 0b: Resolve Repo Checkout\n\nThe skill needs AMC repo assets (`compose\u002F`, sample data, and `models\u002F`). Resolve an existing checkout first; ask before cloning into `~\u002Fauto-magic-calib`.\n\n```bash\nREPO_URL=\"https:\u002F\u002Fgithub.com\u002FNVIDIA-AI-IOT\u002Fauto-magic-calib.git\"\nDEFAULT_CLONE_DIR=\"$HOME\u002Fauto-magic-calib\"\nCURRENT_GIT_ROOT=\"$(git rev-parse --show-toplevel 2>\u002Fdev\u002Fnull || true)\"\n\nis_amc_checkout() {\n  [ -n \"$1\" ] \\\n    && [ -f \"$1\u002FREADME.md\" ] \\\n    && grep -q \"AutoMagicCalib\" \"$1\u002FREADME.md\" 2>\u002Fdev\u002Fnull \\\n    && [ -f \"$1\u002Fcompose\u002Fcompose.yml\" ] \\\n    && grep -q \"auto-magic-calib-ms\" \"$1\u002Fcompose\u002Fms\u002Fcompose.yml\" 2>\u002Fdev\u002Fnull \\\n    && grep -q \"auto-magic-calib-ui\" \"$1\u002Fcompose\u002Fui\u002Fcompose.yml\" 2>\u002Fdev\u002Fnull\n}\n\nREPO_ROOT=\"\"\nfor candidate in \\\n  \"$CURRENT_GIT_ROOT\" \\\n  \"${CURRENT_GIT_ROOT:+$CURRENT_GIT_ROOT\u002Ftools\u002Fauto-magic-calib}\" \\\n  \"${DEEPSTREAM_REPO_ROOT:+$DEEPSTREAM_REPO_ROOT\u002Ftools\u002Fauto-magic-calib}\" \\\n  \"$PWD\u002Ftools\u002Fauto-magic-calib\" \\\n  \"$DEFAULT_CLONE_DIR\"; do\n  if is_amc_checkout \"$candidate\"; then\n    REPO_ROOT=\"$candidate\"\n    echo \"✓ Using auto-magic-calib checkout: $REPO_ROOT\"\n    break\n  fi\ndone\n\nif [ -z \"$REPO_ROOT\" ]; then\n  if [ -n \"$CURRENT_GIT_ROOT\" ] && [ -d \"$CURRENT_GIT_ROOT\u002Ftools\u002Fauto-magic-calib\" ]; then\n    echo \"Found $CURRENT_GIT_ROOT\u002Ftools\u002Fauto-magic-calib, but it is not an initialized AMC checkout.\"\n    echo \"If running from the DeepStream repository root:\"\n    echo \"  git submodule update --init tools\u002Fauto-magic-calib\"\n  fi\n\n  # Nothing usable on disk — STOP and ask the user for confirmation using the\n  # host's question mechanism; if none is available, ask in chat and wait.\n  # Do NOT clone silently from this block or clone over a tracked submodule path.\n  echo \"No usable auto-magic-calib checkout found. Ask the user for confirmation:\"\n  echo \"  Clone $REPO_URL into $DEFAULT_CLONE_DIR? [y\u002FN]\"\n  echo \"On 'y' — run: git clone \\\"$REPO_URL\\\" \\\"$DEFAULT_CLONE_DIR\\\"\"\n  exit 1\nfi\n\ncd \"$REPO_ROOT\"\nexport REPO_ROOT\necho \"REPO_ROOT=$REPO_ROOT\"\n```\n\n> **Agent note**: never clone silently. Prefer initialized DeepStream `tools\u002Fauto-magic-calib`; do not clone over that submodule path. If it exists but is empty, ask the user to run `git submodule update --init tools\u002Fauto-magic-calib`. Honour an alternate AMC path if provided.\n\n### Step 0c: Install Python venv (New Systems Only)\n\nOn a fresh system, `pip` and `python3-venv` may not be available. Install them first:\n\n```bash\n# Create a venv for HuggingFace CLI (project-local preferred)\nREPO_DIR=\"$(git rev-parse --show-toplevel 2>\u002Fdev\u002Fnull || pwd)\"\nHF_VENV=\"${REPO_DIR}\u002Fvenv\"\npython3 -m venv \"$HF_VENV\" 2>\u002Fdev\u002Fnull || {\n  echo \"ERROR: python3-venv not available.\" >&2\n  echo \"Install it manually: sudo apt install -y python3-venv python3-pip\" >&2\n  exit 1\n}\n\n# Install HuggingFace hub (needed for VGGT download)\n\"$HF_VENV\u002Fbin\u002Fpip\" install --upgrade pip huggingface_hub\n```\n\n> **Note**: Skip this step if a venv with `hf` already exists (check `venv\u002Fbin\u002Fhf` in the repo root or `~\u002Fvenv\u002Famc\u002Fbin\u002Fhf`).\n\n### Step 1: Login to NGC\n\nAsk the user for their NGC API key using the host's question mechanism; if none is available, ask in chat and wait. Then run:\n\n```bash\necho \"\u003CNGC_API_KEY>\" | docker login nvcr.io --username '$oauthtoken' --password-stdin\necho \"✓ NGC authentication complete\"\n```\n\n### Step 2: Download VGGT Model (If Not Already Present)\n\n```bash\nexport REPO_ROOT=$(git rev-parse --show-toplevel)\ncd \"$REPO_ROOT\"\n\nif [ -f \"models\u002Fvggt\u002Fvggt_1B_commercial.pt\" ]; then\n  echo \"✓ VGGT model already present\"\nelse\n  echo \"✗ VGGT model not found\"\n  echo \"Options:\"\n  echo \"  1. Continue without VGGT (AMC only - sufficient for most use cases)\"\n  echo \"  2. Download VGGT model (~4.7GB, requires HuggingFace account)\"\nfi\n```\n\n**To download VGGT**: ask the user to accept the license at https:\u002F\u002Fhuggingface.co\u002Ffacebook\u002FVGGT-1B-Commercial and provide a read token from https:\u002F\u002Fhuggingface.co\u002Fsettings\u002Ftokens using the host's question mechanism. Pass it through `HF_TOKEN` so it is not exposed in `ps` output:\n```bash\nREPO_DIR=\"$(git rev-parse --show-toplevel 2>\u002Fdev\u002Fnull || pwd)\"\ncd \"$REPO_DIR\"\n\n# Find the HuggingFace CLI binary (named 'hf', not 'huggingface-cli')\nHF_BIN=\"$(find \"$REPO_DIR\u002Fvenv\" ~\u002Fvenv\u002Famc -name hf -type f 2>\u002Fdev\u002Fnull | head -1)\"\n{ [ -z \"$HF_BIN\" ] || [ ! -x \"$HF_BIN\" ]; } && { echo \"ERROR: hf binary not found or not executable; install the hf CLI (Step 0c) or set HF_BIN\" >&2; exit 1; }\n\n# Do NOT use --token on the command line (leaks via ps\u002Fargv). The HF CLI\n# reads HF_TOKEN from the environment automatically.\nHF_TOKEN=\"\u003CHF_TOKEN>\" \"$HF_BIN\" download facebook\u002FVGGT-1B-Commercial \\\n  --local-dir models\u002Fvggt\u002F\n\n# Verify\nls -lh models\u002Fvggt\u002Fvggt_1B_commercial.pt\n# Should show ~4.7GB file\n```\n\n> **Important**: Download BEFORE setting `chown 1000:1000` on the models directory — the current user needs write access during download. Set permissions in Step 4 after download completes.\n\n### Step 3: Configure Compose Environment Variables\n\nThe Compose environment file controls ports and paths. Update it before launching:\n\n```bash\ncd $REPO_ROOT\u002Fcompose\n\n# Find available backend port (8000-8009)\nfor port in {8000..8009}; do\n  if ! lsof -Pi :$port -sTCP:LISTEN -t >\u002Fdev\u002Fnull 2>&1; then\n    MS_PORT=$port\n    echo \"Using backend port: $MS_PORT\"\n    break\n  fi\ndone\n[ -z \"$MS_PORT\" ] && { echo \"ERROR: no free backend port in 8000-8009; free one or widen the range.\" >&2; exit 1; }\n\n# Find available UI port (5000-5009)\nfor port in {5000..5009}; do\n  if ! lsof -Pi :$port -sTCP:LISTEN -t >\u002Fdev\u002Fnull 2>&1; then\n    UI_PORT=$port\n    echo \"Using UI port: $UI_PORT\"\n    break\n  fi\ndone\n[ -z \"$UI_PORT\" ] && { echo \"ERROR: no free UI port in 5000-5009; free one or widen the range.\" >&2; exit 1; }\n\n# Get host IP\nHOST_IP=$(hostname -I | awk '{print $1}')\necho \"Host IP: $HOST_IP\"\n\n# Preserve existing keys and restrict permissions on the Compose environment file.\nCOMPOSE_ENV_BASENAME=\"env\"\nENV_FILE=\".${COMPOSE_ENV_BASENAME}\"\nif [ -f \"$ENV_FILE\" ]; then\n  BACKUP=\"${ENV_FILE}.bak.$(date +%s)\"\n  cp \"$ENV_FILE\" \"$BACKUP\"\n  chmod 600 \"$BACKUP\"\nfi\ntouch \"$ENV_FILE\"\nchmod 600 \"$ENV_FILE\"\nset_env_key() {\n  local k=\"$1\" v=\"$2\"\n  if grep -qE \"^${k}=\" \"$ENV_FILE\"; then\n    sed -i \"s|^${k}=.*|${k}=${v}|\" \"$ENV_FILE\"\n  else\n    echo \"${k}=${v}\" >> \"$ENV_FILE\"\n  fi\n}\nset_env_key AUTO_MAGIC_CALIB_MS_PORT \"${MS_PORT}\"\nset_env_key AUTO_MAGIC_CALIB_UI_PORT \"${UI_PORT}\"\nset_env_key PROJECT_DIR \"..\u002F..\u002Fprojects\"\nset_env_key MODEL_DIR \"..\u002F..\u002Fmodels\"\nset_env_key HOST_IP \"${HOST_IP}\"\n\n# Keep timestamped Compose environment backups out of git.\nGITIGNORE=\"$REPO_ROOT\u002F.gitignore\"\ntouch \"$GITIGNORE\"\nBACKUP_PATTERN=\"compose\u002F${ENV_FILE}.bak.*\"\ngrep -qxF \"$BACKUP_PATTERN\" \"$GITIGNORE\" || echo \"$BACKUP_PATTERN\" >> \"$GITIGNORE\"\n\necho \"✓ Compose environment file updated\"\ncat \"$ENV_FILE\"\n```\n\n**Important**: `HOST_IP` must be the machine's network IP (not `localhost`) so the UI container can reach the backend from a browser.\n\nOptional: set `VGGT_MODEL_PATH` only if the VGGT model is mounted at a non-default container path; default is `\u002Ftmp\u002Fvggt_model\u002Fvggt_1B_commercial.pt` inside the MS container.\n\nOptional for RTSP calibration: use `skills\u002Famc-run-rtsp-calibration\u002FSKILL.md` after launch. That skill verifies VIOS reachability and, when needed, relaunches the microservice with a temporary compose override that exports `VIOS_BASE_URL` without changing checked-in compose files.\n\n### Step 4: Set Directory Permissions\n\nThe containers run as UID\u002FGID 1000. The `projects` and `models` directories must be owned by this UID for containers to read\u002Fwrite properly:\n\n```bash\ncd \"$REPO_ROOT\"\n\n# Create projects directory if it doesn't exist\nmkdir -p projects\n\n# Set ownership (required for containers to write calibration outputs).\n# Do this AFTER VGGT download is complete (current user needs write access during download).\n# Get explicit user confirmation before running sudo chown — it recursively changes\n# ownership of $REPO_ROOT\u002Fprojects and $REPO_ROOT\u002Fmodels to UID\u002FGID 1000.\n[ -d projects ] && [ -d models ] || {\n  echo \"ERROR: expected projects\u002F and models\u002F under $REPO_ROOT\" >&2; exit 1;\n}\necho \"About to chown -R 1000:1000 on:\"\necho \"  $REPO_ROOT\u002Fprojects\"\necho \"  $REPO_ROOT\u002Fmodels\"\necho \"(required because containers run as UID 1000). Confirm before proceeding.\"\nsudo chown 1000:1000 -R projects\nsudo chown 1000:1000 -R models\n\necho \"✓ Permissions set\"\n```\n\n### Step 5: Launch Services\n\nBefore pulling, fail fast if the NGC key authenticated in Step 1 but cannot actually access a release image — otherwise `docker compose up` aborts partway with a 401\u002F403 after some work is already done.\n\n```bash\ncd $REPO_ROOT\u002Fcompose\n\n# Fail-fast image-access check: confirm the NGC key can reach every release\n# image BEFORE pulling. `docker manifest inspect` checks registry access without\n# downloading layers, and the image list is read from the resolved compose so it\n# tracks the release tag automatically.\nIMAGES=$(docker compose config --images | sort -u)\n[ -z \"$IMAGES\" ] && { echo \"ERROR: no images resolved from compose — check the Compose environment settings and chosen profile.\" >&2; exit 1; }\nfor img in $IMAGES; do\n  echo \"Checking access: $img\"\n  if ! docker manifest inspect \"$img\" >\u002Fdev\u002Fnull 2>&1; then\n    echo \"NGC login succeeded, but this key cannot access the required image:\" >&2\n    echo \"  $img\" >&2\n    echo \"Provide an NGC key with access to this image's namespace, then re-run Step 1 (login) and retry.\" >&2\n    exit 1\n  fi\ndone\n\n# Start all services (images pulled automatically on first run)\ndocker compose up -d\n\n# Check containers are running\ndocker compose ps\n```\n\nThe exact image tags change by release; read them from the active compose files instead of hardcoding a version.\n\n### Step 6: Verify Services Are Running\n\n```bash\n# Read ports from the Compose environment file.\nCOMPOSE_ENV_BASENAME=\"env\"\nCOMPOSE_ENV_FILE=\"$REPO_ROOT\u002Fcompose\u002F.${COMPOSE_ENV_BASENAME}\"\nMS_PORT=$(grep AUTO_MAGIC_CALIB_MS_PORT \"$COMPOSE_ENV_FILE\" | cut -d= -f2)\nUI_PORT=$(grep AUTO_MAGIC_CALIB_UI_PORT \"$COMPOSE_ENV_FILE\" | cut -d= -f2)\nHOST_IP=$(grep HOST_IP \"$COMPOSE_ENV_FILE\" | cut -d= -f2)\n\n# Wait for microservice readiness. Cold image pulls or first startup can need\n# extra time after `docker compose up -d` returns.\nREADY_URL=\"http:\u002F\u002Flocalhost:${MS_PORT}\u002Fv1\u002Fready\"\necho \"Waiting for microservice readiness at ${READY_URL} ...\"\nready_response=\"\"\nfor attempt in $(seq 1 24); do\n  if ready_response=$(curl -fsS --max-time 5 \"${READY_URL}\" 2>\u002Fdev\u002Fnull) && \\\n     echo \"${ready_response}\" | grep -q '\"code\"[[:space:]]*:[[:space:]]*0'; then\n    echo \"Microservice ready: ${ready_response}\"\n    break\n  fi\n  if [ \"${attempt}\" -lt 24 ]; then\n    printf \"  [%02d\u002F24] Microservice not ready yet; retrying in 5s...\\n\" \"${attempt}\"\n    sleep 5\n  fi\ndone\n\nif ! echo \"${ready_response}\" | grep -q '\"code\"[[:space:]]*:[[:space:]]*0'; then\n  echo \"ERROR: microservice did not report ready within 120 seconds: ${READY_URL}\" >&2\n  echo \"Check status and logs:\" >&2\n  echo \"  cd ${REPO_ROOT}\u002Fcompose && docker compose ps\" >&2\n  echo \"  cd ${REPO_ROOT}\u002Fcompose && docker compose logs auto-magic-calib-ms\" >&2\n  exit 1\nfi\n\n# Check UI is serving\nUI_STATUS=$(curl -s -o \u002Fdev\u002Fnull -w \"%{http_code}\" --max-time 5 \"http:\u002F\u002Flocalhost:${UI_PORT}\")\nif [ \"${UI_STATUS}\" != \"200\" ]; then\n  echo \"ERROR: Web UI returned HTTP ${UI_STATUS}; check docker compose ps and UI logs.\" >&2\n  exit 1\nfi\necho \"Web UI ready: HTTP ${UI_STATUS}\"\n\necho \"Microservice: http:\u002F\u002F${HOST_IP}:${MS_PORT}\"\necho \"Web UI:       http:\u002F\u002F${HOST_IP}:${UI_PORT}\"\n```\n\n## Success Criteria\n\n- `docker compose ps` shows MS and UI containers `Up`; MS should be healthy.\n- `\u002Fv1\u002Fready` returns `code:0` and Step 6 prints the microservice and UI URLs.\n- Browser access to `http:\u002F\u002F\u003CHOST_IP>:\u003CAUTO_MAGIC_CALIB_UI_PORT>` works.\n- Projects persist under `$REPO_ROOT\u002Fprojects\u002F`.\n\n## Troubleshooting\n\n| Issue | Fix |\n|-------|-----|\n| Docker permission denied | Ask the user to run `sudo usermod -aG docker $USER && newgrp docker`, then retry `docker ps`. |\n| `docker login` rejected | Ask for a current NGC key and log in again. |\n| Required image inaccessible | The key lacks image namespace access; ask for a key with access, then retry Step 1 and Step 5. |\n| `python3 -m venv`, `pip`, or `hf` missing | Install `python3-venv`\u002F`python3-pip`; the HF binary is named `hf`. |\n| VGGT permission error | Download VGGT before `chown 1000:1000`; to recover, restore user ownership of `models\u002F` and re-download. |\n| Port in use | Pick a free MS port in 8000-8009 and UI port in 5000-5009, then update the Compose environment file. |\n| Readiness timeout or exited container | Run `cd $REPO_ROOT\u002Fcompose && docker compose ps` and inspect `docker compose logs auto-magic-calib-ms`. |\n| Project\u002Fmodel permission denied | Re-run Step 4 for `projects\u002F` or `models\u002F` only. |\n| UI cannot reach backend | Verify `HOST_IP` in the Compose environment file is the machine network IP, not `localhost`. |\n| GPU unavailable | Verify NVIDIA runtime with `docker run --rm --runtime=nvidia --gpus all ubuntu:20.04 nvidia-smi`. |\n\n**Common Fixes**:\n```bash\ncd $REPO_ROOT\u002Fcompose\n\n# View logs\ndocker compose logs -f\n\n# View logs for specific service\ndocker compose logs -f auto-magic-calib-ms\n\n# Restart all services\ndocker compose restart\n\n# Stop and remove containers\ndocker compose down\n\n# Update Compose environment settings and relaunch\ndocker compose up -d\n```\n\n## Stopping the Services\n\n```bash\ncd $REPO_ROOT\u002Fcompose\n\n# Stop all services (containers removed, data persisted)\ndocker compose down\n\n# Stop and remove volumes\ndocker compose down -v\n```\n\n## Related Skills\n- `skills\u002Famc-run-sample-calibration\u002FSKILL.md` - Sanity-check the running stack with the bundled sample dataset\n- `skills\u002Famc-run-video-calibration\u002FSKILL.md` - Calibrate from your own pre-recorded MP4s via REST API\n- `skills\u002Famc-run-rtsp-calibration\u002FSKILL.md` - Calibrate from live RTSP streams through VIOS capture\n\n\u003C!-- signing marker -->\n",{"data":35,"body":47},{"name":4,"description":6,"metadata":36,"owner":37,"service":44,"version":45,"reviewed":46,"license":26},{"author":37,"tags":38},"NVIDIA CORPORATION",[39,40,22,41,42,43],"amc","deepstream","calibration","setup","ngc","auto-magic-calib","1.0.0","2026-04-28",{"type":48,"children":49},"root",[50,59,65,72,156,162,169,197,277,306,312,339,1558,1585,1591,1612,1873,1910,1916,1921,2012,2018,2238,2282,2686,2707,2713,2718,4230,4254,4275,4296,4302,4322,4684,4690,4703,5157,5162,5168,6375,6381,6446,6452,6732,6741,6934,6940,7028,7034,7069],{"type":51,"tag":52,"props":53,"children":55},"element","h1",{"id":54},"skill-launch-automagiccalib-release-containers",[56],{"type":57,"value":58},"text","Skill: Launch AutoMagicCalib Release Containers",{"type":51,"tag":60,"props":61,"children":62},"p",{},[63],{"type":57,"value":64},"Set up the AutoMagicCalib microservice and UI from release containers: resolve an AMC checkout, authenticate to NGC, optionally download VGGT, configure Docker Compose, launch services, and verify readiness.",{"type":51,"tag":66,"props":67,"children":69},"h2",{"id":68},"prerequisites",[70],{"type":57,"value":71},"Prerequisites",{"type":51,"tag":73,"props":74,"children":75},"ul",{},[76,82,87,130,135],{"type":51,"tag":77,"props":78,"children":79},"li",{},[80],{"type":57,"value":81},"Docker and Docker Compose installed",{"type":51,"tag":77,"props":83,"children":84},{},[85],{"type":57,"value":86},"NVIDIA Docker Runtime configured (for GPU support)",{"type":51,"tag":77,"props":88,"children":89},{},[90,96,98,104,106,112,114,120,122,128],{"type":51,"tag":91,"props":92,"children":94},"code",{"className":93},[],[95],{"type":57,"value":44},{"type":57,"value":97}," repo on disk. Step 0b resolves the current repo, DeepStream ",{"type":51,"tag":91,"props":99,"children":101},{"className":100},[],[102],{"type":57,"value":103},"tools\u002Fauto-magic-calib",{"type":57,"value":105},", ",{"type":51,"tag":91,"props":107,"children":109},{"className":108},[],[110],{"type":57,"value":111},"DEEPSTREAM_REPO_ROOT",{"type":57,"value":113},", or ",{"type":51,"tag":91,"props":115,"children":117},{"className":116},[],[118],{"type":57,"value":119},"~\u002Fauto-magic-calib",{"type":57,"value":121},"; otherwise it asks before cloning ",{"type":51,"tag":91,"props":123,"children":125},{"className":124},[],[126],{"type":57,"value":127},"https:\u002F\u002Fgithub.com\u002FNVIDIA-AI-IOT\u002Fauto-magic-calib",{"type":57,"value":129},".",{"type":51,"tag":77,"props":131,"children":132},{},[133],{"type":57,"value":134},"NGC account with access to NVIDIA container registry",{"type":51,"tag":77,"props":136,"children":137},{},[138,140,146,148,154],{"type":57,"value":139},"Docker runnable without ",{"type":51,"tag":91,"props":141,"children":143},{"className":142},[],[144],{"type":57,"value":145},"sudo",{"type":57,"value":147},"; verify with ",{"type":51,"tag":91,"props":149,"children":151},{"className":150},[],[152],{"type":57,"value":153},"docker ps",{"type":57,"value":155}," before continuing.",{"type":51,"tag":66,"props":157,"children":159},{"id":158},"instructions",[160],{"type":57,"value":161},"Instructions",{"type":51,"tag":163,"props":164,"children":166},"h3",{"id":165},"step-0-verify-docker-runs-without-sudo",[167],{"type":57,"value":168},"Step 0: Verify Docker Runs Without sudo",{"type":51,"tag":170,"props":171,"children":176},"pre",{"className":172,"code":173,"language":174,"meta":175,"style":175},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","docker ps\n","bash","",[177],{"type":51,"tag":91,"props":178,"children":179},{"__ignoreMap":175},[180],{"type":51,"tag":181,"props":182,"children":185},"span",{"class":183,"line":184},"line",1,[186,191],{"type":51,"tag":181,"props":187,"children":189},{"style":188},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[190],{"type":57,"value":22},{"type":51,"tag":181,"props":192,"children":194},{"style":193},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[195],{"type":57,"value":196}," ps\n",{"type":51,"tag":73,"props":198,"children":199},{},[200,205],{"type":51,"tag":77,"props":201,"children":202},{},[203],{"type":57,"value":204},"If it succeeds → continue.",{"type":51,"tag":77,"props":206,"children":207},{},[208,210,215,217,268,270,275],{"type":57,"value":209},"If it fails with \"permission denied\" → the user is not in the ",{"type":51,"tag":91,"props":211,"children":213},{"className":212},[],[214],{"type":57,"value":22},{"type":57,"value":216}," group. Ask the user to run:\n",{"type":51,"tag":170,"props":218,"children":220},{"className":172,"code":219,"language":174,"meta":175,"style":175},"sudo usermod -aG docker $USER && newgrp docker\n",[221],{"type":51,"tag":91,"props":222,"children":223},{"__ignoreMap":175},[224],{"type":51,"tag":181,"props":225,"children":226},{"class":183,"line":184},[227,231,236,241,246,252,258,263],{"type":51,"tag":181,"props":228,"children":229},{"style":188},[230],{"type":57,"value":145},{"type":51,"tag":181,"props":232,"children":233},{"style":193},[234],{"type":57,"value":235}," usermod",{"type":51,"tag":181,"props":237,"children":238},{"style":193},[239],{"type":57,"value":240}," -aG",{"type":51,"tag":181,"props":242,"children":243},{"style":193},[244],{"type":57,"value":245}," docker",{"type":51,"tag":181,"props":247,"children":249},{"style":248},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[250],{"type":57,"value":251}," $USER ",{"type":51,"tag":181,"props":253,"children":255},{"style":254},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[256],{"type":57,"value":257},"&&",{"type":51,"tag":181,"props":259,"children":260},{"style":188},[261],{"type":57,"value":262}," newgrp",{"type":51,"tag":181,"props":264,"children":265},{"style":193},[266],{"type":57,"value":267}," docker\n",{"type":57,"value":269},"\nThen ask the user to confirm ",{"type":51,"tag":91,"props":271,"children":273},{"className":272},[],[274],{"type":57,"value":153},{"type":57,"value":276}," works before continuing.",{"type":51,"tag":278,"props":279,"children":280},"blockquote",{},[281],{"type":51,"tag":60,"props":282,"children":283},{},[284,290,292,297,299,304],{"type":51,"tag":285,"props":286,"children":287},"strong",{},[288],{"type":57,"value":289},"Agent note",{"type":57,"value":291},": If ",{"type":51,"tag":91,"props":293,"children":295},{"className":294},[],[296],{"type":57,"value":153},{"type":57,"value":298}," cannot be run from within the agent sandbox, ask the user to confirm it works (e.g. \"Can you confirm ",{"type":51,"tag":91,"props":300,"children":302},{"className":301},[],[303],{"type":57,"value":153},{"type":57,"value":305}," runs without sudo?\") before proceeding.",{"type":51,"tag":163,"props":307,"children":309},{"id":308},"step-0b-resolve-repo-checkout",[310],{"type":57,"value":311},"Step 0b: Resolve Repo Checkout",{"type":51,"tag":60,"props":313,"children":314},{},[315,317,323,325,331,333,338],{"type":57,"value":316},"The skill needs AMC repo assets (",{"type":51,"tag":91,"props":318,"children":320},{"className":319},[],[321],{"type":57,"value":322},"compose\u002F",{"type":57,"value":324},", sample data, and ",{"type":51,"tag":91,"props":326,"children":328},{"className":327},[],[329],{"type":57,"value":330},"models\u002F",{"type":57,"value":332},"). Resolve an existing checkout first; ask before cloning into ",{"type":51,"tag":91,"props":334,"children":336},{"className":335},[],[337],{"type":57,"value":119},{"type":57,"value":129},{"type":51,"tag":170,"props":340,"children":342},{"className":172,"code":341,"language":174,"meta":175,"style":175},"REPO_URL=\"https:\u002F\u002Fgithub.com\u002FNVIDIA-AI-IOT\u002Fauto-magic-calib.git\"\nDEFAULT_CLONE_DIR=\"$HOME\u002Fauto-magic-calib\"\nCURRENT_GIT_ROOT=\"$(git rev-parse --show-toplevel 2>\u002Fdev\u002Fnull || true)\"\n\nis_amc_checkout() {\n  [ -n \"$1\" ] \\\n    && [ -f \"$1\u002FREADME.md\" ] \\\n    && grep -q \"AutoMagicCalib\" \"$1\u002FREADME.md\" 2>\u002Fdev\u002Fnull \\\n    && [ -f \"$1\u002Fcompose\u002Fcompose.yml\" ] \\\n    && grep -q \"auto-magic-calib-ms\" \"$1\u002Fcompose\u002Fms\u002Fcompose.yml\" 2>\u002Fdev\u002Fnull \\\n    && grep -q \"auto-magic-calib-ui\" \"$1\u002Fcompose\u002Fui\u002Fcompose.yml\" 2>\u002Fdev\u002Fnull\n}\n\nREPO_ROOT=\"\"\nfor candidate in \\\n  \"$CURRENT_GIT_ROOT\" \\\n  \"${CURRENT_GIT_ROOT:+$CURRENT_GIT_ROOT\u002Ftools\u002Fauto-magic-calib}\" \\\n  \"${DEEPSTREAM_REPO_ROOT:+$DEEPSTREAM_REPO_ROOT\u002Ftools\u002Fauto-magic-calib}\" \\\n  \"$PWD\u002Ftools\u002Fauto-magic-calib\" \\\n  \"$DEFAULT_CLONE_DIR\"; do\n  if is_amc_checkout \"$candidate\"; then\n    REPO_ROOT=\"$candidate\"\n    echo \"✓ Using auto-magic-calib checkout: $REPO_ROOT\"\n    break\n  fi\ndone\n\nif [ -z \"$REPO_ROOT\" ]; then\n  if [ -n \"$CURRENT_GIT_ROOT\" ] && [ -d \"$CURRENT_GIT_ROOT\u002Ftools\u002Fauto-magic-calib\" ]; then\n    echo \"Found $CURRENT_GIT_ROOT\u002Ftools\u002Fauto-magic-calib, but it is not an initialized AMC checkout.\"\n    echo \"If running from the DeepStream repository root:\"\n    echo \"  git submodule update --init tools\u002Fauto-magic-calib\"\n  fi\n\n  # Nothing usable on disk — STOP and ask the user for confirmation using the\n  # host's question mechanism; if none is available, ask in chat and wait.\n  # Do NOT clone silently from this block or clone over a tracked submodule path.\n  echo \"No usable auto-magic-calib checkout found. Ask the user for confirmation:\"\n  echo \"  Clone $REPO_URL into $DEFAULT_CLONE_DIR? [y\u002FN]\"\n  echo \"On 'y' — run: git clone \\\"$REPO_URL\\\" \\\"$DEFAULT_CLONE_DIR\\\"\"\n  exit 1\nfi\n\ncd \"$REPO_ROOT\"\nexport REPO_ROOT\necho \"REPO_ROOT=$REPO_ROOT\"\n",[343],{"type":51,"tag":91,"props":344,"children":345},{"__ignoreMap":175},[346,374,405,459,469,488,527,571,632,673,731,786,795,803,821,845,867,921,970,996,1023,1059,1084,1111,1120,1129,1138,1146,1185,1255,1285,1306,1327,1335,1343,1353,1362,1371,1393,1433,1464,1479,1488,1496,1517,1532],{"type":51,"tag":181,"props":347,"children":348},{"class":183,"line":184},[349,354,359,364,369],{"type":51,"tag":181,"props":350,"children":351},{"style":248},[352],{"type":57,"value":353},"REPO_URL",{"type":51,"tag":181,"props":355,"children":356},{"style":254},[357],{"type":57,"value":358},"=",{"type":51,"tag":181,"props":360,"children":361},{"style":254},[362],{"type":57,"value":363},"\"",{"type":51,"tag":181,"props":365,"children":366},{"style":193},[367],{"type":57,"value":368},"https:\u002F\u002Fgithub.com\u002FNVIDIA-AI-IOT\u002Fauto-magic-calib.git",{"type":51,"tag":181,"props":370,"children":371},{"style":254},[372],{"type":57,"value":373},"\"\n",{"type":51,"tag":181,"props":375,"children":377},{"class":183,"line":376},2,[378,383,387,391,396,401],{"type":51,"tag":181,"props":379,"children":380},{"style":248},[381],{"type":57,"value":382},"DEFAULT_CLONE_DIR",{"type":51,"tag":181,"props":384,"children":385},{"style":254},[386],{"type":57,"value":358},{"type":51,"tag":181,"props":388,"children":389},{"style":254},[390],{"type":57,"value":363},{"type":51,"tag":181,"props":392,"children":393},{"style":248},[394],{"type":57,"value":395},"$HOME",{"type":51,"tag":181,"props":397,"children":398},{"style":193},[399],{"type":57,"value":400},"\u002Fauto-magic-calib",{"type":51,"tag":181,"props":402,"children":403},{"style":254},[404],{"type":57,"value":373},{"type":51,"tag":181,"props":406,"children":408},{"class":183,"line":407},3,[409,414,418,423,428,433,438,443,448,454],{"type":51,"tag":181,"props":410,"children":411},{"style":248},[412],{"type":57,"value":413},"CURRENT_GIT_ROOT",{"type":51,"tag":181,"props":415,"children":416},{"style":254},[417],{"type":57,"value":358},{"type":51,"tag":181,"props":419,"children":420},{"style":254},[421],{"type":57,"value":422},"\"$(",{"type":51,"tag":181,"props":424,"children":425},{"style":188},[426],{"type":57,"value":427},"git",{"type":51,"tag":181,"props":429,"children":430},{"style":193},[431],{"type":57,"value":432}," rev-parse --show-toplevel ",{"type":51,"tag":181,"props":434,"children":435},{"style":254},[436],{"type":57,"value":437},"2>",{"type":51,"tag":181,"props":439,"children":440},{"style":193},[441],{"type":57,"value":442},"\u002Fdev\u002Fnull ",{"type":51,"tag":181,"props":444,"children":445},{"style":254},[446],{"type":57,"value":447},"||",{"type":51,"tag":181,"props":449,"children":451},{"style":450},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[452],{"type":57,"value":453}," true",{"type":51,"tag":181,"props":455,"children":456},{"style":254},[457],{"type":57,"value":458},")\"\n",{"type":51,"tag":181,"props":460,"children":462},{"class":183,"line":461},4,[463],{"type":51,"tag":181,"props":464,"children":466},{"emptyLinePlaceholder":465},true,[467],{"type":57,"value":468},"\n",{"type":51,"tag":181,"props":470,"children":472},{"class":183,"line":471},5,[473,478,483],{"type":51,"tag":181,"props":474,"children":475},{"style":450},[476],{"type":57,"value":477},"is_amc_checkout",{"type":51,"tag":181,"props":479,"children":480},{"style":254},[481],{"type":57,"value":482},"()",{"type":51,"tag":181,"props":484,"children":485},{"style":254},[486],{"type":57,"value":487}," {\n",{"type":51,"tag":181,"props":489,"children":491},{"class":183,"line":490},6,[492,497,502,507,513,517,522],{"type":51,"tag":181,"props":493,"children":494},{"style":254},[495],{"type":57,"value":496},"  [",{"type":51,"tag":181,"props":498,"children":499},{"style":254},[500],{"type":57,"value":501}," -n",{"type":51,"tag":181,"props":503,"children":504},{"style":254},[505],{"type":57,"value":506}," \"",{"type":51,"tag":181,"props":508,"children":510},{"style":509},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic",[511],{"type":57,"value":512},"$1",{"type":51,"tag":181,"props":514,"children":515},{"style":254},[516],{"type":57,"value":363},{"type":51,"tag":181,"props":518,"children":519},{"style":254},[520],{"type":57,"value":521}," ]",{"type":51,"tag":181,"props":523,"children":524},{"style":248},[525],{"type":57,"value":526}," \\\n",{"type":51,"tag":181,"props":528,"children":530},{"class":183,"line":529},7,[531,536,541,546,550,554,559,563,567],{"type":51,"tag":181,"props":532,"children":533},{"style":254},[534],{"type":57,"value":535},"    &&",{"type":51,"tag":181,"props":537,"children":538},{"style":254},[539],{"type":57,"value":540}," [",{"type":51,"tag":181,"props":542,"children":543},{"style":254},[544],{"type":57,"value":545}," -f",{"type":51,"tag":181,"props":547,"children":548},{"style":254},[549],{"type":57,"value":506},{"type":51,"tag":181,"props":551,"children":552},{"style":509},[553],{"type":57,"value":512},{"type":51,"tag":181,"props":555,"children":556},{"style":193},[557],{"type":57,"value":558},"\u002FREADME.md",{"type":51,"tag":181,"props":560,"children":561},{"style":254},[562],{"type":57,"value":363},{"type":51,"tag":181,"props":564,"children":565},{"style":254},[566],{"type":57,"value":521},{"type":51,"tag":181,"props":568,"children":569},{"style":248},[570],{"type":57,"value":526},{"type":51,"tag":181,"props":572,"children":574},{"class":183,"line":573},8,[575,579,584,589,593,598,602,606,610,614,618,623,628],{"type":51,"tag":181,"props":576,"children":577},{"style":254},[578],{"type":57,"value":535},{"type":51,"tag":181,"props":580,"children":581},{"style":188},[582],{"type":57,"value":583}," grep",{"type":51,"tag":181,"props":585,"children":586},{"style":193},[587],{"type":57,"value":588}," -q",{"type":51,"tag":181,"props":590,"children":591},{"style":254},[592],{"type":57,"value":506},{"type":51,"tag":181,"props":594,"children":595},{"style":193},[596],{"type":57,"value":597},"AutoMagicCalib",{"type":51,"tag":181,"props":599,"children":600},{"style":254},[601],{"type":57,"value":363},{"type":51,"tag":181,"props":603,"children":604},{"style":254},[605],{"type":57,"value":506},{"type":51,"tag":181,"props":607,"children":608},{"style":509},[609],{"type":57,"value":512},{"type":51,"tag":181,"props":611,"children":612},{"style":193},[613],{"type":57,"value":558},{"type":51,"tag":181,"props":615,"children":616},{"style":254},[617],{"type":57,"value":363},{"type":51,"tag":181,"props":619,"children":620},{"style":254},[621],{"type":57,"value":622}," 2>",{"type":51,"tag":181,"props":624,"children":625},{"style":193},[626],{"type":57,"value":627},"\u002Fdev\u002Fnull",{"type":51,"tag":181,"props":629,"children":630},{"style":248},[631],{"type":57,"value":526},{"type":51,"tag":181,"props":633,"children":635},{"class":183,"line":634},9,[636,640,644,648,652,656,661,665,669],{"type":51,"tag":181,"props":637,"children":638},{"style":254},[639],{"type":57,"value":535},{"type":51,"tag":181,"props":641,"children":642},{"style":254},[643],{"type":57,"value":540},{"type":51,"tag":181,"props":645,"children":646},{"style":254},[647],{"type":57,"value":545},{"type":51,"tag":181,"props":649,"children":650},{"style":254},[651],{"type":57,"value":506},{"type":51,"tag":181,"props":653,"children":654},{"style":509},[655],{"type":57,"value":512},{"type":51,"tag":181,"props":657,"children":658},{"style":193},[659],{"type":57,"value":660},"\u002Fcompose\u002Fcompose.yml",{"type":51,"tag":181,"props":662,"children":663},{"style":254},[664],{"type":57,"value":363},{"type":51,"tag":181,"props":666,"children":667},{"style":254},[668],{"type":57,"value":521},{"type":51,"tag":181,"props":670,"children":671},{"style":248},[672],{"type":57,"value":526},{"type":51,"tag":181,"props":674,"children":676},{"class":183,"line":675},10,[677,681,685,689,693,698,702,706,710,715,719,723,727],{"type":51,"tag":181,"props":678,"children":679},{"style":254},[680],{"type":57,"value":535},{"type":51,"tag":181,"props":682,"children":683},{"style":188},[684],{"type":57,"value":583},{"type":51,"tag":181,"props":686,"children":687},{"style":193},[688],{"type":57,"value":588},{"type":51,"tag":181,"props":690,"children":691},{"style":254},[692],{"type":57,"value":506},{"type":51,"tag":181,"props":694,"children":695},{"style":193},[696],{"type":57,"value":697},"auto-magic-calib-ms",{"type":51,"tag":181,"props":699,"children":700},{"style":254},[701],{"type":57,"value":363},{"type":51,"tag":181,"props":703,"children":704},{"style":254},[705],{"type":57,"value":506},{"type":51,"tag":181,"props":707,"children":708},{"style":509},[709],{"type":57,"value":512},{"type":51,"tag":181,"props":711,"children":712},{"style":193},[713],{"type":57,"value":714},"\u002Fcompose\u002Fms\u002Fcompose.yml",{"type":51,"tag":181,"props":716,"children":717},{"style":254},[718],{"type":57,"value":363},{"type":51,"tag":181,"props":720,"children":721},{"style":254},[722],{"type":57,"value":622},{"type":51,"tag":181,"props":724,"children":725},{"style":193},[726],{"type":57,"value":627},{"type":51,"tag":181,"props":728,"children":729},{"style":248},[730],{"type":57,"value":526},{"type":51,"tag":181,"props":732,"children":734},{"class":183,"line":733},11,[735,739,743,747,751,756,760,764,768,773,777,781],{"type":51,"tag":181,"props":736,"children":737},{"style":254},[738],{"type":57,"value":535},{"type":51,"tag":181,"props":740,"children":741},{"style":188},[742],{"type":57,"value":583},{"type":51,"tag":181,"props":744,"children":745},{"style":193},[746],{"type":57,"value":588},{"type":51,"tag":181,"props":748,"children":749},{"style":254},[750],{"type":57,"value":506},{"type":51,"tag":181,"props":752,"children":753},{"style":193},[754],{"type":57,"value":755},"auto-magic-calib-ui",{"type":51,"tag":181,"props":757,"children":758},{"style":254},[759],{"type":57,"value":363},{"type":51,"tag":181,"props":761,"children":762},{"style":254},[763],{"type":57,"value":506},{"type":51,"tag":181,"props":765,"children":766},{"style":509},[767],{"type":57,"value":512},{"type":51,"tag":181,"props":769,"children":770},{"style":193},[771],{"type":57,"value":772},"\u002Fcompose\u002Fui\u002Fcompose.yml",{"type":51,"tag":181,"props":774,"children":775},{"style":254},[776],{"type":57,"value":363},{"type":51,"tag":181,"props":778,"children":779},{"style":254},[780],{"type":57,"value":622},{"type":51,"tag":181,"props":782,"children":783},{"style":193},[784],{"type":57,"value":785},"\u002Fdev\u002Fnull\n",{"type":51,"tag":181,"props":787,"children":789},{"class":183,"line":788},12,[790],{"type":51,"tag":181,"props":791,"children":792},{"style":254},[793],{"type":57,"value":794},"}\n",{"type":51,"tag":181,"props":796,"children":798},{"class":183,"line":797},13,[799],{"type":51,"tag":181,"props":800,"children":801},{"emptyLinePlaceholder":465},[802],{"type":57,"value":468},{"type":51,"tag":181,"props":804,"children":806},{"class":183,"line":805},14,[807,812,816],{"type":51,"tag":181,"props":808,"children":809},{"style":248},[810],{"type":57,"value":811},"REPO_ROOT",{"type":51,"tag":181,"props":813,"children":814},{"style":254},[815],{"type":57,"value":358},{"type":51,"tag":181,"props":817,"children":818},{"style":254},[819],{"type":57,"value":820},"\"\"\n",{"type":51,"tag":181,"props":822,"children":824},{"class":183,"line":823},15,[825,831,836,841],{"type":51,"tag":181,"props":826,"children":828},{"style":827},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[829],{"type":57,"value":830},"for",{"type":51,"tag":181,"props":832,"children":833},{"style":248},[834],{"type":57,"value":835}," candidate ",{"type":51,"tag":181,"props":837,"children":838},{"style":827},[839],{"type":57,"value":840},"in",{"type":51,"tag":181,"props":842,"children":843},{"style":248},[844],{"type":57,"value":526},{"type":51,"tag":181,"props":846,"children":848},{"class":183,"line":847},16,[849,854,859,863],{"type":51,"tag":181,"props":850,"children":851},{"style":254},[852],{"type":57,"value":853},"  \"",{"type":51,"tag":181,"props":855,"children":856},{"style":248},[857],{"type":57,"value":858},"$CURRENT_GIT_ROOT",{"type":51,"tag":181,"props":860,"children":861},{"style":254},[862],{"type":57,"value":363},{"type":51,"tag":181,"props":864,"children":865},{"style":248},[866],{"type":57,"value":526},{"type":51,"tag":181,"props":868,"children":870},{"class":183,"line":869},17,[871,876,880,885,890,894,899,904,908,912,917],{"type":51,"tag":181,"props":872,"children":873},{"style":254},[874],{"type":57,"value":875},"  \"${",{"type":51,"tag":181,"props":877,"children":878},{"style":248},[879],{"type":57,"value":413},{"type":51,"tag":181,"props":881,"children":882},{"style":254},[883],{"type":57,"value":884},":",{"type":51,"tag":181,"props":886,"children":887},{"style":193},[888],{"type":57,"value":889},"+",{"type":51,"tag":181,"props":891,"children":892},{"style":248},[893],{"type":57,"value":858},{"type":51,"tag":181,"props":895,"children":896},{"style":254},[897],{"type":57,"value":898},"\u002F",{"type":51,"tag":181,"props":900,"children":901},{"style":248},[902],{"type":57,"value":903},"tools",{"type":51,"tag":181,"props":905,"children":906},{"style":254},[907],{"type":57,"value":898},{"type":51,"tag":181,"props":909,"children":910},{"style":248},[911],{"type":57,"value":44},{"type":51,"tag":181,"props":913,"children":914},{"style":254},[915],{"type":57,"value":916},"}\"",{"type":51,"tag":181,"props":918,"children":919},{"style":248},[920],{"type":57,"value":526},{"type":51,"tag":181,"props":922,"children":924},{"class":183,"line":923},18,[925,929,933,937,941,946,950,954,958,962,966],{"type":51,"tag":181,"props":926,"children":927},{"style":254},[928],{"type":57,"value":875},{"type":51,"tag":181,"props":930,"children":931},{"style":248},[932],{"type":57,"value":111},{"type":51,"tag":181,"props":934,"children":935},{"style":254},[936],{"type":57,"value":884},{"type":51,"tag":181,"props":938,"children":939},{"style":193},[940],{"type":57,"value":889},{"type":51,"tag":181,"props":942,"children":943},{"style":248},[944],{"type":57,"value":945},"$DEEPSTREAM_REPO_ROOT",{"type":51,"tag":181,"props":947,"children":948},{"style":254},[949],{"type":57,"value":898},{"type":51,"tag":181,"props":951,"children":952},{"style":248},[953],{"type":57,"value":903},{"type":51,"tag":181,"props":955,"children":956},{"style":254},[957],{"type":57,"value":898},{"type":51,"tag":181,"props":959,"children":960},{"style":248},[961],{"type":57,"value":44},{"type":51,"tag":181,"props":963,"children":964},{"style":254},[965],{"type":57,"value":916},{"type":51,"tag":181,"props":967,"children":968},{"style":248},[969],{"type":57,"value":526},{"type":51,"tag":181,"props":971,"children":973},{"class":183,"line":972},19,[974,978,983,988,992],{"type":51,"tag":181,"props":975,"children":976},{"style":254},[977],{"type":57,"value":853},{"type":51,"tag":181,"props":979,"children":980},{"style":248},[981],{"type":57,"value":982},"$PWD",{"type":51,"tag":181,"props":984,"children":985},{"style":193},[986],{"type":57,"value":987},"\u002Ftools\u002Fauto-magic-calib",{"type":51,"tag":181,"props":989,"children":990},{"style":254},[991],{"type":57,"value":363},{"type":51,"tag":181,"props":993,"children":994},{"style":248},[995],{"type":57,"value":526},{"type":51,"tag":181,"props":997,"children":999},{"class":183,"line":998},20,[1000,1004,1009,1013,1018],{"type":51,"tag":181,"props":1001,"children":1002},{"style":254},[1003],{"type":57,"value":853},{"type":51,"tag":181,"props":1005,"children":1006},{"style":248},[1007],{"type":57,"value":1008},"$DEFAULT_CLONE_DIR",{"type":51,"tag":181,"props":1010,"children":1011},{"style":254},[1012],{"type":57,"value":363},{"type":51,"tag":181,"props":1014,"children":1015},{"style":254},[1016],{"type":57,"value":1017},";",{"type":51,"tag":181,"props":1019,"children":1020},{"style":827},[1021],{"type":57,"value":1022}," do\n",{"type":51,"tag":181,"props":1024,"children":1026},{"class":183,"line":1025},21,[1027,1032,1037,1041,1046,1050,1054],{"type":51,"tag":181,"props":1028,"children":1029},{"style":827},[1030],{"type":57,"value":1031},"  if",{"type":51,"tag":181,"props":1033,"children":1034},{"style":188},[1035],{"type":57,"value":1036}," is_amc_checkout",{"type":51,"tag":181,"props":1038,"children":1039},{"style":254},[1040],{"type":57,"value":506},{"type":51,"tag":181,"props":1042,"children":1043},{"style":248},[1044],{"type":57,"value":1045},"$candidate",{"type":51,"tag":181,"props":1047,"children":1048},{"style":254},[1049],{"type":57,"value":363},{"type":51,"tag":181,"props":1051,"children":1052},{"style":254},[1053],{"type":57,"value":1017},{"type":51,"tag":181,"props":1055,"children":1056},{"style":827},[1057],{"type":57,"value":1058}," then\n",{"type":51,"tag":181,"props":1060,"children":1062},{"class":183,"line":1061},22,[1063,1068,1072,1076,1080],{"type":51,"tag":181,"props":1064,"children":1065},{"style":248},[1066],{"type":57,"value":1067},"    REPO_ROOT",{"type":51,"tag":181,"props":1069,"children":1070},{"style":254},[1071],{"type":57,"value":358},{"type":51,"tag":181,"props":1073,"children":1074},{"style":254},[1075],{"type":57,"value":363},{"type":51,"tag":181,"props":1077,"children":1078},{"style":248},[1079],{"type":57,"value":1045},{"type":51,"tag":181,"props":1081,"children":1082},{"style":254},[1083],{"type":57,"value":373},{"type":51,"tag":181,"props":1085,"children":1087},{"class":183,"line":1086},23,[1088,1093,1097,1102,1107],{"type":51,"tag":181,"props":1089,"children":1090},{"style":450},[1091],{"type":57,"value":1092},"    echo",{"type":51,"tag":181,"props":1094,"children":1095},{"style":254},[1096],{"type":57,"value":506},{"type":51,"tag":181,"props":1098,"children":1099},{"style":193},[1100],{"type":57,"value":1101},"✓ Using auto-magic-calib checkout: ",{"type":51,"tag":181,"props":1103,"children":1104},{"style":248},[1105],{"type":57,"value":1106},"$REPO_ROOT",{"type":51,"tag":181,"props":1108,"children":1109},{"style":254},[1110],{"type":57,"value":373},{"type":51,"tag":181,"props":1112,"children":1114},{"class":183,"line":1113},24,[1115],{"type":51,"tag":181,"props":1116,"children":1117},{"style":827},[1118],{"type":57,"value":1119},"    break\n",{"type":51,"tag":181,"props":1121,"children":1123},{"class":183,"line":1122},25,[1124],{"type":51,"tag":181,"props":1125,"children":1126},{"style":827},[1127],{"type":57,"value":1128},"  fi\n",{"type":51,"tag":181,"props":1130,"children":1132},{"class":183,"line":1131},26,[1133],{"type":51,"tag":181,"props":1134,"children":1135},{"style":827},[1136],{"type":57,"value":1137},"done\n",{"type":51,"tag":181,"props":1139,"children":1141},{"class":183,"line":1140},27,[1142],{"type":51,"tag":181,"props":1143,"children":1144},{"emptyLinePlaceholder":465},[1145],{"type":57,"value":468},{"type":51,"tag":181,"props":1147,"children":1149},{"class":183,"line":1148},28,[1150,1155,1159,1164,1168,1172,1176,1181],{"type":51,"tag":181,"props":1151,"children":1152},{"style":827},[1153],{"type":57,"value":1154},"if",{"type":51,"tag":181,"props":1156,"children":1157},{"style":254},[1158],{"type":57,"value":540},{"type":51,"tag":181,"props":1160,"children":1161},{"style":254},[1162],{"type":57,"value":1163}," -z",{"type":51,"tag":181,"props":1165,"children":1166},{"style":254},[1167],{"type":57,"value":506},{"type":51,"tag":181,"props":1169,"children":1170},{"style":248},[1171],{"type":57,"value":1106},{"type":51,"tag":181,"props":1173,"children":1174},{"style":254},[1175],{"type":57,"value":363},{"type":51,"tag":181,"props":1177,"children":1178},{"style":254},[1179],{"type":57,"value":1180}," ];",{"type":51,"tag":181,"props":1182,"children":1183},{"style":827},[1184],{"type":57,"value":1058},{"type":51,"tag":181,"props":1186,"children":1188},{"class":183,"line":1187},29,[1189,1193,1197,1201,1205,1209,1213,1217,1222,1226,1231,1235,1239,1243,1247,1251],{"type":51,"tag":181,"props":1190,"children":1191},{"style":827},[1192],{"type":57,"value":1031},{"type":51,"tag":181,"props":1194,"children":1195},{"style":254},[1196],{"type":57,"value":540},{"type":51,"tag":181,"props":1198,"children":1199},{"style":254},[1200],{"type":57,"value":501},{"type":51,"tag":181,"props":1202,"children":1203},{"style":254},[1204],{"type":57,"value":506},{"type":51,"tag":181,"props":1206,"children":1207},{"style":248},[1208],{"type":57,"value":858},{"type":51,"tag":181,"props":1210,"children":1211},{"style":254},[1212],{"type":57,"value":363},{"type":51,"tag":181,"props":1214,"children":1215},{"style":254},[1216],{"type":57,"value":521},{"type":51,"tag":181,"props":1218,"children":1219},{"style":254},[1220],{"type":57,"value":1221}," &&",{"type":51,"tag":181,"props":1223,"children":1224},{"style":254},[1225],{"type":57,"value":540},{"type":51,"tag":181,"props":1227,"children":1228},{"style":254},[1229],{"type":57,"value":1230}," -d",{"type":51,"tag":181,"props":1232,"children":1233},{"style":254},[1234],{"type":57,"value":506},{"type":51,"tag":181,"props":1236,"children":1237},{"style":248},[1238],{"type":57,"value":858},{"type":51,"tag":181,"props":1240,"children":1241},{"style":193},[1242],{"type":57,"value":987},{"type":51,"tag":181,"props":1244,"children":1245},{"style":254},[1246],{"type":57,"value":363},{"type":51,"tag":181,"props":1248,"children":1249},{"style":254},[1250],{"type":57,"value":1180},{"type":51,"tag":181,"props":1252,"children":1253},{"style":827},[1254],{"type":57,"value":1058},{"type":51,"tag":181,"props":1256,"children":1258},{"class":183,"line":1257},30,[1259,1263,1267,1272,1276,1281],{"type":51,"tag":181,"props":1260,"children":1261},{"style":450},[1262],{"type":57,"value":1092},{"type":51,"tag":181,"props":1264,"children":1265},{"style":254},[1266],{"type":57,"value":506},{"type":51,"tag":181,"props":1268,"children":1269},{"style":193},[1270],{"type":57,"value":1271},"Found ",{"type":51,"tag":181,"props":1273,"children":1274},{"style":248},[1275],{"type":57,"value":858},{"type":51,"tag":181,"props":1277,"children":1278},{"style":193},[1279],{"type":57,"value":1280},"\u002Ftools\u002Fauto-magic-calib, but it is not an initialized AMC checkout.",{"type":51,"tag":181,"props":1282,"children":1283},{"style":254},[1284],{"type":57,"value":373},{"type":51,"tag":181,"props":1286,"children":1288},{"class":183,"line":1287},31,[1289,1293,1297,1302],{"type":51,"tag":181,"props":1290,"children":1291},{"style":450},[1292],{"type":57,"value":1092},{"type":51,"tag":181,"props":1294,"children":1295},{"style":254},[1296],{"type":57,"value":506},{"type":51,"tag":181,"props":1298,"children":1299},{"style":193},[1300],{"type":57,"value":1301},"If running from the DeepStream repository root:",{"type":51,"tag":181,"props":1303,"children":1304},{"style":254},[1305],{"type":57,"value":373},{"type":51,"tag":181,"props":1307,"children":1309},{"class":183,"line":1308},32,[1310,1314,1318,1323],{"type":51,"tag":181,"props":1311,"children":1312},{"style":450},[1313],{"type":57,"value":1092},{"type":51,"tag":181,"props":1315,"children":1316},{"style":254},[1317],{"type":57,"value":506},{"type":51,"tag":181,"props":1319,"children":1320},{"style":193},[1321],{"type":57,"value":1322},"  git submodule update --init tools\u002Fauto-magic-calib",{"type":51,"tag":181,"props":1324,"children":1325},{"style":254},[1326],{"type":57,"value":373},{"type":51,"tag":181,"props":1328,"children":1330},{"class":183,"line":1329},33,[1331],{"type":51,"tag":181,"props":1332,"children":1333},{"style":827},[1334],{"type":57,"value":1128},{"type":51,"tag":181,"props":1336,"children":1338},{"class":183,"line":1337},34,[1339],{"type":51,"tag":181,"props":1340,"children":1341},{"emptyLinePlaceholder":465},[1342],{"type":57,"value":468},{"type":51,"tag":181,"props":1344,"children":1346},{"class":183,"line":1345},35,[1347],{"type":51,"tag":181,"props":1348,"children":1350},{"style":1349},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[1351],{"type":57,"value":1352},"  # Nothing usable on disk — STOP and ask the user for confirmation using the\n",{"type":51,"tag":181,"props":1354,"children":1356},{"class":183,"line":1355},36,[1357],{"type":51,"tag":181,"props":1358,"children":1359},{"style":1349},[1360],{"type":57,"value":1361},"  # host's question mechanism; if none is available, ask in chat and wait.\n",{"type":51,"tag":181,"props":1363,"children":1365},{"class":183,"line":1364},37,[1366],{"type":51,"tag":181,"props":1367,"children":1368},{"style":1349},[1369],{"type":57,"value":1370},"  # Do NOT clone silently from this block or clone over a tracked submodule path.\n",{"type":51,"tag":181,"props":1372,"children":1374},{"class":183,"line":1373},38,[1375,1380,1384,1389],{"type":51,"tag":181,"props":1376,"children":1377},{"style":450},[1378],{"type":57,"value":1379},"  echo",{"type":51,"tag":181,"props":1381,"children":1382},{"style":254},[1383],{"type":57,"value":506},{"type":51,"tag":181,"props":1385,"children":1386},{"style":193},[1387],{"type":57,"value":1388},"No usable auto-magic-calib checkout found. Ask the user for confirmation:",{"type":51,"tag":181,"props":1390,"children":1391},{"style":254},[1392],{"type":57,"value":373},{"type":51,"tag":181,"props":1394,"children":1396},{"class":183,"line":1395},39,[1397,1401,1405,1410,1415,1420,1424,1429],{"type":51,"tag":181,"props":1398,"children":1399},{"style":450},[1400],{"type":57,"value":1379},{"type":51,"tag":181,"props":1402,"children":1403},{"style":254},[1404],{"type":57,"value":506},{"type":51,"tag":181,"props":1406,"children":1407},{"style":193},[1408],{"type":57,"value":1409},"  Clone ",{"type":51,"tag":181,"props":1411,"children":1412},{"style":248},[1413],{"type":57,"value":1414},"$REPO_URL",{"type":51,"tag":181,"props":1416,"children":1417},{"style":193},[1418],{"type":57,"value":1419}," into ",{"type":51,"tag":181,"props":1421,"children":1422},{"style":248},[1423],{"type":57,"value":1008},{"type":51,"tag":181,"props":1425,"children":1426},{"style":193},[1427],{"type":57,"value":1428},"? [y\u002FN]",{"type":51,"tag":181,"props":1430,"children":1431},{"style":254},[1432],{"type":57,"value":373},{"type":51,"tag":181,"props":1434,"children":1436},{"class":183,"line":1435},40,[1437,1441,1445,1450,1455,1460],{"type":51,"tag":181,"props":1438,"children":1439},{"style":450},[1440],{"type":57,"value":1379},{"type":51,"tag":181,"props":1442,"children":1443},{"style":254},[1444],{"type":57,"value":506},{"type":51,"tag":181,"props":1446,"children":1447},{"style":193},[1448],{"type":57,"value":1449},"On 'y' — run: git clone ",{"type":51,"tag":181,"props":1451,"children":1452},{"style":248},[1453],{"type":57,"value":1454},"\\\"$REPO_URL\\\"",{"type":51,"tag":181,"props":1456,"children":1457},{"style":248},[1458],{"type":57,"value":1459}," \\\"$DEFAULT_CLONE_DIR\\\"",{"type":51,"tag":181,"props":1461,"children":1462},{"style":254},[1463],{"type":57,"value":373},{"type":51,"tag":181,"props":1465,"children":1467},{"class":183,"line":1466},41,[1468,1473],{"type":51,"tag":181,"props":1469,"children":1470},{"style":450},[1471],{"type":57,"value":1472},"  exit",{"type":51,"tag":181,"props":1474,"children":1476},{"style":1475},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[1477],{"type":57,"value":1478}," 1\n",{"type":51,"tag":181,"props":1480,"children":1482},{"class":183,"line":1481},42,[1483],{"type":51,"tag":181,"props":1484,"children":1485},{"style":827},[1486],{"type":57,"value":1487},"fi\n",{"type":51,"tag":181,"props":1489,"children":1491},{"class":183,"line":1490},43,[1492],{"type":51,"tag":181,"props":1493,"children":1494},{"emptyLinePlaceholder":465},[1495],{"type":57,"value":468},{"type":51,"tag":181,"props":1497,"children":1499},{"class":183,"line":1498},44,[1500,1505,1509,1513],{"type":51,"tag":181,"props":1501,"children":1502},{"style":450},[1503],{"type":57,"value":1504},"cd",{"type":51,"tag":181,"props":1506,"children":1507},{"style":254},[1508],{"type":57,"value":506},{"type":51,"tag":181,"props":1510,"children":1511},{"style":248},[1512],{"type":57,"value":1106},{"type":51,"tag":181,"props":1514,"children":1515},{"style":254},[1516],{"type":57,"value":373},{"type":51,"tag":181,"props":1518,"children":1520},{"class":183,"line":1519},45,[1521,1527],{"type":51,"tag":181,"props":1522,"children":1524},{"style":1523},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[1525],{"type":57,"value":1526},"export",{"type":51,"tag":181,"props":1528,"children":1529},{"style":248},[1530],{"type":57,"value":1531}," REPO_ROOT\n",{"type":51,"tag":181,"props":1533,"children":1535},{"class":183,"line":1534},46,[1536,1541,1545,1550,1554],{"type":51,"tag":181,"props":1537,"children":1538},{"style":450},[1539],{"type":57,"value":1540},"echo",{"type":51,"tag":181,"props":1542,"children":1543},{"style":254},[1544],{"type":57,"value":506},{"type":51,"tag":181,"props":1546,"children":1547},{"style":193},[1548],{"type":57,"value":1549},"REPO_ROOT=",{"type":51,"tag":181,"props":1551,"children":1552},{"style":248},[1553],{"type":57,"value":1106},{"type":51,"tag":181,"props":1555,"children":1556},{"style":254},[1557],{"type":57,"value":373},{"type":51,"tag":278,"props":1559,"children":1560},{},[1561],{"type":51,"tag":60,"props":1562,"children":1563},{},[1564,1568,1570,1575,1577,1583],{"type":51,"tag":285,"props":1565,"children":1566},{},[1567],{"type":57,"value":289},{"type":57,"value":1569},": never clone silently. Prefer initialized DeepStream ",{"type":51,"tag":91,"props":1571,"children":1573},{"className":1572},[],[1574],{"type":57,"value":103},{"type":57,"value":1576},"; do not clone over that submodule path. If it exists but is empty, ask the user to run ",{"type":51,"tag":91,"props":1578,"children":1580},{"className":1579},[],[1581],{"type":57,"value":1582},"git submodule update --init tools\u002Fauto-magic-calib",{"type":57,"value":1584},". Honour an alternate AMC path if provided.",{"type":51,"tag":163,"props":1586,"children":1588},{"id":1587},"step-0c-install-python-venv-new-systems-only",[1589],{"type":57,"value":1590},"Step 0c: Install Python venv (New Systems Only)",{"type":51,"tag":60,"props":1592,"children":1593},{},[1594,1596,1602,1604,1610],{"type":57,"value":1595},"On a fresh system, ",{"type":51,"tag":91,"props":1597,"children":1599},{"className":1598},[],[1600],{"type":57,"value":1601},"pip",{"type":57,"value":1603}," and ",{"type":51,"tag":91,"props":1605,"children":1607},{"className":1606},[],[1608],{"type":57,"value":1609},"python3-venv",{"type":57,"value":1611}," may not be available. Install them first:",{"type":51,"tag":170,"props":1613,"children":1615},{"className":172,"code":1614,"language":174,"meta":175,"style":175},"# Create a venv for HuggingFace CLI (project-local preferred)\nREPO_DIR=\"$(git rev-parse --show-toplevel 2>\u002Fdev\u002Fnull || pwd)\"\nHF_VENV=\"${REPO_DIR}\u002Fvenv\"\npython3 -m venv \"$HF_VENV\" 2>\u002Fdev\u002Fnull || {\n  echo \"ERROR: python3-venv not available.\" >&2\n  echo \"Install it manually: sudo apt install -y python3-venv python3-pip\" >&2\n  exit 1\n}\n\n# Install HuggingFace hub (needed for VGGT download)\n\"$HF_VENV\u002Fbin\u002Fpip\" install --upgrade pip huggingface_hub\n",[1616],{"type":51,"tag":91,"props":1617,"children":1618},{"__ignoreMap":175},[1619,1627,1672,1707,1755,1780,1804,1815,1822,1829,1837],{"type":51,"tag":181,"props":1620,"children":1621},{"class":183,"line":184},[1622],{"type":51,"tag":181,"props":1623,"children":1624},{"style":1349},[1625],{"type":57,"value":1626},"# Create a venv for HuggingFace CLI (project-local preferred)\n",{"type":51,"tag":181,"props":1628,"children":1629},{"class":183,"line":376},[1630,1635,1639,1643,1647,1651,1655,1659,1663,1668],{"type":51,"tag":181,"props":1631,"children":1632},{"style":248},[1633],{"type":57,"value":1634},"REPO_DIR",{"type":51,"tag":181,"props":1636,"children":1637},{"style":254},[1638],{"type":57,"value":358},{"type":51,"tag":181,"props":1640,"children":1641},{"style":254},[1642],{"type":57,"value":422},{"type":51,"tag":181,"props":1644,"children":1645},{"style":188},[1646],{"type":57,"value":427},{"type":51,"tag":181,"props":1648,"children":1649},{"style":193},[1650],{"type":57,"value":432},{"type":51,"tag":181,"props":1652,"children":1653},{"style":254},[1654],{"type":57,"value":437},{"type":51,"tag":181,"props":1656,"children":1657},{"style":193},[1658],{"type":57,"value":442},{"type":51,"tag":181,"props":1660,"children":1661},{"style":254},[1662],{"type":57,"value":447},{"type":51,"tag":181,"props":1664,"children":1665},{"style":450},[1666],{"type":57,"value":1667}," pwd",{"type":51,"tag":181,"props":1669,"children":1670},{"style":254},[1671],{"type":57,"value":458},{"type":51,"tag":181,"props":1673,"children":1674},{"class":183,"line":407},[1675,1680,1684,1689,1693,1698,1703],{"type":51,"tag":181,"props":1676,"children":1677},{"style":248},[1678],{"type":57,"value":1679},"HF_VENV",{"type":51,"tag":181,"props":1681,"children":1682},{"style":254},[1683],{"type":57,"value":358},{"type":51,"tag":181,"props":1685,"children":1686},{"style":254},[1687],{"type":57,"value":1688},"\"${",{"type":51,"tag":181,"props":1690,"children":1691},{"style":248},[1692],{"type":57,"value":1634},{"type":51,"tag":181,"props":1694,"children":1695},{"style":254},[1696],{"type":57,"value":1697},"}",{"type":51,"tag":181,"props":1699,"children":1700},{"style":193},[1701],{"type":57,"value":1702},"\u002Fvenv",{"type":51,"tag":181,"props":1704,"children":1705},{"style":254},[1706],{"type":57,"value":373},{"type":51,"tag":181,"props":1708,"children":1709},{"class":183,"line":461},[1710,1715,1720,1725,1729,1734,1738,1742,1746,1751],{"type":51,"tag":181,"props":1711,"children":1712},{"style":188},[1713],{"type":57,"value":1714},"python3",{"type":51,"tag":181,"props":1716,"children":1717},{"style":193},[1718],{"type":57,"value":1719}," -m",{"type":51,"tag":181,"props":1721,"children":1722},{"style":193},[1723],{"type":57,"value":1724}," venv",{"type":51,"tag":181,"props":1726,"children":1727},{"style":254},[1728],{"type":57,"value":506},{"type":51,"tag":181,"props":1730,"children":1731},{"style":248},[1732],{"type":57,"value":1733},"$HF_VENV",{"type":51,"tag":181,"props":1735,"children":1736},{"style":254},[1737],{"type":57,"value":363},{"type":51,"tag":181,"props":1739,"children":1740},{"style":254},[1741],{"type":57,"value":622},{"type":51,"tag":181,"props":1743,"children":1744},{"style":193},[1745],{"type":57,"value":627},{"type":51,"tag":181,"props":1747,"children":1748},{"style":254},[1749],{"type":57,"value":1750}," ||",{"type":51,"tag":181,"props":1752,"children":1753},{"style":254},[1754],{"type":57,"value":487},{"type":51,"tag":181,"props":1756,"children":1757},{"class":183,"line":471},[1758,1762,1766,1771,1775],{"type":51,"tag":181,"props":1759,"children":1760},{"style":450},[1761],{"type":57,"value":1379},{"type":51,"tag":181,"props":1763,"children":1764},{"style":254},[1765],{"type":57,"value":506},{"type":51,"tag":181,"props":1767,"children":1768},{"style":193},[1769],{"type":57,"value":1770},"ERROR: python3-venv not available.",{"type":51,"tag":181,"props":1772,"children":1773},{"style":254},[1774],{"type":57,"value":363},{"type":51,"tag":181,"props":1776,"children":1777},{"style":254},[1778],{"type":57,"value":1779}," >&2\n",{"type":51,"tag":181,"props":1781,"children":1782},{"class":183,"line":490},[1783,1787,1791,1796,1800],{"type":51,"tag":181,"props":1784,"children":1785},{"style":450},[1786],{"type":57,"value":1379},{"type":51,"tag":181,"props":1788,"children":1789},{"style":254},[1790],{"type":57,"value":506},{"type":51,"tag":181,"props":1792,"children":1793},{"style":193},[1794],{"type":57,"value":1795},"Install it manually: sudo apt install -y python3-venv python3-pip",{"type":51,"tag":181,"props":1797,"children":1798},{"style":254},[1799],{"type":57,"value":363},{"type":51,"tag":181,"props":1801,"children":1802},{"style":254},[1803],{"type":57,"value":1779},{"type":51,"tag":181,"props":1805,"children":1806},{"class":183,"line":529},[1807,1811],{"type":51,"tag":181,"props":1808,"children":1809},{"style":450},[1810],{"type":57,"value":1472},{"type":51,"tag":181,"props":1812,"children":1813},{"style":1475},[1814],{"type":57,"value":1478},{"type":51,"tag":181,"props":1816,"children":1817},{"class":183,"line":573},[1818],{"type":51,"tag":181,"props":1819,"children":1820},{"style":254},[1821],{"type":57,"value":794},{"type":51,"tag":181,"props":1823,"children":1824},{"class":183,"line":634},[1825],{"type":51,"tag":181,"props":1826,"children":1827},{"emptyLinePlaceholder":465},[1828],{"type":57,"value":468},{"type":51,"tag":181,"props":1830,"children":1831},{"class":183,"line":675},[1832],{"type":51,"tag":181,"props":1833,"children":1834},{"style":1349},[1835],{"type":57,"value":1836},"# Install HuggingFace hub (needed for VGGT download)\n",{"type":51,"tag":181,"props":1838,"children":1839},{"class":183,"line":733},[1840,1844,1848,1853,1858,1863,1868],{"type":51,"tag":181,"props":1841,"children":1842},{"style":188},[1843],{"type":57,"value":363},{"type":51,"tag":181,"props":1845,"children":1846},{"style":248},[1847],{"type":57,"value":1733},{"type":51,"tag":181,"props":1849,"children":1850},{"style":188},[1851],{"type":57,"value":1852},"\u002Fbin\u002Fpip\"",{"type":51,"tag":181,"props":1854,"children":1855},{"style":193},[1856],{"type":57,"value":1857}," install",{"type":51,"tag":181,"props":1859,"children":1860},{"style":193},[1861],{"type":57,"value":1862}," --upgrade",{"type":51,"tag":181,"props":1864,"children":1865},{"style":193},[1866],{"type":57,"value":1867}," pip",{"type":51,"tag":181,"props":1869,"children":1870},{"style":193},[1871],{"type":57,"value":1872}," huggingface_hub\n",{"type":51,"tag":278,"props":1874,"children":1875},{},[1876],{"type":51,"tag":60,"props":1877,"children":1878},{},[1879,1884,1886,1892,1894,1900,1902,1908],{"type":51,"tag":285,"props":1880,"children":1881},{},[1882],{"type":57,"value":1883},"Note",{"type":57,"value":1885},": Skip this step if a venv with ",{"type":51,"tag":91,"props":1887,"children":1889},{"className":1888},[],[1890],{"type":57,"value":1891},"hf",{"type":57,"value":1893}," already exists (check ",{"type":51,"tag":91,"props":1895,"children":1897},{"className":1896},[],[1898],{"type":57,"value":1899},"venv\u002Fbin\u002Fhf",{"type":57,"value":1901}," in the repo root or ",{"type":51,"tag":91,"props":1903,"children":1905},{"className":1904},[],[1906],{"type":57,"value":1907},"~\u002Fvenv\u002Famc\u002Fbin\u002Fhf",{"type":57,"value":1909},").",{"type":51,"tag":163,"props":1911,"children":1913},{"id":1912},"step-1-login-to-ngc",[1914],{"type":57,"value":1915},"Step 1: Login to NGC",{"type":51,"tag":60,"props":1917,"children":1918},{},[1919],{"type":57,"value":1920},"Ask the user for their NGC API key using the host's question mechanism; if none is available, ask in chat and wait. Then run:",{"type":51,"tag":170,"props":1922,"children":1924},{"className":172,"code":1923,"language":174,"meta":175,"style":175},"echo \"\u003CNGC_API_KEY>\" | docker login nvcr.io --username '$oauthtoken' --password-stdin\necho \"✓ NGC authentication complete\"\n",[1925],{"type":51,"tag":91,"props":1926,"children":1927},{"__ignoreMap":175},[1928,1992],{"type":51,"tag":181,"props":1929,"children":1930},{"class":183,"line":184},[1931,1935,1939,1944,1948,1953,1957,1962,1967,1972,1977,1982,1987],{"type":51,"tag":181,"props":1932,"children":1933},{"style":450},[1934],{"type":57,"value":1540},{"type":51,"tag":181,"props":1936,"children":1937},{"style":254},[1938],{"type":57,"value":506},{"type":51,"tag":181,"props":1940,"children":1941},{"style":193},[1942],{"type":57,"value":1943},"\u003CNGC_API_KEY>",{"type":51,"tag":181,"props":1945,"children":1946},{"style":254},[1947],{"type":57,"value":363},{"type":51,"tag":181,"props":1949,"children":1950},{"style":254},[1951],{"type":57,"value":1952}," |",{"type":51,"tag":181,"props":1954,"children":1955},{"style":188},[1956],{"type":57,"value":245},{"type":51,"tag":181,"props":1958,"children":1959},{"style":193},[1960],{"type":57,"value":1961}," login",{"type":51,"tag":181,"props":1963,"children":1964},{"style":193},[1965],{"type":57,"value":1966}," nvcr.io",{"type":51,"tag":181,"props":1968,"children":1969},{"style":193},[1970],{"type":57,"value":1971}," --username",{"type":51,"tag":181,"props":1973,"children":1974},{"style":254},[1975],{"type":57,"value":1976}," '",{"type":51,"tag":181,"props":1978,"children":1979},{"style":193},[1980],{"type":57,"value":1981},"$oauthtoken",{"type":51,"tag":181,"props":1983,"children":1984},{"style":254},[1985],{"type":57,"value":1986},"'",{"type":51,"tag":181,"props":1988,"children":1989},{"style":193},[1990],{"type":57,"value":1991}," --password-stdin\n",{"type":51,"tag":181,"props":1993,"children":1994},{"class":183,"line":376},[1995,1999,2003,2008],{"type":51,"tag":181,"props":1996,"children":1997},{"style":450},[1998],{"type":57,"value":1540},{"type":51,"tag":181,"props":2000,"children":2001},{"style":254},[2002],{"type":57,"value":506},{"type":51,"tag":181,"props":2004,"children":2005},{"style":193},[2006],{"type":57,"value":2007},"✓ NGC authentication complete",{"type":51,"tag":181,"props":2009,"children":2010},{"style":254},[2011],{"type":57,"value":373},{"type":51,"tag":163,"props":2013,"children":2015},{"id":2014},"step-2-download-vggt-model-if-not-already-present",[2016],{"type":57,"value":2017},"Step 2: Download VGGT Model (If Not Already Present)",{"type":51,"tag":170,"props":2019,"children":2021},{"className":172,"code":2020,"language":174,"meta":175,"style":175},"export REPO_ROOT=$(git rev-parse --show-toplevel)\ncd \"$REPO_ROOT\"\n\nif [ -f \"models\u002Fvggt\u002Fvggt_1B_commercial.pt\" ]; then\n  echo \"✓ VGGT model already present\"\nelse\n  echo \"✗ VGGT model not found\"\n  echo \"Options:\"\n  echo \"  1. Continue without VGGT (AMC only - sufficient for most use cases)\"\n  echo \"  2. Download VGGT model (~4.7GB, requires HuggingFace account)\"\nfi\n",[2022],{"type":51,"tag":91,"props":2023,"children":2024},{"__ignoreMap":175},[2025,2061,2080,2087,2123,2143,2151,2171,2191,2211,2231],{"type":51,"tag":181,"props":2026,"children":2027},{"class":183,"line":184},[2028,2032,2037,2042,2046,2051,2056],{"type":51,"tag":181,"props":2029,"children":2030},{"style":1523},[2031],{"type":57,"value":1526},{"type":51,"tag":181,"props":2033,"children":2034},{"style":248},[2035],{"type":57,"value":2036}," REPO_ROOT",{"type":51,"tag":181,"props":2038,"children":2039},{"style":254},[2040],{"type":57,"value":2041},"=$(",{"type":51,"tag":181,"props":2043,"children":2044},{"style":188},[2045],{"type":57,"value":427},{"type":51,"tag":181,"props":2047,"children":2048},{"style":193},[2049],{"type":57,"value":2050}," rev-parse",{"type":51,"tag":181,"props":2052,"children":2053},{"style":193},[2054],{"type":57,"value":2055}," --show-toplevel",{"type":51,"tag":181,"props":2057,"children":2058},{"style":254},[2059],{"type":57,"value":2060},")\n",{"type":51,"tag":181,"props":2062,"children":2063},{"class":183,"line":376},[2064,2068,2072,2076],{"type":51,"tag":181,"props":2065,"children":2066},{"style":450},[2067],{"type":57,"value":1504},{"type":51,"tag":181,"props":2069,"children":2070},{"style":254},[2071],{"type":57,"value":506},{"type":51,"tag":181,"props":2073,"children":2074},{"style":248},[2075],{"type":57,"value":1106},{"type":51,"tag":181,"props":2077,"children":2078},{"style":254},[2079],{"type":57,"value":373},{"type":51,"tag":181,"props":2081,"children":2082},{"class":183,"line":407},[2083],{"type":51,"tag":181,"props":2084,"children":2085},{"emptyLinePlaceholder":465},[2086],{"type":57,"value":468},{"type":51,"tag":181,"props":2088,"children":2089},{"class":183,"line":461},[2090,2094,2098,2102,2106,2111,2115,2119],{"type":51,"tag":181,"props":2091,"children":2092},{"style":827},[2093],{"type":57,"value":1154},{"type":51,"tag":181,"props":2095,"children":2096},{"style":254},[2097],{"type":57,"value":540},{"type":51,"tag":181,"props":2099,"children":2100},{"style":254},[2101],{"type":57,"value":545},{"type":51,"tag":181,"props":2103,"children":2104},{"style":254},[2105],{"type":57,"value":506},{"type":51,"tag":181,"props":2107,"children":2108},{"style":193},[2109],{"type":57,"value":2110},"models\u002Fvggt\u002Fvggt_1B_commercial.pt",{"type":51,"tag":181,"props":2112,"children":2113},{"style":254},[2114],{"type":57,"value":363},{"type":51,"tag":181,"props":2116,"children":2117},{"style":254},[2118],{"type":57,"value":1180},{"type":51,"tag":181,"props":2120,"children":2121},{"style":827},[2122],{"type":57,"value":1058},{"type":51,"tag":181,"props":2124,"children":2125},{"class":183,"line":471},[2126,2130,2134,2139],{"type":51,"tag":181,"props":2127,"children":2128},{"style":450},[2129],{"type":57,"value":1379},{"type":51,"tag":181,"props":2131,"children":2132},{"style":254},[2133],{"type":57,"value":506},{"type":51,"tag":181,"props":2135,"children":2136},{"style":193},[2137],{"type":57,"value":2138},"✓ VGGT model already present",{"type":51,"tag":181,"props":2140,"children":2141},{"style":254},[2142],{"type":57,"value":373},{"type":51,"tag":181,"props":2144,"children":2145},{"class":183,"line":490},[2146],{"type":51,"tag":181,"props":2147,"children":2148},{"style":827},[2149],{"type":57,"value":2150},"else\n",{"type":51,"tag":181,"props":2152,"children":2153},{"class":183,"line":529},[2154,2158,2162,2167],{"type":51,"tag":181,"props":2155,"children":2156},{"style":450},[2157],{"type":57,"value":1379},{"type":51,"tag":181,"props":2159,"children":2160},{"style":254},[2161],{"type":57,"value":506},{"type":51,"tag":181,"props":2163,"children":2164},{"style":193},[2165],{"type":57,"value":2166},"✗ VGGT model not found",{"type":51,"tag":181,"props":2168,"children":2169},{"style":254},[2170],{"type":57,"value":373},{"type":51,"tag":181,"props":2172,"children":2173},{"class":183,"line":573},[2174,2178,2182,2187],{"type":51,"tag":181,"props":2175,"children":2176},{"style":450},[2177],{"type":57,"value":1379},{"type":51,"tag":181,"props":2179,"children":2180},{"style":254},[2181],{"type":57,"value":506},{"type":51,"tag":181,"props":2183,"children":2184},{"style":193},[2185],{"type":57,"value":2186},"Options:",{"type":51,"tag":181,"props":2188,"children":2189},{"style":254},[2190],{"type":57,"value":373},{"type":51,"tag":181,"props":2192,"children":2193},{"class":183,"line":634},[2194,2198,2202,2207],{"type":51,"tag":181,"props":2195,"children":2196},{"style":450},[2197],{"type":57,"value":1379},{"type":51,"tag":181,"props":2199,"children":2200},{"style":254},[2201],{"type":57,"value":506},{"type":51,"tag":181,"props":2203,"children":2204},{"style":193},[2205],{"type":57,"value":2206},"  1. Continue without VGGT (AMC only - sufficient for most use cases)",{"type":51,"tag":181,"props":2208,"children":2209},{"style":254},[2210],{"type":57,"value":373},{"type":51,"tag":181,"props":2212,"children":2213},{"class":183,"line":675},[2214,2218,2222,2227],{"type":51,"tag":181,"props":2215,"children":2216},{"style":450},[2217],{"type":57,"value":1379},{"type":51,"tag":181,"props":2219,"children":2220},{"style":254},[2221],{"type":57,"value":506},{"type":51,"tag":181,"props":2223,"children":2224},{"style":193},[2225],{"type":57,"value":2226},"  2. Download VGGT model (~4.7GB, requires HuggingFace account)",{"type":51,"tag":181,"props":2228,"children":2229},{"style":254},[2230],{"type":57,"value":373},{"type":51,"tag":181,"props":2232,"children":2233},{"class":183,"line":733},[2234],{"type":51,"tag":181,"props":2235,"children":2236},{"style":827},[2237],{"type":57,"value":1487},{"type":51,"tag":60,"props":2239,"children":2240},{},[2241,2246,2248,2256,2258,2264,2266,2272,2274,2280],{"type":51,"tag":285,"props":2242,"children":2243},{},[2244],{"type":57,"value":2245},"To download VGGT",{"type":57,"value":2247},": ask the user to accept the license at ",{"type":51,"tag":2249,"props":2250,"children":2254},"a",{"href":2251,"rel":2252},"https:\u002F\u002Fhuggingface.co\u002Ffacebook\u002FVGGT-1B-Commercial",[2253],"nofollow",[2255],{"type":57,"value":2251},{"type":57,"value":2257}," and provide a read token from ",{"type":51,"tag":2249,"props":2259,"children":2262},{"href":2260,"rel":2261},"https:\u002F\u002Fhuggingface.co\u002Fsettings\u002Ftokens",[2253],[2263],{"type":57,"value":2260},{"type":57,"value":2265}," using the host's question mechanism. Pass it through ",{"type":51,"tag":91,"props":2267,"children":2269},{"className":2268},[],[2270],{"type":57,"value":2271},"HF_TOKEN",{"type":57,"value":2273}," so it is not exposed in ",{"type":51,"tag":91,"props":2275,"children":2277},{"className":2276},[],[2278],{"type":57,"value":2279},"ps",{"type":57,"value":2281}," output:",{"type":51,"tag":170,"props":2283,"children":2285},{"className":172,"code":2284,"language":174,"meta":175,"style":175},"REPO_DIR=\"$(git rev-parse --show-toplevel 2>\u002Fdev\u002Fnull || pwd)\"\ncd \"$REPO_DIR\"\n\n# Find the HuggingFace CLI binary (named 'hf', not 'huggingface-cli')\nHF_BIN=\"$(find \"$REPO_DIR\u002Fvenv\" ~\u002Fvenv\u002Famc -name hf -type f 2>\u002Fdev\u002Fnull | head -1)\"\n{ [ -z \"$HF_BIN\" ] || [ ! -x \"$HF_BIN\" ]; } && { echo \"ERROR: hf binary not found or not executable; install the hf CLI (Step 0c) or set HF_BIN\" >&2; exit 1; }\n\n# Do NOT use --token on the command line (leaks via ps\u002Fargv). The HF CLI\n# reads HF_TOKEN from the environment automatically.\nHF_TOKEN=\"\u003CHF_TOKEN>\" \"$HF_BIN\" download facebook\u002FVGGT-1B-Commercial \\\n  --local-dir models\u002Fvggt\u002F\n\n# Verify\nls -lh models\u002Fvggt\u002Fvggt_1B_commercial.pt\n# Should show ~4.7GB file\n",[2286],{"type":51,"tag":91,"props":2287,"children":2288},{"__ignoreMap":175},[2289,2332,2352,2359,2367,2436,2559,2566,2574,2582,2632,2645,2652,2660,2678],{"type":51,"tag":181,"props":2290,"children":2291},{"class":183,"line":184},[2292,2296,2300,2304,2308,2312,2316,2320,2324,2328],{"type":51,"tag":181,"props":2293,"children":2294},{"style":248},[2295],{"type":57,"value":1634},{"type":51,"tag":181,"props":2297,"children":2298},{"style":254},[2299],{"type":57,"value":358},{"type":51,"tag":181,"props":2301,"children":2302},{"style":254},[2303],{"type":57,"value":422},{"type":51,"tag":181,"props":2305,"children":2306},{"style":188},[2307],{"type":57,"value":427},{"type":51,"tag":181,"props":2309,"children":2310},{"style":193},[2311],{"type":57,"value":432},{"type":51,"tag":181,"props":2313,"children":2314},{"style":254},[2315],{"type":57,"value":437},{"type":51,"tag":181,"props":2317,"children":2318},{"style":193},[2319],{"type":57,"value":442},{"type":51,"tag":181,"props":2321,"children":2322},{"style":254},[2323],{"type":57,"value":447},{"type":51,"tag":181,"props":2325,"children":2326},{"style":450},[2327],{"type":57,"value":1667},{"type":51,"tag":181,"props":2329,"children":2330},{"style":254},[2331],{"type":57,"value":458},{"type":51,"tag":181,"props":2333,"children":2334},{"class":183,"line":376},[2335,2339,2343,2348],{"type":51,"tag":181,"props":2336,"children":2337},{"style":450},[2338],{"type":57,"value":1504},{"type":51,"tag":181,"props":2340,"children":2341},{"style":254},[2342],{"type":57,"value":506},{"type":51,"tag":181,"props":2344,"children":2345},{"style":248},[2346],{"type":57,"value":2347},"$REPO_DIR",{"type":51,"tag":181,"props":2349,"children":2350},{"style":254},[2351],{"type":57,"value":373},{"type":51,"tag":181,"props":2353,"children":2354},{"class":183,"line":407},[2355],{"type":51,"tag":181,"props":2356,"children":2357},{"emptyLinePlaceholder":465},[2358],{"type":57,"value":468},{"type":51,"tag":181,"props":2360,"children":2361},{"class":183,"line":461},[2362],{"type":51,"tag":181,"props":2363,"children":2364},{"style":1349},[2365],{"type":57,"value":2366},"# Find the HuggingFace CLI binary (named 'hf', not 'huggingface-cli')\n",{"type":51,"tag":181,"props":2368,"children":2369},{"class":183,"line":471},[2370,2375,2379,2383,2388,2392,2396,2400,2404,2409,2413,2417,2422,2427,2432],{"type":51,"tag":181,"props":2371,"children":2372},{"style":248},[2373],{"type":57,"value":2374},"HF_BIN",{"type":51,"tag":181,"props":2376,"children":2377},{"style":254},[2378],{"type":57,"value":358},{"type":51,"tag":181,"props":2380,"children":2381},{"style":254},[2382],{"type":57,"value":422},{"type":51,"tag":181,"props":2384,"children":2385},{"style":188},[2386],{"type":57,"value":2387},"find",{"type":51,"tag":181,"props":2389,"children":2390},{"style":254},[2391],{"type":57,"value":506},{"type":51,"tag":181,"props":2393,"children":2394},{"style":248},[2395],{"type":57,"value":2347},{"type":51,"tag":181,"props":2397,"children":2398},{"style":193},[2399],{"type":57,"value":1702},{"type":51,"tag":181,"props":2401,"children":2402},{"style":254},[2403],{"type":57,"value":363},{"type":51,"tag":181,"props":2405,"children":2406},{"style":193},[2407],{"type":57,"value":2408}," ~\u002Fvenv\u002Famc -name hf -type f ",{"type":51,"tag":181,"props":2410,"children":2411},{"style":254},[2412],{"type":57,"value":437},{"type":51,"tag":181,"props":2414,"children":2415},{"style":193},[2416],{"type":57,"value":442},{"type":51,"tag":181,"props":2418,"children":2419},{"style":254},[2420],{"type":57,"value":2421},"|",{"type":51,"tag":181,"props":2423,"children":2424},{"style":188},[2425],{"type":57,"value":2426}," head",{"type":51,"tag":181,"props":2428,"children":2429},{"style":193},[2430],{"type":57,"value":2431}," -1",{"type":51,"tag":181,"props":2433,"children":2434},{"style":254},[2435],{"type":57,"value":458},{"type":51,"tag":181,"props":2437,"children":2438},{"class":183,"line":490},[2439,2444,2448,2452,2456,2461,2465,2469,2473,2477,2482,2487,2491,2495,2499,2503,2508,2512,2517,2522,2526,2531,2535,2540,2545,2550,2554],{"type":51,"tag":181,"props":2440,"children":2441},{"style":254},[2442],{"type":57,"value":2443},"{",{"type":51,"tag":181,"props":2445,"children":2446},{"style":254},[2447],{"type":57,"value":540},{"type":51,"tag":181,"props":2449,"children":2450},{"style":254},[2451],{"type":57,"value":1163},{"type":51,"tag":181,"props":2453,"children":2454},{"style":254},[2455],{"type":57,"value":506},{"type":51,"tag":181,"props":2457,"children":2458},{"style":248},[2459],{"type":57,"value":2460},"$HF_BIN",{"type":51,"tag":181,"props":2462,"children":2463},{"style":254},[2464],{"type":57,"value":363},{"type":51,"tag":181,"props":2466,"children":2467},{"style":254},[2468],{"type":57,"value":521},{"type":51,"tag":181,"props":2470,"children":2471},{"style":254},[2472],{"type":57,"value":1750},{"type":51,"tag":181,"props":2474,"children":2475},{"style":254},[2476],{"type":57,"value":540},{"type":51,"tag":181,"props":2478,"children":2479},{"style":254},[2480],{"type":57,"value":2481}," !",{"type":51,"tag":181,"props":2483,"children":2484},{"style":254},[2485],{"type":57,"value":2486}," -x",{"type":51,"tag":181,"props":2488,"children":2489},{"style":254},[2490],{"type":57,"value":506},{"type":51,"tag":181,"props":2492,"children":2493},{"style":248},[2494],{"type":57,"value":2460},{"type":51,"tag":181,"props":2496,"children":2497},{"style":254},[2498],{"type":57,"value":363},{"type":51,"tag":181,"props":2500,"children":2501},{"style":254},[2502],{"type":57,"value":1180},{"type":51,"tag":181,"props":2504,"children":2505},{"style":254},[2506],{"type":57,"value":2507}," }",{"type":51,"tag":181,"props":2509,"children":2510},{"style":254},[2511],{"type":57,"value":1221},{"type":51,"tag":181,"props":2513,"children":2514},{"style":254},[2515],{"type":57,"value":2516}," {",{"type":51,"tag":181,"props":2518,"children":2519},{"style":450},[2520],{"type":57,"value":2521}," echo",{"type":51,"tag":181,"props":2523,"children":2524},{"style":254},[2525],{"type":57,"value":506},{"type":51,"tag":181,"props":2527,"children":2528},{"style":193},[2529],{"type":57,"value":2530},"ERROR: hf binary not found or not executable; install the hf CLI (Step 0c) or set HF_BIN",{"type":51,"tag":181,"props":2532,"children":2533},{"style":254},[2534],{"type":57,"value":363},{"type":51,"tag":181,"props":2536,"children":2537},{"style":254},[2538],{"type":57,"value":2539}," >&2;",{"type":51,"tag":181,"props":2541,"children":2542},{"style":450},[2543],{"type":57,"value":2544}," exit",{"type":51,"tag":181,"props":2546,"children":2547},{"style":1475},[2548],{"type":57,"value":2549}," 1",{"type":51,"tag":181,"props":2551,"children":2552},{"style":254},[2553],{"type":57,"value":1017},{"type":51,"tag":181,"props":2555,"children":2556},{"style":254},[2557],{"type":57,"value":2558}," }\n",{"type":51,"tag":181,"props":2560,"children":2561},{"class":183,"line":529},[2562],{"type":51,"tag":181,"props":2563,"children":2564},{"emptyLinePlaceholder":465},[2565],{"type":57,"value":468},{"type":51,"tag":181,"props":2567,"children":2568},{"class":183,"line":573},[2569],{"type":51,"tag":181,"props":2570,"children":2571},{"style":1349},[2572],{"type":57,"value":2573},"# Do NOT use --token on the command line (leaks via ps\u002Fargv). The HF CLI\n",{"type":51,"tag":181,"props":2575,"children":2576},{"class":183,"line":634},[2577],{"type":51,"tag":181,"props":2578,"children":2579},{"style":1349},[2580],{"type":57,"value":2581},"# reads HF_TOKEN from the environment automatically.\n",{"type":51,"tag":181,"props":2583,"children":2584},{"class":183,"line":675},[2585,2589,2593,2597,2602,2606,2610,2614,2618,2623,2628],{"type":51,"tag":181,"props":2586,"children":2587},{"style":248},[2588],{"type":57,"value":2271},{"type":51,"tag":181,"props":2590,"children":2591},{"style":254},[2592],{"type":57,"value":358},{"type":51,"tag":181,"props":2594,"children":2595},{"style":254},[2596],{"type":57,"value":363},{"type":51,"tag":181,"props":2598,"children":2599},{"style":193},[2600],{"type":57,"value":2601},"\u003CHF_TOKEN>",{"type":51,"tag":181,"props":2603,"children":2604},{"style":254},[2605],{"type":57,"value":363},{"type":51,"tag":181,"props":2607,"children":2608},{"style":254},[2609],{"type":57,"value":506},{"type":51,"tag":181,"props":2611,"children":2612},{"style":248},[2613],{"type":57,"value":2460},{"type":51,"tag":181,"props":2615,"children":2616},{"style":254},[2617],{"type":57,"value":363},{"type":51,"tag":181,"props":2619,"children":2620},{"style":188},[2621],{"type":57,"value":2622}," download",{"type":51,"tag":181,"props":2624,"children":2625},{"style":193},[2626],{"type":57,"value":2627}," facebook\u002FVGGT-1B-Commercial",{"type":51,"tag":181,"props":2629,"children":2630},{"style":248},[2631],{"type":57,"value":526},{"type":51,"tag":181,"props":2633,"children":2634},{"class":183,"line":733},[2635,2640],{"type":51,"tag":181,"props":2636,"children":2637},{"style":193},[2638],{"type":57,"value":2639},"  --local-dir",{"type":51,"tag":181,"props":2641,"children":2642},{"style":193},[2643],{"type":57,"value":2644}," models\u002Fvggt\u002F\n",{"type":51,"tag":181,"props":2646,"children":2647},{"class":183,"line":788},[2648],{"type":51,"tag":181,"props":2649,"children":2650},{"emptyLinePlaceholder":465},[2651],{"type":57,"value":468},{"type":51,"tag":181,"props":2653,"children":2654},{"class":183,"line":797},[2655],{"type":51,"tag":181,"props":2656,"children":2657},{"style":1349},[2658],{"type":57,"value":2659},"# Verify\n",{"type":51,"tag":181,"props":2661,"children":2662},{"class":183,"line":805},[2663,2668,2673],{"type":51,"tag":181,"props":2664,"children":2665},{"style":188},[2666],{"type":57,"value":2667},"ls",{"type":51,"tag":181,"props":2669,"children":2670},{"style":193},[2671],{"type":57,"value":2672}," -lh",{"type":51,"tag":181,"props":2674,"children":2675},{"style":193},[2676],{"type":57,"value":2677}," models\u002Fvggt\u002Fvggt_1B_commercial.pt\n",{"type":51,"tag":181,"props":2679,"children":2680},{"class":183,"line":823},[2681],{"type":51,"tag":181,"props":2682,"children":2683},{"style":1349},[2684],{"type":57,"value":2685},"# Should show ~4.7GB file\n",{"type":51,"tag":278,"props":2687,"children":2688},{},[2689],{"type":51,"tag":60,"props":2690,"children":2691},{},[2692,2697,2699,2705],{"type":51,"tag":285,"props":2693,"children":2694},{},[2695],{"type":57,"value":2696},"Important",{"type":57,"value":2698},": Download BEFORE setting ",{"type":51,"tag":91,"props":2700,"children":2702},{"className":2701},[],[2703],{"type":57,"value":2704},"chown 1000:1000",{"type":57,"value":2706}," on the models directory — the current user needs write access during download. Set permissions in Step 4 after download completes.",{"type":51,"tag":163,"props":2708,"children":2710},{"id":2709},"step-3-configure-compose-environment-variables",[2711],{"type":57,"value":2712},"Step 3: Configure Compose Environment Variables",{"type":51,"tag":60,"props":2714,"children":2715},{},[2716],{"type":57,"value":2717},"The Compose environment file controls ports and paths. Update it before launching:",{"type":51,"tag":170,"props":2719,"children":2721},{"className":172,"code":2720,"language":174,"meta":175,"style":175},"cd $REPO_ROOT\u002Fcompose\n\n# Find available backend port (8000-8009)\nfor port in {8000..8009}; do\n  if ! lsof -Pi :$port -sTCP:LISTEN -t >\u002Fdev\u002Fnull 2>&1; then\n    MS_PORT=$port\n    echo \"Using backend port: $MS_PORT\"\n    break\n  fi\ndone\n[ -z \"$MS_PORT\" ] && { echo \"ERROR: no free backend port in 8000-8009; free one or widen the range.\" >&2; exit 1; }\n\n# Find available UI port (5000-5009)\nfor port in {5000..5009}; do\n  if ! lsof -Pi :$port -sTCP:LISTEN -t >\u002Fdev\u002Fnull 2>&1; then\n    UI_PORT=$port\n    echo \"Using UI port: $UI_PORT\"\n    break\n  fi\ndone\n[ -z \"$UI_PORT\" ] && { echo \"ERROR: no free UI port in 5000-5009; free one or widen the range.\" >&2; exit 1; }\n\n# Get host IP\nHOST_IP=$(hostname -I | awk '{print $1}')\necho \"Host IP: $HOST_IP\"\n\n# Preserve existing keys and restrict permissions on the Compose environment file.\nCOMPOSE_ENV_BASENAME=\"env\"\nENV_FILE=\".${COMPOSE_ENV_BASENAME}\"\nif [ -f \"$ENV_FILE\" ]; then\n  BACKUP=\"${ENV_FILE}.bak.$(date +%s)\"\n  cp \"$ENV_FILE\" \"$BACKUP\"\n  chmod 600 \"$BACKUP\"\nfi\ntouch \"$ENV_FILE\"\nchmod 600 \"$ENV_FILE\"\nset_env_key() {\n  local k=\"$1\" v=\"$2\"\n  if grep -qE \"^${k}=\" \"$ENV_FILE\"; then\n    sed -i \"s|^${k}=.*|${k}=${v}|\" \"$ENV_FILE\"\n  else\n    echo \"${k}=${v}\" >> \"$ENV_FILE\"\n  fi\n}\nset_env_key AUTO_MAGIC_CALIB_MS_PORT \"${MS_PORT}\"\nset_env_key AUTO_MAGIC_CALIB_UI_PORT \"${UI_PORT}\"\nset_env_key PROJECT_DIR \"..\u002F..\u002Fprojects\"\nset_env_key MODEL_DIR \"..\u002F..\u002Fmodels\"\nset_env_key HOST_IP \"${HOST_IP}\"\n\n# Keep timestamped Compose environment backups out of git.\nGITIGNORE=\"$REPO_ROOT\u002F.gitignore\"\ntouch \"$GITIGNORE\"\nBACKUP_PATTERN=\"compose\u002F${ENV_FILE}.bak.*\"\ngrep -qxF \"$BACKUP_PATTERN\" \"$GITIGNORE\" || echo \"$BACKUP_PATTERN\" >> \"$GITIGNORE\"\n\necho \"✓ Compose environment file updated\"\ncat \"$ENV_FILE\"\n",[2722],{"type":51,"tag":91,"props":2723,"children":2724},{"__ignoreMap":175},[2725,2742,2749,2757,2790,2849,2866,2891,2898,2905,2912,2985,2992,3000,3032,3083,3099,3124,3131,3138,3145,3217,3224,3232,3280,3305,3312,3320,3345,3379,3415,3463,3496,3521,3528,3548,3572,3588,3639,3705,3793,3801,3854,3861,3868,3893,3918,3944,3970,3995,4003,4012,4042,4063,4105,4180,4188,4209],{"type":51,"tag":181,"props":2726,"children":2727},{"class":183,"line":184},[2728,2732,2737],{"type":51,"tag":181,"props":2729,"children":2730},{"style":450},[2731],{"type":57,"value":1504},{"type":51,"tag":181,"props":2733,"children":2734},{"style":248},[2735],{"type":57,"value":2736}," $REPO_ROOT",{"type":51,"tag":181,"props":2738,"children":2739},{"style":193},[2740],{"type":57,"value":2741},"\u002Fcompose\n",{"type":51,"tag":181,"props":2743,"children":2744},{"class":183,"line":376},[2745],{"type":51,"tag":181,"props":2746,"children":2747},{"emptyLinePlaceholder":465},[2748],{"type":57,"value":468},{"type":51,"tag":181,"props":2750,"children":2751},{"class":183,"line":407},[2752],{"type":51,"tag":181,"props":2753,"children":2754},{"style":1349},[2755],{"type":57,"value":2756},"# Find available backend port (8000-8009)\n",{"type":51,"tag":181,"props":2758,"children":2759},{"class":183,"line":461},[2760,2764,2769,2773,2777,2782,2786],{"type":51,"tag":181,"props":2761,"children":2762},{"style":827},[2763],{"type":57,"value":830},{"type":51,"tag":181,"props":2765,"children":2766},{"style":248},[2767],{"type":57,"value":2768}," port ",{"type":51,"tag":181,"props":2770,"children":2771},{"style":827},[2772],{"type":57,"value":840},{"type":51,"tag":181,"props":2774,"children":2775},{"style":248},[2776],{"type":57,"value":2516},{"type":51,"tag":181,"props":2778,"children":2779},{"style":188},[2780],{"type":57,"value":2781},"8000..8009}",{"type":51,"tag":181,"props":2783,"children":2784},{"style":254},[2785],{"type":57,"value":1017},{"type":51,"tag":181,"props":2787,"children":2788},{"style":827},[2789],{"type":57,"value":1022},{"type":51,"tag":181,"props":2791,"children":2792},{"class":183,"line":471},[2793,2797,2801,2806,2811,2816,2821,2826,2831,2836,2840,2845],{"type":51,"tag":181,"props":2794,"children":2795},{"style":827},[2796],{"type":57,"value":1031},{"type":51,"tag":181,"props":2798,"children":2799},{"style":254},[2800],{"type":57,"value":2481},{"type":51,"tag":181,"props":2802,"children":2803},{"style":188},[2804],{"type":57,"value":2805}," lsof",{"type":51,"tag":181,"props":2807,"children":2808},{"style":193},[2809],{"type":57,"value":2810}," -Pi",{"type":51,"tag":181,"props":2812,"children":2813},{"style":193},[2814],{"type":57,"value":2815}," :",{"type":51,"tag":181,"props":2817,"children":2818},{"style":248},[2819],{"type":57,"value":2820},"$port ",{"type":51,"tag":181,"props":2822,"children":2823},{"style":193},[2824],{"type":57,"value":2825},"-sTCP:LISTEN",{"type":51,"tag":181,"props":2827,"children":2828},{"style":193},[2829],{"type":57,"value":2830}," -t",{"type":51,"tag":181,"props":2832,"children":2833},{"style":254},[2834],{"type":57,"value":2835}," >",{"type":51,"tag":181,"props":2837,"children":2838},{"style":193},[2839],{"type":57,"value":627},{"type":51,"tag":181,"props":2841,"children":2842},{"style":254},[2843],{"type":57,"value":2844}," 2>&1;",{"type":51,"tag":181,"props":2846,"children":2847},{"style":827},[2848],{"type":57,"value":1058},{"type":51,"tag":181,"props":2850,"children":2851},{"class":183,"line":490},[2852,2857,2861],{"type":51,"tag":181,"props":2853,"children":2854},{"style":248},[2855],{"type":57,"value":2856},"    MS_PORT",{"type":51,"tag":181,"props":2858,"children":2859},{"style":254},[2860],{"type":57,"value":358},{"type":51,"tag":181,"props":2862,"children":2863},{"style":248},[2864],{"type":57,"value":2865},"$port\n",{"type":51,"tag":181,"props":2867,"children":2868},{"class":183,"line":529},[2869,2873,2877,2882,2887],{"type":51,"tag":181,"props":2870,"children":2871},{"style":450},[2872],{"type":57,"value":1092},{"type":51,"tag":181,"props":2874,"children":2875},{"style":254},[2876],{"type":57,"value":506},{"type":51,"tag":181,"props":2878,"children":2879},{"style":193},[2880],{"type":57,"value":2881},"Using backend port: ",{"type":51,"tag":181,"props":2883,"children":2884},{"style":248},[2885],{"type":57,"value":2886},"$MS_PORT",{"type":51,"tag":181,"props":2888,"children":2889},{"style":254},[2890],{"type":57,"value":373},{"type":51,"tag":181,"props":2892,"children":2893},{"class":183,"line":573},[2894],{"type":51,"tag":181,"props":2895,"children":2896},{"style":827},[2897],{"type":57,"value":1119},{"type":51,"tag":181,"props":2899,"children":2900},{"class":183,"line":634},[2901],{"type":51,"tag":181,"props":2902,"children":2903},{"style":827},[2904],{"type":57,"value":1128},{"type":51,"tag":181,"props":2906,"children":2907},{"class":183,"line":675},[2908],{"type":51,"tag":181,"props":2909,"children":2910},{"style":827},[2911],{"type":57,"value":1137},{"type":51,"tag":181,"props":2913,"children":2914},{"class":183,"line":733},[2915,2920,2924,2928,2932,2936,2940,2944,2948,2952,2956,2961,2965,2969,2973,2977,2981],{"type":51,"tag":181,"props":2916,"children":2917},{"style":254},[2918],{"type":57,"value":2919},"[",{"type":51,"tag":181,"props":2921,"children":2922},{"style":254},[2923],{"type":57,"value":1163},{"type":51,"tag":181,"props":2925,"children":2926},{"style":254},[2927],{"type":57,"value":506},{"type":51,"tag":181,"props":2929,"children":2930},{"style":248},[2931],{"type":57,"value":2886},{"type":51,"tag":181,"props":2933,"children":2934},{"style":254},[2935],{"type":57,"value":363},{"type":51,"tag":181,"props":2937,"children":2938},{"style":254},[2939],{"type":57,"value":521},{"type":51,"tag":181,"props":2941,"children":2942},{"style":254},[2943],{"type":57,"value":1221},{"type":51,"tag":181,"props":2945,"children":2946},{"style":254},[2947],{"type":57,"value":2516},{"type":51,"tag":181,"props":2949,"children":2950},{"style":450},[2951],{"type":57,"value":2521},{"type":51,"tag":181,"props":2953,"children":2954},{"style":254},[2955],{"type":57,"value":506},{"type":51,"tag":181,"props":2957,"children":2958},{"style":193},[2959],{"type":57,"value":2960},"ERROR: no free backend port in 8000-8009; free one or widen the range.",{"type":51,"tag":181,"props":2962,"children":2963},{"style":254},[2964],{"type":57,"value":363},{"type":51,"tag":181,"props":2966,"children":2967},{"style":254},[2968],{"type":57,"value":2539},{"type":51,"tag":181,"props":2970,"children":2971},{"style":450},[2972],{"type":57,"value":2544},{"type":51,"tag":181,"props":2974,"children":2975},{"style":1475},[2976],{"type":57,"value":2549},{"type":51,"tag":181,"props":2978,"children":2979},{"style":254},[2980],{"type":57,"value":1017},{"type":51,"tag":181,"props":2982,"children":2983},{"style":254},[2984],{"type":57,"value":2558},{"type":51,"tag":181,"props":2986,"children":2987},{"class":183,"line":788},[2988],{"type":51,"tag":181,"props":2989,"children":2990},{"emptyLinePlaceholder":465},[2991],{"type":57,"value":468},{"type":51,"tag":181,"props":2993,"children":2994},{"class":183,"line":797},[2995],{"type":51,"tag":181,"props":2996,"children":2997},{"style":1349},[2998],{"type":57,"value":2999},"# Find available UI port (5000-5009)\n",{"type":51,"tag":181,"props":3001,"children":3002},{"class":183,"line":805},[3003,3007,3011,3015,3019,3024,3028],{"type":51,"tag":181,"props":3004,"children":3005},{"style":827},[3006],{"type":57,"value":830},{"type":51,"tag":181,"props":3008,"children":3009},{"style":248},[3010],{"type":57,"value":2768},{"type":51,"tag":181,"props":3012,"children":3013},{"style":827},[3014],{"type":57,"value":840},{"type":51,"tag":181,"props":3016,"children":3017},{"style":248},[3018],{"type":57,"value":2516},{"type":51,"tag":181,"props":3020,"children":3021},{"style":188},[3022],{"type":57,"value":3023},"5000..5009}",{"type":51,"tag":181,"props":3025,"children":3026},{"style":254},[3027],{"type":57,"value":1017},{"type":51,"tag":181,"props":3029,"children":3030},{"style":827},[3031],{"type":57,"value":1022},{"type":51,"tag":181,"props":3033,"children":3034},{"class":183,"line":823},[3035,3039,3043,3047,3051,3055,3059,3063,3067,3071,3075,3079],{"type":51,"tag":181,"props":3036,"children":3037},{"style":827},[3038],{"type":57,"value":1031},{"type":51,"tag":181,"props":3040,"children":3041},{"style":254},[3042],{"type":57,"value":2481},{"type":51,"tag":181,"props":3044,"children":3045},{"style":188},[3046],{"type":57,"value":2805},{"type":51,"tag":181,"props":3048,"children":3049},{"style":193},[3050],{"type":57,"value":2810},{"type":51,"tag":181,"props":3052,"children":3053},{"style":193},[3054],{"type":57,"value":2815},{"type":51,"tag":181,"props":3056,"children":3057},{"style":248},[3058],{"type":57,"value":2820},{"type":51,"tag":181,"props":3060,"children":3061},{"style":193},[3062],{"type":57,"value":2825},{"type":51,"tag":181,"props":3064,"children":3065},{"style":193},[3066],{"type":57,"value":2830},{"type":51,"tag":181,"props":3068,"children":3069},{"style":254},[3070],{"type":57,"value":2835},{"type":51,"tag":181,"props":3072,"children":3073},{"style":193},[3074],{"type":57,"value":627},{"type":51,"tag":181,"props":3076,"children":3077},{"style":254},[3078],{"type":57,"value":2844},{"type":51,"tag":181,"props":3080,"children":3081},{"style":827},[3082],{"type":57,"value":1058},{"type":51,"tag":181,"props":3084,"children":3085},{"class":183,"line":847},[3086,3091,3095],{"type":51,"tag":181,"props":3087,"children":3088},{"style":248},[3089],{"type":57,"value":3090},"    UI_PORT",{"type":51,"tag":181,"props":3092,"children":3093},{"style":254},[3094],{"type":57,"value":358},{"type":51,"tag":181,"props":3096,"children":3097},{"style":248},[3098],{"type":57,"value":2865},{"type":51,"tag":181,"props":3100,"children":3101},{"class":183,"line":869},[3102,3106,3110,3115,3120],{"type":51,"tag":181,"props":3103,"children":3104},{"style":450},[3105],{"type":57,"value":1092},{"type":51,"tag":181,"props":3107,"children":3108},{"style":254},[3109],{"type":57,"value":506},{"type":51,"tag":181,"props":3111,"children":3112},{"style":193},[3113],{"type":57,"value":3114},"Using UI port: ",{"type":51,"tag":181,"props":3116,"children":3117},{"style":248},[3118],{"type":57,"value":3119},"$UI_PORT",{"type":51,"tag":181,"props":3121,"children":3122},{"style":254},[3123],{"type":57,"value":373},{"type":51,"tag":181,"props":3125,"children":3126},{"class":183,"line":923},[3127],{"type":51,"tag":181,"props":3128,"children":3129},{"style":827},[3130],{"type":57,"value":1119},{"type":51,"tag":181,"props":3132,"children":3133},{"class":183,"line":972},[3134],{"type":51,"tag":181,"props":3135,"children":3136},{"style":827},[3137],{"type":57,"value":1128},{"type":51,"tag":181,"props":3139,"children":3140},{"class":183,"line":998},[3141],{"type":51,"tag":181,"props":3142,"children":3143},{"style":827},[3144],{"type":57,"value":1137},{"type":51,"tag":181,"props":3146,"children":3147},{"class":183,"line":1025},[3148,3152,3156,3160,3164,3168,3172,3176,3180,3184,3188,3193,3197,3201,3205,3209,3213],{"type":51,"tag":181,"props":3149,"children":3150},{"style":254},[3151],{"type":57,"value":2919},{"type":51,"tag":181,"props":3153,"children":3154},{"style":254},[3155],{"type":57,"value":1163},{"type":51,"tag":181,"props":3157,"children":3158},{"style":254},[3159],{"type":57,"value":506},{"type":51,"tag":181,"props":3161,"children":3162},{"style":248},[3163],{"type":57,"value":3119},{"type":51,"tag":181,"props":3165,"children":3166},{"style":254},[3167],{"type":57,"value":363},{"type":51,"tag":181,"props":3169,"children":3170},{"style":254},[3171],{"type":57,"value":521},{"type":51,"tag":181,"props":3173,"children":3174},{"style":254},[3175],{"type":57,"value":1221},{"type":51,"tag":181,"props":3177,"children":3178},{"style":254},[3179],{"type":57,"value":2516},{"type":51,"tag":181,"props":3181,"children":3182},{"style":450},[3183],{"type":57,"value":2521},{"type":51,"tag":181,"props":3185,"children":3186},{"style":254},[3187],{"type":57,"value":506},{"type":51,"tag":181,"props":3189,"children":3190},{"style":193},[3191],{"type":57,"value":3192},"ERROR: no free UI port in 5000-5009; free one or widen the range.",{"type":51,"tag":181,"props":3194,"children":3195},{"style":254},[3196],{"type":57,"value":363},{"type":51,"tag":181,"props":3198,"children":3199},{"style":254},[3200],{"type":57,"value":2539},{"type":51,"tag":181,"props":3202,"children":3203},{"style":450},[3204],{"type":57,"value":2544},{"type":51,"tag":181,"props":3206,"children":3207},{"style":1475},[3208],{"type":57,"value":2549},{"type":51,"tag":181,"props":3210,"children":3211},{"style":254},[3212],{"type":57,"value":1017},{"type":51,"tag":181,"props":3214,"children":3215},{"style":254},[3216],{"type":57,"value":2558},{"type":51,"tag":181,"props":3218,"children":3219},{"class":183,"line":1061},[3220],{"type":51,"tag":181,"props":3221,"children":3222},{"emptyLinePlaceholder":465},[3223],{"type":57,"value":468},{"type":51,"tag":181,"props":3225,"children":3226},{"class":183,"line":1086},[3227],{"type":51,"tag":181,"props":3228,"children":3229},{"style":1349},[3230],{"type":57,"value":3231},"# Get host IP\n",{"type":51,"tag":181,"props":3233,"children":3234},{"class":183,"line":1113},[3235,3240,3244,3249,3254,3258,3263,3267,3272,3276],{"type":51,"tag":181,"props":3236,"children":3237},{"style":248},[3238],{"type":57,"value":3239},"HOST_IP",{"type":51,"tag":181,"props":3241,"children":3242},{"style":254},[3243],{"type":57,"value":2041},{"type":51,"tag":181,"props":3245,"children":3246},{"style":188},[3247],{"type":57,"value":3248},"hostname",{"type":51,"tag":181,"props":3250,"children":3251},{"style":193},[3252],{"type":57,"value":3253}," -I",{"type":51,"tag":181,"props":3255,"children":3256},{"style":254},[3257],{"type":57,"value":1952},{"type":51,"tag":181,"props":3259,"children":3260},{"style":188},[3261],{"type":57,"value":3262}," awk",{"type":51,"tag":181,"props":3264,"children":3265},{"style":254},[3266],{"type":57,"value":1976},{"type":51,"tag":181,"props":3268,"children":3269},{"style":193},[3270],{"type":57,"value":3271},"{print $1}",{"type":51,"tag":181,"props":3273,"children":3274},{"style":254},[3275],{"type":57,"value":1986},{"type":51,"tag":181,"props":3277,"children":3278},{"style":254},[3279],{"type":57,"value":2060},{"type":51,"tag":181,"props":3281,"children":3282},{"class":183,"line":1122},[3283,3287,3291,3296,3301],{"type":51,"tag":181,"props":3284,"children":3285},{"style":450},[3286],{"type":57,"value":1540},{"type":51,"tag":181,"props":3288,"children":3289},{"style":254},[3290],{"type":57,"value":506},{"type":51,"tag":181,"props":3292,"children":3293},{"style":193},[3294],{"type":57,"value":3295},"Host IP: ",{"type":51,"tag":181,"props":3297,"children":3298},{"style":248},[3299],{"type":57,"value":3300},"$HOST_IP",{"type":51,"tag":181,"props":3302,"children":3303},{"style":254},[3304],{"type":57,"value":373},{"type":51,"tag":181,"props":3306,"children":3307},{"class":183,"line":1131},[3308],{"type":51,"tag":181,"props":3309,"children":3310},{"emptyLinePlaceholder":465},[3311],{"type":57,"value":468},{"type":51,"tag":181,"props":3313,"children":3314},{"class":183,"line":1140},[3315],{"type":51,"tag":181,"props":3316,"children":3317},{"style":1349},[3318],{"type":57,"value":3319},"# Preserve existing keys and restrict permissions on the Compose environment file.\n",{"type":51,"tag":181,"props":3321,"children":3322},{"class":183,"line":1148},[3323,3328,3332,3336,3341],{"type":51,"tag":181,"props":3324,"children":3325},{"style":248},[3326],{"type":57,"value":3327},"COMPOSE_ENV_BASENAME",{"type":51,"tag":181,"props":3329,"children":3330},{"style":254},[3331],{"type":57,"value":358},{"type":51,"tag":181,"props":3333,"children":3334},{"style":254},[3335],{"type":57,"value":363},{"type":51,"tag":181,"props":3337,"children":3338},{"style":193},[3339],{"type":57,"value":3340},"env",{"type":51,"tag":181,"props":3342,"children":3343},{"style":254},[3344],{"type":57,"value":373},{"type":51,"tag":181,"props":3346,"children":3347},{"class":183,"line":1187},[3348,3353,3357,3361,3365,3370,3374],{"type":51,"tag":181,"props":3349,"children":3350},{"style":248},[3351],{"type":57,"value":3352},"ENV_FILE",{"type":51,"tag":181,"props":3354,"children":3355},{"style":254},[3356],{"type":57,"value":358},{"type":51,"tag":181,"props":3358,"children":3359},{"style":254},[3360],{"type":57,"value":363},{"type":51,"tag":181,"props":3362,"children":3363},{"style":193},[3364],{"type":57,"value":129},{"type":51,"tag":181,"props":3366,"children":3367},{"style":254},[3368],{"type":57,"value":3369},"${",{"type":51,"tag":181,"props":3371,"children":3372},{"style":248},[3373],{"type":57,"value":3327},{"type":51,"tag":181,"props":3375,"children":3376},{"style":254},[3377],{"type":57,"value":3378},"}\"\n",{"type":51,"tag":181,"props":3380,"children":3381},{"class":183,"line":1257},[3382,3386,3390,3394,3398,3403,3407,3411],{"type":51,"tag":181,"props":3383,"children":3384},{"style":827},[3385],{"type":57,"value":1154},{"type":51,"tag":181,"props":3387,"children":3388},{"style":254},[3389],{"type":57,"value":540},{"type":51,"tag":181,"props":3391,"children":3392},{"style":254},[3393],{"type":57,"value":545},{"type":51,"tag":181,"props":3395,"children":3396},{"style":254},[3397],{"type":57,"value":506},{"type":51,"tag":181,"props":3399,"children":3400},{"style":248},[3401],{"type":57,"value":3402},"$ENV_FILE",{"type":51,"tag":181,"props":3404,"children":3405},{"style":254},[3406],{"type":57,"value":363},{"type":51,"tag":181,"props":3408,"children":3409},{"style":254},[3410],{"type":57,"value":1180},{"type":51,"tag":181,"props":3412,"children":3413},{"style":827},[3414],{"type":57,"value":1058},{"type":51,"tag":181,"props":3416,"children":3417},{"class":183,"line":1287},[3418,3423,3427,3431,3435,3439,3444,3449,3454,3459],{"type":51,"tag":181,"props":3419,"children":3420},{"style":248},[3421],{"type":57,"value":3422},"  BACKUP",{"type":51,"tag":181,"props":3424,"children":3425},{"style":254},[3426],{"type":57,"value":358},{"type":51,"tag":181,"props":3428,"children":3429},{"style":254},[3430],{"type":57,"value":1688},{"type":51,"tag":181,"props":3432,"children":3433},{"style":248},[3434],{"type":57,"value":3352},{"type":51,"tag":181,"props":3436,"children":3437},{"style":254},[3438],{"type":57,"value":1697},{"type":51,"tag":181,"props":3440,"children":3441},{"style":193},[3442],{"type":57,"value":3443},".bak.",{"type":51,"tag":181,"props":3445,"children":3446},{"style":254},[3447],{"type":57,"value":3448},"$(",{"type":51,"tag":181,"props":3450,"children":3451},{"style":188},[3452],{"type":57,"value":3453},"date",{"type":51,"tag":181,"props":3455,"children":3456},{"style":193},[3457],{"type":57,"value":3458}," +%s",{"type":51,"tag":181,"props":3460,"children":3461},{"style":254},[3462],{"type":57,"value":458},{"type":51,"tag":181,"props":3464,"children":3465},{"class":183,"line":1308},[3466,3471,3475,3479,3483,3487,3492],{"type":51,"tag":181,"props":3467,"children":3468},{"style":188},[3469],{"type":57,"value":3470},"  cp",{"type":51,"tag":181,"props":3472,"children":3473},{"style":254},[3474],{"type":57,"value":506},{"type":51,"tag":181,"props":3476,"children":3477},{"style":248},[3478],{"type":57,"value":3402},{"type":51,"tag":181,"props":3480,"children":3481},{"style":254},[3482],{"type":57,"value":363},{"type":51,"tag":181,"props":3484,"children":3485},{"style":254},[3486],{"type":57,"value":506},{"type":51,"tag":181,"props":3488,"children":3489},{"style":248},[3490],{"type":57,"value":3491},"$BACKUP",{"type":51,"tag":181,"props":3493,"children":3494},{"style":254},[3495],{"type":57,"value":373},{"type":51,"tag":181,"props":3497,"children":3498},{"class":183,"line":1329},[3499,3504,3509,3513,3517],{"type":51,"tag":181,"props":3500,"children":3501},{"style":188},[3502],{"type":57,"value":3503},"  chmod",{"type":51,"tag":181,"props":3505,"children":3506},{"style":1475},[3507],{"type":57,"value":3508}," 600",{"type":51,"tag":181,"props":3510,"children":3511},{"style":254},[3512],{"type":57,"value":506},{"type":51,"tag":181,"props":3514,"children":3515},{"style":248},[3516],{"type":57,"value":3491},{"type":51,"tag":181,"props":3518,"children":3519},{"style":254},[3520],{"type":57,"value":373},{"type":51,"tag":181,"props":3522,"children":3523},{"class":183,"line":1337},[3524],{"type":51,"tag":181,"props":3525,"children":3526},{"style":827},[3527],{"type":57,"value":1487},{"type":51,"tag":181,"props":3529,"children":3530},{"class":183,"line":1345},[3531,3536,3540,3544],{"type":51,"tag":181,"props":3532,"children":3533},{"style":188},[3534],{"type":57,"value":3535},"touch",{"type":51,"tag":181,"props":3537,"children":3538},{"style":254},[3539],{"type":57,"value":506},{"type":51,"tag":181,"props":3541,"children":3542},{"style":248},[3543],{"type":57,"value":3402},{"type":51,"tag":181,"props":3545,"children":3546},{"style":254},[3547],{"type":57,"value":373},{"type":51,"tag":181,"props":3549,"children":3550},{"class":183,"line":1355},[3551,3556,3560,3564,3568],{"type":51,"tag":181,"props":3552,"children":3553},{"style":188},[3554],{"type":57,"value":3555},"chmod",{"type":51,"tag":181,"props":3557,"children":3558},{"style":1475},[3559],{"type":57,"value":3508},{"type":51,"tag":181,"props":3561,"children":3562},{"style":254},[3563],{"type":57,"value":506},{"type":51,"tag":181,"props":3565,"children":3566},{"style":248},[3567],{"type":57,"value":3402},{"type":51,"tag":181,"props":3569,"children":3570},{"style":254},[3571],{"type":57,"value":373},{"type":51,"tag":181,"props":3573,"children":3574},{"class":183,"line":1364},[3575,3580,3584],{"type":51,"tag":181,"props":3576,"children":3577},{"style":450},[3578],{"type":57,"value":3579},"set_env_key",{"type":51,"tag":181,"props":3581,"children":3582},{"style":254},[3583],{"type":57,"value":482},{"type":51,"tag":181,"props":3585,"children":3586},{"style":254},[3587],{"type":57,"value":487},{"type":51,"tag":181,"props":3589,"children":3590},{"class":183,"line":1373},[3591,3596,3601,3605,3609,3613,3617,3622,3626,3630,3635],{"type":51,"tag":181,"props":3592,"children":3593},{"style":1523},[3594],{"type":57,"value":3595},"  local",{"type":51,"tag":181,"props":3597,"children":3598},{"style":248},[3599],{"type":57,"value":3600}," k",{"type":51,"tag":181,"props":3602,"children":3603},{"style":254},[3604],{"type":57,"value":358},{"type":51,"tag":181,"props":3606,"children":3607},{"style":254},[3608],{"type":57,"value":363},{"type":51,"tag":181,"props":3610,"children":3611},{"style":509},[3612],{"type":57,"value":512},{"type":51,"tag":181,"props":3614,"children":3615},{"style":254},[3616],{"type":57,"value":363},{"type":51,"tag":181,"props":3618,"children":3619},{"style":248},[3620],{"type":57,"value":3621}," v",{"type":51,"tag":181,"props":3623,"children":3624},{"style":254},[3625],{"type":57,"value":358},{"type":51,"tag":181,"props":3627,"children":3628},{"style":254},[3629],{"type":57,"value":363},{"type":51,"tag":181,"props":3631,"children":3632},{"style":509},[3633],{"type":57,"value":3634},"$2",{"type":51,"tag":181,"props":3636,"children":3637},{"style":254},[3638],{"type":57,"value":373},{"type":51,"tag":181,"props":3640,"children":3641},{"class":183,"line":1395},[3642,3646,3650,3655,3659,3664,3668,3673,3677,3681,3685,3689,3693,3697,3701],{"type":51,"tag":181,"props":3643,"children":3644},{"style":827},[3645],{"type":57,"value":1031},{"type":51,"tag":181,"props":3647,"children":3648},{"style":188},[3649],{"type":57,"value":583},{"type":51,"tag":181,"props":3651,"children":3652},{"style":193},[3653],{"type":57,"value":3654}," -qE",{"type":51,"tag":181,"props":3656,"children":3657},{"style":254},[3658],{"type":57,"value":506},{"type":51,"tag":181,"props":3660,"children":3661},{"style":193},[3662],{"type":57,"value":3663},"^",{"type":51,"tag":181,"props":3665,"children":3666},{"style":254},[3667],{"type":57,"value":3369},{"type":51,"tag":181,"props":3669,"children":3670},{"style":248},[3671],{"type":57,"value":3672},"k",{"type":51,"tag":181,"props":3674,"children":3675},{"style":254},[3676],{"type":57,"value":1697},{"type":51,"tag":181,"props":3678,"children":3679},{"style":193},[3680],{"type":57,"value":358},{"type":51,"tag":181,"props":3682,"children":3683},{"style":254},[3684],{"type":57,"value":363},{"type":51,"tag":181,"props":3686,"children":3687},{"style":254},[3688],{"type":57,"value":506},{"type":51,"tag":181,"props":3690,"children":3691},{"style":248},[3692],{"type":57,"value":3402},{"type":51,"tag":181,"props":3694,"children":3695},{"style":254},[3696],{"type":57,"value":363},{"type":51,"tag":181,"props":3698,"children":3699},{"style":254},[3700],{"type":57,"value":1017},{"type":51,"tag":181,"props":3702,"children":3703},{"style":827},[3704],{"type":57,"value":1058},{"type":51,"tag":181,"props":3706,"children":3707},{"class":183,"line":1435},[3708,3713,3718,3722,3727,3731,3735,3739,3744,3748,3752,3756,3760,3764,3769,3773,3777,3781,3785,3789],{"type":51,"tag":181,"props":3709,"children":3710},{"style":188},[3711],{"type":57,"value":3712},"    sed",{"type":51,"tag":181,"props":3714,"children":3715},{"style":193},[3716],{"type":57,"value":3717}," -i",{"type":51,"tag":181,"props":3719,"children":3720},{"style":254},[3721],{"type":57,"value":506},{"type":51,"tag":181,"props":3723,"children":3724},{"style":193},[3725],{"type":57,"value":3726},"s|^",{"type":51,"tag":181,"props":3728,"children":3729},{"style":254},[3730],{"type":57,"value":3369},{"type":51,"tag":181,"props":3732,"children":3733},{"style":248},[3734],{"type":57,"value":3672},{"type":51,"tag":181,"props":3736,"children":3737},{"style":254},[3738],{"type":57,"value":1697},{"type":51,"tag":181,"props":3740,"children":3741},{"style":193},[3742],{"type":57,"value":3743},"=.*|",{"type":51,"tag":181,"props":3745,"children":3746},{"style":254},[3747],{"type":57,"value":3369},{"type":51,"tag":181,"props":3749,"children":3750},{"style":248},[3751],{"type":57,"value":3672},{"type":51,"tag":181,"props":3753,"children":3754},{"style":254},[3755],{"type":57,"value":1697},{"type":51,"tag":181,"props":3757,"children":3758},{"style":193},[3759],{"type":57,"value":358},{"type":51,"tag":181,"props":3761,"children":3762},{"style":254},[3763],{"type":57,"value":3369},{"type":51,"tag":181,"props":3765,"children":3766},{"style":248},[3767],{"type":57,"value":3768},"v",{"type":51,"tag":181,"props":3770,"children":3771},{"style":254},[3772],{"type":57,"value":1697},{"type":51,"tag":181,"props":3774,"children":3775},{"style":193},[3776],{"type":57,"value":2421},{"type":51,"tag":181,"props":3778,"children":3779},{"style":254},[3780],{"type":57,"value":363},{"type":51,"tag":181,"props":3782,"children":3783},{"style":254},[3784],{"type":57,"value":506},{"type":51,"tag":181,"props":3786,"children":3787},{"style":248},[3788],{"type":57,"value":3402},{"type":51,"tag":181,"props":3790,"children":3791},{"style":254},[3792],{"type":57,"value":373},{"type":51,"tag":181,"props":3794,"children":3795},{"class":183,"line":1466},[3796],{"type":51,"tag":181,"props":3797,"children":3798},{"style":827},[3799],{"type":57,"value":3800},"  else\n",{"type":51,"tag":181,"props":3802,"children":3803},{"class":183,"line":1481},[3804,3808,3813,3817,3821,3825,3829,3833,3837,3842,3846,3850],{"type":51,"tag":181,"props":3805,"children":3806},{"style":450},[3807],{"type":57,"value":1092},{"type":51,"tag":181,"props":3809,"children":3810},{"style":254},[3811],{"type":57,"value":3812}," \"${",{"type":51,"tag":181,"props":3814,"children":3815},{"style":248},[3816],{"type":57,"value":3672},{"type":51,"tag":181,"props":3818,"children":3819},{"style":254},[3820],{"type":57,"value":1697},{"type":51,"tag":181,"props":3822,"children":3823},{"style":193},[3824],{"type":57,"value":358},{"type":51,"tag":181,"props":3826,"children":3827},{"style":254},[3828],{"type":57,"value":3369},{"type":51,"tag":181,"props":3830,"children":3831},{"style":248},[3832],{"type":57,"value":3768},{"type":51,"tag":181,"props":3834,"children":3835},{"style":254},[3836],{"type":57,"value":916},{"type":51,"tag":181,"props":3838,"children":3839},{"style":254},[3840],{"type":57,"value":3841}," >>",{"type":51,"tag":181,"props":3843,"children":3844},{"style":254},[3845],{"type":57,"value":506},{"type":51,"tag":181,"props":3847,"children":3848},{"style":248},[3849],{"type":57,"value":3402},{"type":51,"tag":181,"props":3851,"children":3852},{"style":254},[3853],{"type":57,"value":373},{"type":51,"tag":181,"props":3855,"children":3856},{"class":183,"line":1490},[3857],{"type":51,"tag":181,"props":3858,"children":3859},{"style":827},[3860],{"type":57,"value":1128},{"type":51,"tag":181,"props":3862,"children":3863},{"class":183,"line":1498},[3864],{"type":51,"tag":181,"props":3865,"children":3866},{"style":254},[3867],{"type":57,"value":794},{"type":51,"tag":181,"props":3869,"children":3870},{"class":183,"line":1519},[3871,3875,3880,3884,3889],{"type":51,"tag":181,"props":3872,"children":3873},{"style":188},[3874],{"type":57,"value":3579},{"type":51,"tag":181,"props":3876,"children":3877},{"style":193},[3878],{"type":57,"value":3879}," AUTO_MAGIC_CALIB_MS_PORT",{"type":51,"tag":181,"props":3881,"children":3882},{"style":254},[3883],{"type":57,"value":3812},{"type":51,"tag":181,"props":3885,"children":3886},{"style":248},[3887],{"type":57,"value":3888},"MS_PORT",{"type":51,"tag":181,"props":3890,"children":3891},{"style":254},[3892],{"type":57,"value":3378},{"type":51,"tag":181,"props":3894,"children":3895},{"class":183,"line":1534},[3896,3900,3905,3909,3914],{"type":51,"tag":181,"props":3897,"children":3898},{"style":188},[3899],{"type":57,"value":3579},{"type":51,"tag":181,"props":3901,"children":3902},{"style":193},[3903],{"type":57,"value":3904}," AUTO_MAGIC_CALIB_UI_PORT",{"type":51,"tag":181,"props":3906,"children":3907},{"style":254},[3908],{"type":57,"value":3812},{"type":51,"tag":181,"props":3910,"children":3911},{"style":248},[3912],{"type":57,"value":3913},"UI_PORT",{"type":51,"tag":181,"props":3915,"children":3916},{"style":254},[3917],{"type":57,"value":3378},{"type":51,"tag":181,"props":3919,"children":3921},{"class":183,"line":3920},47,[3922,3926,3931,3935,3940],{"type":51,"tag":181,"props":3923,"children":3924},{"style":188},[3925],{"type":57,"value":3579},{"type":51,"tag":181,"props":3927,"children":3928},{"style":193},[3929],{"type":57,"value":3930}," PROJECT_DIR",{"type":51,"tag":181,"props":3932,"children":3933},{"style":254},[3934],{"type":57,"value":506},{"type":51,"tag":181,"props":3936,"children":3937},{"style":193},[3938],{"type":57,"value":3939},"..\u002F..\u002Fprojects",{"type":51,"tag":181,"props":3941,"children":3942},{"style":254},[3943],{"type":57,"value":373},{"type":51,"tag":181,"props":3945,"children":3947},{"class":183,"line":3946},48,[3948,3952,3957,3961,3966],{"type":51,"tag":181,"props":3949,"children":3950},{"style":188},[3951],{"type":57,"value":3579},{"type":51,"tag":181,"props":3953,"children":3954},{"style":193},[3955],{"type":57,"value":3956}," MODEL_DIR",{"type":51,"tag":181,"props":3958,"children":3959},{"style":254},[3960],{"type":57,"value":506},{"type":51,"tag":181,"props":3962,"children":3963},{"style":193},[3964],{"type":57,"value":3965},"..\u002F..\u002Fmodels",{"type":51,"tag":181,"props":3967,"children":3968},{"style":254},[3969],{"type":57,"value":373},{"type":51,"tag":181,"props":3971,"children":3973},{"class":183,"line":3972},49,[3974,3978,3983,3987,3991],{"type":51,"tag":181,"props":3975,"children":3976},{"style":188},[3977],{"type":57,"value":3579},{"type":51,"tag":181,"props":3979,"children":3980},{"style":193},[3981],{"type":57,"value":3982}," HOST_IP",{"type":51,"tag":181,"props":3984,"children":3985},{"style":254},[3986],{"type":57,"value":3812},{"type":51,"tag":181,"props":3988,"children":3989},{"style":248},[3990],{"type":57,"value":3239},{"type":51,"tag":181,"props":3992,"children":3993},{"style":254},[3994],{"type":57,"value":3378},{"type":51,"tag":181,"props":3996,"children":3998},{"class":183,"line":3997},50,[3999],{"type":51,"tag":181,"props":4000,"children":4001},{"emptyLinePlaceholder":465},[4002],{"type":57,"value":468},{"type":51,"tag":181,"props":4004,"children":4006},{"class":183,"line":4005},51,[4007],{"type":51,"tag":181,"props":4008,"children":4009},{"style":1349},[4010],{"type":57,"value":4011},"# Keep timestamped Compose environment backups out of git.\n",{"type":51,"tag":181,"props":4013,"children":4015},{"class":183,"line":4014},52,[4016,4021,4025,4029,4033,4038],{"type":51,"tag":181,"props":4017,"children":4018},{"style":248},[4019],{"type":57,"value":4020},"GITIGNORE",{"type":51,"tag":181,"props":4022,"children":4023},{"style":254},[4024],{"type":57,"value":358},{"type":51,"tag":181,"props":4026,"children":4027},{"style":254},[4028],{"type":57,"value":363},{"type":51,"tag":181,"props":4030,"children":4031},{"style":248},[4032],{"type":57,"value":1106},{"type":51,"tag":181,"props":4034,"children":4035},{"style":193},[4036],{"type":57,"value":4037},"\u002F.gitignore",{"type":51,"tag":181,"props":4039,"children":4040},{"style":254},[4041],{"type":57,"value":373},{"type":51,"tag":181,"props":4043,"children":4045},{"class":183,"line":4044},53,[4046,4050,4054,4059],{"type":51,"tag":181,"props":4047,"children":4048},{"style":188},[4049],{"type":57,"value":3535},{"type":51,"tag":181,"props":4051,"children":4052},{"style":254},[4053],{"type":57,"value":506},{"type":51,"tag":181,"props":4055,"children":4056},{"style":248},[4057],{"type":57,"value":4058},"$GITIGNORE",{"type":51,"tag":181,"props":4060,"children":4061},{"style":254},[4062],{"type":57,"value":373},{"type":51,"tag":181,"props":4064,"children":4066},{"class":183,"line":4065},54,[4067,4072,4076,4080,4084,4088,4092,4096,4101],{"type":51,"tag":181,"props":4068,"children":4069},{"style":248},[4070],{"type":57,"value":4071},"BACKUP_PATTERN",{"type":51,"tag":181,"props":4073,"children":4074},{"style":254},[4075],{"type":57,"value":358},{"type":51,"tag":181,"props":4077,"children":4078},{"style":254},[4079],{"type":57,"value":363},{"type":51,"tag":181,"props":4081,"children":4082},{"style":193},[4083],{"type":57,"value":322},{"type":51,"tag":181,"props":4085,"children":4086},{"style":254},[4087],{"type":57,"value":3369},{"type":51,"tag":181,"props":4089,"children":4090},{"style":248},[4091],{"type":57,"value":3352},{"type":51,"tag":181,"props":4093,"children":4094},{"style":254},[4095],{"type":57,"value":1697},{"type":51,"tag":181,"props":4097,"children":4098},{"style":193},[4099],{"type":57,"value":4100},".bak.*",{"type":51,"tag":181,"props":4102,"children":4103},{"style":254},[4104],{"type":57,"value":373},{"type":51,"tag":181,"props":4106,"children":4108},{"class":183,"line":4107},55,[4109,4114,4119,4123,4128,4132,4136,4140,4144,4148,4152,4156,4160,4164,4168,4172,4176],{"type":51,"tag":181,"props":4110,"children":4111},{"style":188},[4112],{"type":57,"value":4113},"grep",{"type":51,"tag":181,"props":4115,"children":4116},{"style":193},[4117],{"type":57,"value":4118}," -qxF",{"type":51,"tag":181,"props":4120,"children":4121},{"style":254},[4122],{"type":57,"value":506},{"type":51,"tag":181,"props":4124,"children":4125},{"style":248},[4126],{"type":57,"value":4127},"$BACKUP_PATTERN",{"type":51,"tag":181,"props":4129,"children":4130},{"style":254},[4131],{"type":57,"value":363},{"type":51,"tag":181,"props":4133,"children":4134},{"style":254},[4135],{"type":57,"value":506},{"type":51,"tag":181,"props":4137,"children":4138},{"style":248},[4139],{"type":57,"value":4058},{"type":51,"tag":181,"props":4141,"children":4142},{"style":254},[4143],{"type":57,"value":363},{"type":51,"tag":181,"props":4145,"children":4146},{"style":254},[4147],{"type":57,"value":1750},{"type":51,"tag":181,"props":4149,"children":4150},{"style":450},[4151],{"type":57,"value":2521},{"type":51,"tag":181,"props":4153,"children":4154},{"style":254},[4155],{"type":57,"value":506},{"type":51,"tag":181,"props":4157,"children":4158},{"style":248},[4159],{"type":57,"value":4127},{"type":51,"tag":181,"props":4161,"children":4162},{"style":254},[4163],{"type":57,"value":363},{"type":51,"tag":181,"props":4165,"children":4166},{"style":254},[4167],{"type":57,"value":3841},{"type":51,"tag":181,"props":4169,"children":4170},{"style":254},[4171],{"type":57,"value":506},{"type":51,"tag":181,"props":4173,"children":4174},{"style":248},[4175],{"type":57,"value":4058},{"type":51,"tag":181,"props":4177,"children":4178},{"style":254},[4179],{"type":57,"value":373},{"type":51,"tag":181,"props":4181,"children":4183},{"class":183,"line":4182},56,[4184],{"type":51,"tag":181,"props":4185,"children":4186},{"emptyLinePlaceholder":465},[4187],{"type":57,"value":468},{"type":51,"tag":181,"props":4189,"children":4191},{"class":183,"line":4190},57,[4192,4196,4200,4205],{"type":51,"tag":181,"props":4193,"children":4194},{"style":450},[4195],{"type":57,"value":1540},{"type":51,"tag":181,"props":4197,"children":4198},{"style":254},[4199],{"type":57,"value":506},{"type":51,"tag":181,"props":4201,"children":4202},{"style":193},[4203],{"type":57,"value":4204},"✓ Compose environment file updated",{"type":51,"tag":181,"props":4206,"children":4207},{"style":254},[4208],{"type":57,"value":373},{"type":51,"tag":181,"props":4210,"children":4212},{"class":183,"line":4211},58,[4213,4218,4222,4226],{"type":51,"tag":181,"props":4214,"children":4215},{"style":188},[4216],{"type":57,"value":4217},"cat",{"type":51,"tag":181,"props":4219,"children":4220},{"style":254},[4221],{"type":57,"value":506},{"type":51,"tag":181,"props":4223,"children":4224},{"style":248},[4225],{"type":57,"value":3402},{"type":51,"tag":181,"props":4227,"children":4228},{"style":254},[4229],{"type":57,"value":373},{"type":51,"tag":60,"props":4231,"children":4232},{},[4233,4237,4239,4244,4246,4252],{"type":51,"tag":285,"props":4234,"children":4235},{},[4236],{"type":57,"value":2696},{"type":57,"value":4238},": ",{"type":51,"tag":91,"props":4240,"children":4242},{"className":4241},[],[4243],{"type":57,"value":3239},{"type":57,"value":4245}," must be the machine's network IP (not ",{"type":51,"tag":91,"props":4247,"children":4249},{"className":4248},[],[4250],{"type":57,"value":4251},"localhost",{"type":57,"value":4253},") so the UI container can reach the backend from a browser.",{"type":51,"tag":60,"props":4255,"children":4256},{},[4257,4259,4265,4267,4273],{"type":57,"value":4258},"Optional: set ",{"type":51,"tag":91,"props":4260,"children":4262},{"className":4261},[],[4263],{"type":57,"value":4264},"VGGT_MODEL_PATH",{"type":57,"value":4266}," only if the VGGT model is mounted at a non-default container path; default is ",{"type":51,"tag":91,"props":4268,"children":4270},{"className":4269},[],[4271],{"type":57,"value":4272},"\u002Ftmp\u002Fvggt_model\u002Fvggt_1B_commercial.pt",{"type":57,"value":4274}," inside the MS container.",{"type":51,"tag":60,"props":4276,"children":4277},{},[4278,4280,4286,4288,4294],{"type":57,"value":4279},"Optional for RTSP calibration: use ",{"type":51,"tag":91,"props":4281,"children":4283},{"className":4282},[],[4284],{"type":57,"value":4285},"skills\u002Famc-run-rtsp-calibration\u002FSKILL.md",{"type":57,"value":4287}," after launch. That skill verifies VIOS reachability and, when needed, relaunches the microservice with a temporary compose override that exports ",{"type":51,"tag":91,"props":4289,"children":4291},{"className":4290},[],[4292],{"type":57,"value":4293},"VIOS_BASE_URL",{"type":57,"value":4295}," without changing checked-in compose files.",{"type":51,"tag":163,"props":4297,"children":4299},{"id":4298},"step-4-set-directory-permissions",[4300],{"type":57,"value":4301},"Step 4: Set Directory Permissions",{"type":51,"tag":60,"props":4303,"children":4304},{},[4305,4307,4313,4314,4320],{"type":57,"value":4306},"The containers run as UID\u002FGID 1000. The ",{"type":51,"tag":91,"props":4308,"children":4310},{"className":4309},[],[4311],{"type":57,"value":4312},"projects",{"type":57,"value":1603},{"type":51,"tag":91,"props":4315,"children":4317},{"className":4316},[],[4318],{"type":57,"value":4319},"models",{"type":57,"value":4321}," directories must be owned by this UID for containers to read\u002Fwrite properly:",{"type":51,"tag":170,"props":4323,"children":4325},{"className":172,"code":4324,"language":174,"meta":175,"style":175},"cd \"$REPO_ROOT\"\n\n# Create projects directory if it doesn't exist\nmkdir -p projects\n\n# Set ownership (required for containers to write calibration outputs).\n# Do this AFTER VGGT download is complete (current user needs write access during download).\n# Get explicit user confirmation before running sudo chown — it recursively changes\n# ownership of $REPO_ROOT\u002Fprojects and $REPO_ROOT\u002Fmodels to UID\u002FGID 1000.\n[ -d projects ] && [ -d models ] || {\n  echo \"ERROR: expected projects\u002F and models\u002F under $REPO_ROOT\" >&2; exit 1;\n}\necho \"About to chown -R 1000:1000 on:\"\necho \"  $REPO_ROOT\u002Fprojects\"\necho \"  $REPO_ROOT\u002Fmodels\"\necho \"(required because containers run as UID 1000). Confirm before proceeding.\"\nsudo chown 1000:1000 -R projects\nsudo chown 1000:1000 -R models\n\necho \"✓ Permissions set\"\n",[4326],{"type":51,"tag":91,"props":4327,"children":4328},{"__ignoreMap":175},[4329,4348,4355,4363,4381,4388,4396,4404,4412,4420,4470,4511,4518,4538,4563,4587,4607,4633,4657,4664],{"type":51,"tag":181,"props":4330,"children":4331},{"class":183,"line":184},[4332,4336,4340,4344],{"type":51,"tag":181,"props":4333,"children":4334},{"style":450},[4335],{"type":57,"value":1504},{"type":51,"tag":181,"props":4337,"children":4338},{"style":254},[4339],{"type":57,"value":506},{"type":51,"tag":181,"props":4341,"children":4342},{"style":248},[4343],{"type":57,"value":1106},{"type":51,"tag":181,"props":4345,"children":4346},{"style":254},[4347],{"type":57,"value":373},{"type":51,"tag":181,"props":4349,"children":4350},{"class":183,"line":376},[4351],{"type":51,"tag":181,"props":4352,"children":4353},{"emptyLinePlaceholder":465},[4354],{"type":57,"value":468},{"type":51,"tag":181,"props":4356,"children":4357},{"class":183,"line":407},[4358],{"type":51,"tag":181,"props":4359,"children":4360},{"style":1349},[4361],{"type":57,"value":4362},"# Create projects directory if it doesn't exist\n",{"type":51,"tag":181,"props":4364,"children":4365},{"class":183,"line":461},[4366,4371,4376],{"type":51,"tag":181,"props":4367,"children":4368},{"style":188},[4369],{"type":57,"value":4370},"mkdir",{"type":51,"tag":181,"props":4372,"children":4373},{"style":193},[4374],{"type":57,"value":4375}," -p",{"type":51,"tag":181,"props":4377,"children":4378},{"style":193},[4379],{"type":57,"value":4380}," projects\n",{"type":51,"tag":181,"props":4382,"children":4383},{"class":183,"line":471},[4384],{"type":51,"tag":181,"props":4385,"children":4386},{"emptyLinePlaceholder":465},[4387],{"type":57,"value":468},{"type":51,"tag":181,"props":4389,"children":4390},{"class":183,"line":490},[4391],{"type":51,"tag":181,"props":4392,"children":4393},{"style":1349},[4394],{"type":57,"value":4395},"# Set ownership (required for containers to write calibration outputs).\n",{"type":51,"tag":181,"props":4397,"children":4398},{"class":183,"line":529},[4399],{"type":51,"tag":181,"props":4400,"children":4401},{"style":1349},[4402],{"type":57,"value":4403},"# Do this AFTER VGGT download is complete (current user needs write access during download).\n",{"type":51,"tag":181,"props":4405,"children":4406},{"class":183,"line":573},[4407],{"type":51,"tag":181,"props":4408,"children":4409},{"style":1349},[4410],{"type":57,"value":4411},"# Get explicit user confirmation before running sudo chown — it recursively changes\n",{"type":51,"tag":181,"props":4413,"children":4414},{"class":183,"line":634},[4415],{"type":51,"tag":181,"props":4416,"children":4417},{"style":1349},[4418],{"type":57,"value":4419},"# ownership of $REPO_ROOT\u002Fprojects and $REPO_ROOT\u002Fmodels to UID\u002FGID 1000.\n",{"type":51,"tag":181,"props":4421,"children":4422},{"class":183,"line":675},[4423,4427,4431,4436,4441,4445,4449,4453,4458,4462,4466],{"type":51,"tag":181,"props":4424,"children":4425},{"style":254},[4426],{"type":57,"value":2919},{"type":51,"tag":181,"props":4428,"children":4429},{"style":254},[4430],{"type":57,"value":1230},{"type":51,"tag":181,"props":4432,"children":4433},{"style":248},[4434],{"type":57,"value":4435}," projects ",{"type":51,"tag":181,"props":4437,"children":4438},{"style":254},[4439],{"type":57,"value":4440},"]",{"type":51,"tag":181,"props":4442,"children":4443},{"style":254},[4444],{"type":57,"value":1221},{"type":51,"tag":181,"props":4446,"children":4447},{"style":254},[4448],{"type":57,"value":540},{"type":51,"tag":181,"props":4450,"children":4451},{"style":254},[4452],{"type":57,"value":1230},{"type":51,"tag":181,"props":4454,"children":4455},{"style":248},[4456],{"type":57,"value":4457}," models ",{"type":51,"tag":181,"props":4459,"children":4460},{"style":254},[4461],{"type":57,"value":4440},{"type":51,"tag":181,"props":4463,"children":4464},{"style":254},[4465],{"type":57,"value":1750},{"type":51,"tag":181,"props":4467,"children":4468},{"style":254},[4469],{"type":57,"value":487},{"type":51,"tag":181,"props":4471,"children":4472},{"class":183,"line":733},[4473,4477,4481,4486,4490,4494,4498,4502,4506],{"type":51,"tag":181,"props":4474,"children":4475},{"style":450},[4476],{"type":57,"value":1379},{"type":51,"tag":181,"props":4478,"children":4479},{"style":254},[4480],{"type":57,"value":506},{"type":51,"tag":181,"props":4482,"children":4483},{"style":193},[4484],{"type":57,"value":4485},"ERROR: expected projects\u002F and models\u002F under ",{"type":51,"tag":181,"props":4487,"children":4488},{"style":248},[4489],{"type":57,"value":1106},{"type":51,"tag":181,"props":4491,"children":4492},{"style":254},[4493],{"type":57,"value":363},{"type":51,"tag":181,"props":4495,"children":4496},{"style":254},[4497],{"type":57,"value":2539},{"type":51,"tag":181,"props":4499,"children":4500},{"style":450},[4501],{"type":57,"value":2544},{"type":51,"tag":181,"props":4503,"children":4504},{"style":1475},[4505],{"type":57,"value":2549},{"type":51,"tag":181,"props":4507,"children":4508},{"style":254},[4509],{"type":57,"value":4510},";\n",{"type":51,"tag":181,"props":4512,"children":4513},{"class":183,"line":788},[4514],{"type":51,"tag":181,"props":4515,"children":4516},{"style":254},[4517],{"type":57,"value":794},{"type":51,"tag":181,"props":4519,"children":4520},{"class":183,"line":797},[4521,4525,4529,4534],{"type":51,"tag":181,"props":4522,"children":4523},{"style":450},[4524],{"type":57,"value":1540},{"type":51,"tag":181,"props":4526,"children":4527},{"style":254},[4528],{"type":57,"value":506},{"type":51,"tag":181,"props":4530,"children":4531},{"style":193},[4532],{"type":57,"value":4533},"About to chown -R 1000:1000 on:",{"type":51,"tag":181,"props":4535,"children":4536},{"style":254},[4537],{"type":57,"value":373},{"type":51,"tag":181,"props":4539,"children":4540},{"class":183,"line":805},[4541,4545,4549,4554,4559],{"type":51,"tag":181,"props":4542,"children":4543},{"style":450},[4544],{"type":57,"value":1540},{"type":51,"tag":181,"props":4546,"children":4547},{"style":254},[4548],{"type":57,"value":506},{"type":51,"tag":181,"props":4550,"children":4551},{"style":248},[4552],{"type":57,"value":4553},"  $REPO_ROOT",{"type":51,"tag":181,"props":4555,"children":4556},{"style":193},[4557],{"type":57,"value":4558},"\u002Fprojects",{"type":51,"tag":181,"props":4560,"children":4561},{"style":254},[4562],{"type":57,"value":373},{"type":51,"tag":181,"props":4564,"children":4565},{"class":183,"line":823},[4566,4570,4574,4578,4583],{"type":51,"tag":181,"props":4567,"children":4568},{"style":450},[4569],{"type":57,"value":1540},{"type":51,"tag":181,"props":4571,"children":4572},{"style":254},[4573],{"type":57,"value":506},{"type":51,"tag":181,"props":4575,"children":4576},{"style":248},[4577],{"type":57,"value":4553},{"type":51,"tag":181,"props":4579,"children":4580},{"style":193},[4581],{"type":57,"value":4582},"\u002Fmodels",{"type":51,"tag":181,"props":4584,"children":4585},{"style":254},[4586],{"type":57,"value":373},{"type":51,"tag":181,"props":4588,"children":4589},{"class":183,"line":847},[4590,4594,4598,4603],{"type":51,"tag":181,"props":4591,"children":4592},{"style":450},[4593],{"type":57,"value":1540},{"type":51,"tag":181,"props":4595,"children":4596},{"style":254},[4597],{"type":57,"value":506},{"type":51,"tag":181,"props":4599,"children":4600},{"style":193},[4601],{"type":57,"value":4602},"(required because containers run as UID 1000). Confirm before proceeding.",{"type":51,"tag":181,"props":4604,"children":4605},{"style":254},[4606],{"type":57,"value":373},{"type":51,"tag":181,"props":4608,"children":4609},{"class":183,"line":869},[4610,4614,4619,4624,4629],{"type":51,"tag":181,"props":4611,"children":4612},{"style":188},[4613],{"type":57,"value":145},{"type":51,"tag":181,"props":4615,"children":4616},{"style":193},[4617],{"type":57,"value":4618}," chown",{"type":51,"tag":181,"props":4620,"children":4621},{"style":193},[4622],{"type":57,"value":4623}," 1000:1000",{"type":51,"tag":181,"props":4625,"children":4626},{"style":193},[4627],{"type":57,"value":4628}," -R",{"type":51,"tag":181,"props":4630,"children":4631},{"style":193},[4632],{"type":57,"value":4380},{"type":51,"tag":181,"props":4634,"children":4635},{"class":183,"line":923},[4636,4640,4644,4648,4652],{"type":51,"tag":181,"props":4637,"children":4638},{"style":188},[4639],{"type":57,"value":145},{"type":51,"tag":181,"props":4641,"children":4642},{"style":193},[4643],{"type":57,"value":4618},{"type":51,"tag":181,"props":4645,"children":4646},{"style":193},[4647],{"type":57,"value":4623},{"type":51,"tag":181,"props":4649,"children":4650},{"style":193},[4651],{"type":57,"value":4628},{"type":51,"tag":181,"props":4653,"children":4654},{"style":193},[4655],{"type":57,"value":4656}," models\n",{"type":51,"tag":181,"props":4658,"children":4659},{"class":183,"line":972},[4660],{"type":51,"tag":181,"props":4661,"children":4662},{"emptyLinePlaceholder":465},[4663],{"type":57,"value":468},{"type":51,"tag":181,"props":4665,"children":4666},{"class":183,"line":998},[4667,4671,4675,4680],{"type":51,"tag":181,"props":4668,"children":4669},{"style":450},[4670],{"type":57,"value":1540},{"type":51,"tag":181,"props":4672,"children":4673},{"style":254},[4674],{"type":57,"value":506},{"type":51,"tag":181,"props":4676,"children":4677},{"style":193},[4678],{"type":57,"value":4679},"✓ Permissions set",{"type":51,"tag":181,"props":4681,"children":4682},{"style":254},[4683],{"type":57,"value":373},{"type":51,"tag":163,"props":4685,"children":4687},{"id":4686},"step-5-launch-services",[4688],{"type":57,"value":4689},"Step 5: Launch Services",{"type":51,"tag":60,"props":4691,"children":4692},{},[4693,4695,4701],{"type":57,"value":4694},"Before pulling, fail fast if the NGC key authenticated in Step 1 but cannot actually access a release image — otherwise ",{"type":51,"tag":91,"props":4696,"children":4698},{"className":4697},[],[4699],{"type":57,"value":4700},"docker compose up",{"type":57,"value":4702}," aborts partway with a 401\u002F403 after some work is already done.",{"type":51,"tag":170,"props":4704,"children":4706},{"className":172,"code":4705,"language":174,"meta":175,"style":175},"cd $REPO_ROOT\u002Fcompose\n\n# Fail-fast image-access check: confirm the NGC key can reach every release\n# image BEFORE pulling. `docker manifest inspect` checks registry access without\n# downloading layers, and the image list is read from the resolved compose so it\n# tracks the release tag automatically.\nIMAGES=$(docker compose config --images | sort -u)\n[ -z \"$IMAGES\" ] && { echo \"ERROR: no images resolved from compose — check the Compose environment settings and chosen profile.\" >&2; exit 1; }\nfor img in $IMAGES; do\n  echo \"Checking access: $img\"\n  if ! docker manifest inspect \"$img\" >\u002Fdev\u002Fnull 2>&1; then\n    echo \"NGC login succeeded, but this key cannot access the required image:\" >&2\n    echo \"  $img\" >&2\n    echo \"Provide an NGC key with access to this image's namespace, then re-run Step 1 (login) and retry.\" >&2\n    exit 1\n  fi\ndone\n\n# Start all services (images pulled automatically on first run)\ndocker compose up -d\n\n# Check containers are running\ndocker compose ps\n",[4707],{"type":51,"tag":91,"props":4708,"children":4709},{"__ignoreMap":175},[4710,4725,4732,4740,4748,4756,4764,4813,4886,4915,4940,4993,5017,5041,5065,5077,5084,5091,5098,5106,5127,5134,5142],{"type":51,"tag":181,"props":4711,"children":4712},{"class":183,"line":184},[4713,4717,4721],{"type":51,"tag":181,"props":4714,"children":4715},{"style":450},[4716],{"type":57,"value":1504},{"type":51,"tag":181,"props":4718,"children":4719},{"style":248},[4720],{"type":57,"value":2736},{"type":51,"tag":181,"props":4722,"children":4723},{"style":193},[4724],{"type":57,"value":2741},{"type":51,"tag":181,"props":4726,"children":4727},{"class":183,"line":376},[4728],{"type":51,"tag":181,"props":4729,"children":4730},{"emptyLinePlaceholder":465},[4731],{"type":57,"value":468},{"type":51,"tag":181,"props":4733,"children":4734},{"class":183,"line":407},[4735],{"type":51,"tag":181,"props":4736,"children":4737},{"style":1349},[4738],{"type":57,"value":4739},"# Fail-fast image-access check: confirm the NGC key can reach every release\n",{"type":51,"tag":181,"props":4741,"children":4742},{"class":183,"line":461},[4743],{"type":51,"tag":181,"props":4744,"children":4745},{"style":1349},[4746],{"type":57,"value":4747},"# image BEFORE pulling. `docker manifest inspect` checks registry access without\n",{"type":51,"tag":181,"props":4749,"children":4750},{"class":183,"line":471},[4751],{"type":51,"tag":181,"props":4752,"children":4753},{"style":1349},[4754],{"type":57,"value":4755},"# downloading layers, and the image list is read from the resolved compose so it\n",{"type":51,"tag":181,"props":4757,"children":4758},{"class":183,"line":490},[4759],{"type":51,"tag":181,"props":4760,"children":4761},{"style":1349},[4762],{"type":57,"value":4763},"# tracks the release tag automatically.\n",{"type":51,"tag":181,"props":4765,"children":4766},{"class":183,"line":529},[4767,4772,4776,4780,4785,4790,4795,4799,4804,4809],{"type":51,"tag":181,"props":4768,"children":4769},{"style":248},[4770],{"type":57,"value":4771},"IMAGES",{"type":51,"tag":181,"props":4773,"children":4774},{"style":254},[4775],{"type":57,"value":2041},{"type":51,"tag":181,"props":4777,"children":4778},{"style":188},[4779],{"type":57,"value":22},{"type":51,"tag":181,"props":4781,"children":4782},{"style":193},[4783],{"type":57,"value":4784}," compose",{"type":51,"tag":181,"props":4786,"children":4787},{"style":193},[4788],{"type":57,"value":4789}," config",{"type":51,"tag":181,"props":4791,"children":4792},{"style":193},[4793],{"type":57,"value":4794}," --images",{"type":51,"tag":181,"props":4796,"children":4797},{"style":254},[4798],{"type":57,"value":1952},{"type":51,"tag":181,"props":4800,"children":4801},{"style":188},[4802],{"type":57,"value":4803}," sort",{"type":51,"tag":181,"props":4805,"children":4806},{"style":193},[4807],{"type":57,"value":4808}," -u",{"type":51,"tag":181,"props":4810,"children":4811},{"style":254},[4812],{"type":57,"value":2060},{"type":51,"tag":181,"props":4814,"children":4815},{"class":183,"line":573},[4816,4820,4824,4828,4833,4837,4841,4845,4849,4853,4857,4862,4866,4870,4874,4878,4882],{"type":51,"tag":181,"props":4817,"children":4818},{"style":254},[4819],{"type":57,"value":2919},{"type":51,"tag":181,"props":4821,"children":4822},{"style":254},[4823],{"type":57,"value":1163},{"type":51,"tag":181,"props":4825,"children":4826},{"style":254},[4827],{"type":57,"value":506},{"type":51,"tag":181,"props":4829,"children":4830},{"style":248},[4831],{"type":57,"value":4832},"$IMAGES",{"type":51,"tag":181,"props":4834,"children":4835},{"style":254},[4836],{"type":57,"value":363},{"type":51,"tag":181,"props":4838,"children":4839},{"style":254},[4840],{"type":57,"value":521},{"type":51,"tag":181,"props":4842,"children":4843},{"style":254},[4844],{"type":57,"value":1221},{"type":51,"tag":181,"props":4846,"children":4847},{"style":254},[4848],{"type":57,"value":2516},{"type":51,"tag":181,"props":4850,"children":4851},{"style":450},[4852],{"type":57,"value":2521},{"type":51,"tag":181,"props":4854,"children":4855},{"style":254},[4856],{"type":57,"value":506},{"type":51,"tag":181,"props":4858,"children":4859},{"style":193},[4860],{"type":57,"value":4861},"ERROR: no images resolved from compose — check the Compose environment settings and chosen profile.",{"type":51,"tag":181,"props":4863,"children":4864},{"style":254},[4865],{"type":57,"value":363},{"type":51,"tag":181,"props":4867,"children":4868},{"style":254},[4869],{"type":57,"value":2539},{"type":51,"tag":181,"props":4871,"children":4872},{"style":450},[4873],{"type":57,"value":2544},{"type":51,"tag":181,"props":4875,"children":4876},{"style":1475},[4877],{"type":57,"value":2549},{"type":51,"tag":181,"props":4879,"children":4880},{"style":254},[4881],{"type":57,"value":1017},{"type":51,"tag":181,"props":4883,"children":4884},{"style":254},[4885],{"type":57,"value":2558},{"type":51,"tag":181,"props":4887,"children":4888},{"class":183,"line":634},[4889,4893,4898,4902,4907,4911],{"type":51,"tag":181,"props":4890,"children":4891},{"style":827},[4892],{"type":57,"value":830},{"type":51,"tag":181,"props":4894,"children":4895},{"style":248},[4896],{"type":57,"value":4897}," img ",{"type":51,"tag":181,"props":4899,"children":4900},{"style":827},[4901],{"type":57,"value":840},{"type":51,"tag":181,"props":4903,"children":4904},{"style":248},[4905],{"type":57,"value":4906}," $IMAGES",{"type":51,"tag":181,"props":4908,"children":4909},{"style":254},[4910],{"type":57,"value":1017},{"type":51,"tag":181,"props":4912,"children":4913},{"style":827},[4914],{"type":57,"value":1022},{"type":51,"tag":181,"props":4916,"children":4917},{"class":183,"line":675},[4918,4922,4926,4931,4936],{"type":51,"tag":181,"props":4919,"children":4920},{"style":450},[4921],{"type":57,"value":1379},{"type":51,"tag":181,"props":4923,"children":4924},{"style":254},[4925],{"type":57,"value":506},{"type":51,"tag":181,"props":4927,"children":4928},{"style":193},[4929],{"type":57,"value":4930},"Checking access: ",{"type":51,"tag":181,"props":4932,"children":4933},{"style":248},[4934],{"type":57,"value":4935},"$img",{"type":51,"tag":181,"props":4937,"children":4938},{"style":254},[4939],{"type":57,"value":373},{"type":51,"tag":181,"props":4941,"children":4942},{"class":183,"line":733},[4943,4947,4951,4955,4960,4965,4969,4973,4977,4981,4985,4989],{"type":51,"tag":181,"props":4944,"children":4945},{"style":827},[4946],{"type":57,"value":1031},{"type":51,"tag":181,"props":4948,"children":4949},{"style":254},[4950],{"type":57,"value":2481},{"type":51,"tag":181,"props":4952,"children":4953},{"style":188},[4954],{"type":57,"value":245},{"type":51,"tag":181,"props":4956,"children":4957},{"style":193},[4958],{"type":57,"value":4959}," manifest",{"type":51,"tag":181,"props":4961,"children":4962},{"style":193},[4963],{"type":57,"value":4964}," inspect",{"type":51,"tag":181,"props":4966,"children":4967},{"style":254},[4968],{"type":57,"value":506},{"type":51,"tag":181,"props":4970,"children":4971},{"style":248},[4972],{"type":57,"value":4935},{"type":51,"tag":181,"props":4974,"children":4975},{"style":254},[4976],{"type":57,"value":363},{"type":51,"tag":181,"props":4978,"children":4979},{"style":254},[4980],{"type":57,"value":2835},{"type":51,"tag":181,"props":4982,"children":4983},{"style":193},[4984],{"type":57,"value":627},{"type":51,"tag":181,"props":4986,"children":4987},{"style":254},[4988],{"type":57,"value":2844},{"type":51,"tag":181,"props":4990,"children":4991},{"style":827},[4992],{"type":57,"value":1058},{"type":51,"tag":181,"props":4994,"children":4995},{"class":183,"line":788},[4996,5000,5004,5009,5013],{"type":51,"tag":181,"props":4997,"children":4998},{"style":450},[4999],{"type":57,"value":1092},{"type":51,"tag":181,"props":5001,"children":5002},{"style":254},[5003],{"type":57,"value":506},{"type":51,"tag":181,"props":5005,"children":5006},{"style":193},[5007],{"type":57,"value":5008},"NGC login succeeded, but this key cannot access the required image:",{"type":51,"tag":181,"props":5010,"children":5011},{"style":254},[5012],{"type":57,"value":363},{"type":51,"tag":181,"props":5014,"children":5015},{"style":254},[5016],{"type":57,"value":1779},{"type":51,"tag":181,"props":5018,"children":5019},{"class":183,"line":797},[5020,5024,5028,5033,5037],{"type":51,"tag":181,"props":5021,"children":5022},{"style":450},[5023],{"type":57,"value":1092},{"type":51,"tag":181,"props":5025,"children":5026},{"style":254},[5027],{"type":57,"value":506},{"type":51,"tag":181,"props":5029,"children":5030},{"style":248},[5031],{"type":57,"value":5032},"  $img",{"type":51,"tag":181,"props":5034,"children":5035},{"style":254},[5036],{"type":57,"value":363},{"type":51,"tag":181,"props":5038,"children":5039},{"style":254},[5040],{"type":57,"value":1779},{"type":51,"tag":181,"props":5042,"children":5043},{"class":183,"line":805},[5044,5048,5052,5057,5061],{"type":51,"tag":181,"props":5045,"children":5046},{"style":450},[5047],{"type":57,"value":1092},{"type":51,"tag":181,"props":5049,"children":5050},{"style":254},[5051],{"type":57,"value":506},{"type":51,"tag":181,"props":5053,"children":5054},{"style":193},[5055],{"type":57,"value":5056},"Provide an NGC key with access to this image's namespace, then re-run Step 1 (login) and retry.",{"type":51,"tag":181,"props":5058,"children":5059},{"style":254},[5060],{"type":57,"value":363},{"type":51,"tag":181,"props":5062,"children":5063},{"style":254},[5064],{"type":57,"value":1779},{"type":51,"tag":181,"props":5066,"children":5067},{"class":183,"line":823},[5068,5073],{"type":51,"tag":181,"props":5069,"children":5070},{"style":450},[5071],{"type":57,"value":5072},"    exit",{"type":51,"tag":181,"props":5074,"children":5075},{"style":1475},[5076],{"type":57,"value":1478},{"type":51,"tag":181,"props":5078,"children":5079},{"class":183,"line":847},[5080],{"type":51,"tag":181,"props":5081,"children":5082},{"style":827},[5083],{"type":57,"value":1128},{"type":51,"tag":181,"props":5085,"children":5086},{"class":183,"line":869},[5087],{"type":51,"tag":181,"props":5088,"children":5089},{"style":827},[5090],{"type":57,"value":1137},{"type":51,"tag":181,"props":5092,"children":5093},{"class":183,"line":923},[5094],{"type":51,"tag":181,"props":5095,"children":5096},{"emptyLinePlaceholder":465},[5097],{"type":57,"value":468},{"type":51,"tag":181,"props":5099,"children":5100},{"class":183,"line":972},[5101],{"type":51,"tag":181,"props":5102,"children":5103},{"style":1349},[5104],{"type":57,"value":5105},"# Start all services (images pulled automatically on first run)\n",{"type":51,"tag":181,"props":5107,"children":5108},{"class":183,"line":998},[5109,5113,5117,5122],{"type":51,"tag":181,"props":5110,"children":5111},{"style":188},[5112],{"type":57,"value":22},{"type":51,"tag":181,"props":5114,"children":5115},{"style":193},[5116],{"type":57,"value":4784},{"type":51,"tag":181,"props":5118,"children":5119},{"style":193},[5120],{"type":57,"value":5121}," up",{"type":51,"tag":181,"props":5123,"children":5124},{"style":193},[5125],{"type":57,"value":5126}," -d\n",{"type":51,"tag":181,"props":5128,"children":5129},{"class":183,"line":1025},[5130],{"type":51,"tag":181,"props":5131,"children":5132},{"emptyLinePlaceholder":465},[5133],{"type":57,"value":468},{"type":51,"tag":181,"props":5135,"children":5136},{"class":183,"line":1061},[5137],{"type":51,"tag":181,"props":5138,"children":5139},{"style":1349},[5140],{"type":57,"value":5141},"# Check containers are running\n",{"type":51,"tag":181,"props":5143,"children":5144},{"class":183,"line":1086},[5145,5149,5153],{"type":51,"tag":181,"props":5146,"children":5147},{"style":188},[5148],{"type":57,"value":22},{"type":51,"tag":181,"props":5150,"children":5151},{"style":193},[5152],{"type":57,"value":4784},{"type":51,"tag":181,"props":5154,"children":5155},{"style":193},[5156],{"type":57,"value":196},{"type":51,"tag":60,"props":5158,"children":5159},{},[5160],{"type":57,"value":5161},"The exact image tags change by release; read them from the active compose files instead of hardcoding a version.",{"type":51,"tag":163,"props":5163,"children":5165},{"id":5164},"step-6-verify-services-are-running",[5166],{"type":57,"value":5167},"Step 6: Verify Services Are Running",{"type":51,"tag":170,"props":5169,"children":5171},{"className":172,"code":5170,"language":174,"meta":175,"style":175},"# Read ports from the Compose environment file.\nCOMPOSE_ENV_BASENAME=\"env\"\nCOMPOSE_ENV_FILE=\"$REPO_ROOT\u002Fcompose\u002F.${COMPOSE_ENV_BASENAME}\"\nMS_PORT=$(grep AUTO_MAGIC_CALIB_MS_PORT \"$COMPOSE_ENV_FILE\" | cut -d= -f2)\nUI_PORT=$(grep AUTO_MAGIC_CALIB_UI_PORT \"$COMPOSE_ENV_FILE\" | cut -d= -f2)\nHOST_IP=$(grep HOST_IP \"$COMPOSE_ENV_FILE\" | cut -d= -f2)\n\n# Wait for microservice readiness. Cold image pulls or first startup can need\n# extra time after `docker compose up -d` returns.\nREADY_URL=\"http:\u002F\u002Flocalhost:${MS_PORT}\u002Fv1\u002Fready\"\necho \"Waiting for microservice readiness at ${READY_URL} ...\"\nready_response=\"\"\nfor attempt in $(seq 1 24); do\n  if ready_response=$(curl -fsS --max-time 5 \"${READY_URL}\" 2>\u002Fdev\u002Fnull) && \\\n     echo \"${ready_response}\" | grep -q '\"code\"[[:space:]]*:[[:space:]]*0'; then\n    echo \"Microservice ready: ${ready_response}\"\n    break\n  fi\n  if [ \"${attempt}\" -lt 24 ]; then\n    printf \"  [%02d\u002F24] Microservice not ready yet; retrying in 5s...\\n\" \"${attempt}\"\n    sleep 5\n  fi\ndone\n\nif ! echo \"${ready_response}\" | grep -q '\"code\"[[:space:]]*:[[:space:]]*0'; then\n  echo \"ERROR: microservice did not report ready within 120 seconds: ${READY_URL}\" >&2\n  echo \"Check status and logs:\" >&2\n  echo \"  cd ${REPO_ROOT}\u002Fcompose && docker compose ps\" >&2\n  echo \"  cd ${REPO_ROOT}\u002Fcompose && docker compose logs auto-magic-calib-ms\" >&2\n  exit 1\nfi\n\n# Check UI is serving\nUI_STATUS=$(curl -s -o \u002Fdev\u002Fnull -w \"%{http_code}\" --max-time 5 \"http:\u002F\u002Flocalhost:${UI_PORT}\")\nif [ \"${UI_STATUS}\" != \"200\" ]; then\n  echo \"ERROR: Web UI returned HTTP ${UI_STATUS}; check docker compose ps and UI logs.\" >&2\n  exit 1\nfi\necho \"Web UI ready: HTTP ${UI_STATUS}\"\n\necho \"Microservice: http:\u002F\u002F${HOST_IP}:${MS_PORT}\"\necho \"Web UI:       http:\u002F\u002F${HOST_IP}:${UI_PORT}\"\n",[5172],{"type":51,"tag":91,"props":5173,"children":5174},{"__ignoreMap":175},[5175,5183,5206,5243,5298,5349,5400,5407,5415,5423,5465,5502,5518,5562,5631,5684,5712,5719,5726,5767,5800,5813,5820,5827,5834,5893,5925,5949,5990,6030,6041,6048,6055,6063,6144,6193,6234,6245,6252,6280,6287,6331],{"type":51,"tag":181,"props":5176,"children":5177},{"class":183,"line":184},[5178],{"type":51,"tag":181,"props":5179,"children":5180},{"style":1349},[5181],{"type":57,"value":5182},"# Read ports from the Compose environment file.\n",{"type":51,"tag":181,"props":5184,"children":5185},{"class":183,"line":376},[5186,5190,5194,5198,5202],{"type":51,"tag":181,"props":5187,"children":5188},{"style":248},[5189],{"type":57,"value":3327},{"type":51,"tag":181,"props":5191,"children":5192},{"style":254},[5193],{"type":57,"value":358},{"type":51,"tag":181,"props":5195,"children":5196},{"style":254},[5197],{"type":57,"value":363},{"type":51,"tag":181,"props":5199,"children":5200},{"style":193},[5201],{"type":57,"value":3340},{"type":51,"tag":181,"props":5203,"children":5204},{"style":254},[5205],{"type":57,"value":373},{"type":51,"tag":181,"props":5207,"children":5208},{"class":183,"line":407},[5209,5214,5218,5222,5226,5231,5235,5239],{"type":51,"tag":181,"props":5210,"children":5211},{"style":248},[5212],{"type":57,"value":5213},"COMPOSE_ENV_FILE",{"type":51,"tag":181,"props":5215,"children":5216},{"style":254},[5217],{"type":57,"value":358},{"type":51,"tag":181,"props":5219,"children":5220},{"style":254},[5221],{"type":57,"value":363},{"type":51,"tag":181,"props":5223,"children":5224},{"style":248},[5225],{"type":57,"value":1106},{"type":51,"tag":181,"props":5227,"children":5228},{"style":193},[5229],{"type":57,"value":5230},"\u002Fcompose\u002F.",{"type":51,"tag":181,"props":5232,"children":5233},{"style":254},[5234],{"type":57,"value":3369},{"type":51,"tag":181,"props":5236,"children":5237},{"style":248},[5238],{"type":57,"value":3327},{"type":51,"tag":181,"props":5240,"children":5241},{"style":254},[5242],{"type":57,"value":3378},{"type":51,"tag":181,"props":5244,"children":5245},{"class":183,"line":461},[5246,5250,5254,5258,5262,5266,5271,5275,5279,5284,5289,5294],{"type":51,"tag":181,"props":5247,"children":5248},{"style":248},[5249],{"type":57,"value":3888},{"type":51,"tag":181,"props":5251,"children":5252},{"style":254},[5253],{"type":57,"value":2041},{"type":51,"tag":181,"props":5255,"children":5256},{"style":188},[5257],{"type":57,"value":4113},{"type":51,"tag":181,"props":5259,"children":5260},{"style":193},[5261],{"type":57,"value":3879},{"type":51,"tag":181,"props":5263,"children":5264},{"style":254},[5265],{"type":57,"value":506},{"type":51,"tag":181,"props":5267,"children":5268},{"style":248},[5269],{"type":57,"value":5270},"$COMPOSE_ENV_FILE",{"type":51,"tag":181,"props":5272,"children":5273},{"style":254},[5274],{"type":57,"value":363},{"type":51,"tag":181,"props":5276,"children":5277},{"style":254},[5278],{"type":57,"value":1952},{"type":51,"tag":181,"props":5280,"children":5281},{"style":188},[5282],{"type":57,"value":5283}," cut",{"type":51,"tag":181,"props":5285,"children":5286},{"style":193},[5287],{"type":57,"value":5288}," -d=",{"type":51,"tag":181,"props":5290,"children":5291},{"style":193},[5292],{"type":57,"value":5293}," -f2",{"type":51,"tag":181,"props":5295,"children":5296},{"style":254},[5297],{"type":57,"value":2060},{"type":51,"tag":181,"props":5299,"children":5300},{"class":183,"line":471},[5301,5305,5309,5313,5317,5321,5325,5329,5333,5337,5341,5345],{"type":51,"tag":181,"props":5302,"children":5303},{"style":248},[5304],{"type":57,"value":3913},{"type":51,"tag":181,"props":5306,"children":5307},{"style":254},[5308],{"type":57,"value":2041},{"type":51,"tag":181,"props":5310,"children":5311},{"style":188},[5312],{"type":57,"value":4113},{"type":51,"tag":181,"props":5314,"children":5315},{"style":193},[5316],{"type":57,"value":3904},{"type":51,"tag":181,"props":5318,"children":5319},{"style":254},[5320],{"type":57,"value":506},{"type":51,"tag":181,"props":5322,"children":5323},{"style":248},[5324],{"type":57,"value":5270},{"type":51,"tag":181,"props":5326,"children":5327},{"style":254},[5328],{"type":57,"value":363},{"type":51,"tag":181,"props":5330,"children":5331},{"style":254},[5332],{"type":57,"value":1952},{"type":51,"tag":181,"props":5334,"children":5335},{"style":188},[5336],{"type":57,"value":5283},{"type":51,"tag":181,"props":5338,"children":5339},{"style":193},[5340],{"type":57,"value":5288},{"type":51,"tag":181,"props":5342,"children":5343},{"style":193},[5344],{"type":57,"value":5293},{"type":51,"tag":181,"props":5346,"children":5347},{"style":254},[5348],{"type":57,"value":2060},{"type":51,"tag":181,"props":5350,"children":5351},{"class":183,"line":490},[5352,5356,5360,5364,5368,5372,5376,5380,5384,5388,5392,5396],{"type":51,"tag":181,"props":5353,"children":5354},{"style":248},[5355],{"type":57,"value":3239},{"type":51,"tag":181,"props":5357,"children":5358},{"style":254},[5359],{"type":57,"value":2041},{"type":51,"tag":181,"props":5361,"children":5362},{"style":188},[5363],{"type":57,"value":4113},{"type":51,"tag":181,"props":5365,"children":5366},{"style":193},[5367],{"type":57,"value":3982},{"type":51,"tag":181,"props":5369,"children":5370},{"style":254},[5371],{"type":57,"value":506},{"type":51,"tag":181,"props":5373,"children":5374},{"style":248},[5375],{"type":57,"value":5270},{"type":51,"tag":181,"props":5377,"children":5378},{"style":254},[5379],{"type":57,"value":363},{"type":51,"tag":181,"props":5381,"children":5382},{"style":254},[5383],{"type":57,"value":1952},{"type":51,"tag":181,"props":5385,"children":5386},{"style":188},[5387],{"type":57,"value":5283},{"type":51,"tag":181,"props":5389,"children":5390},{"style":193},[5391],{"type":57,"value":5288},{"type":51,"tag":181,"props":5393,"children":5394},{"style":193},[5395],{"type":57,"value":5293},{"type":51,"tag":181,"props":5397,"children":5398},{"style":254},[5399],{"type":57,"value":2060},{"type":51,"tag":181,"props":5401,"children":5402},{"class":183,"line":529},[5403],{"type":51,"tag":181,"props":5404,"children":5405},{"emptyLinePlaceholder":465},[5406],{"type":57,"value":468},{"type":51,"tag":181,"props":5408,"children":5409},{"class":183,"line":573},[5410],{"type":51,"tag":181,"props":5411,"children":5412},{"style":1349},[5413],{"type":57,"value":5414},"# Wait for microservice readiness. Cold image pulls or first startup can need\n",{"type":51,"tag":181,"props":5416,"children":5417},{"class":183,"line":634},[5418],{"type":51,"tag":181,"props":5419,"children":5420},{"style":1349},[5421],{"type":57,"value":5422},"# extra time after `docker compose up -d` returns.\n",{"type":51,"tag":181,"props":5424,"children":5425},{"class":183,"line":675},[5426,5431,5435,5439,5444,5448,5452,5456,5461],{"type":51,"tag":181,"props":5427,"children":5428},{"style":248},[5429],{"type":57,"value":5430},"READY_URL",{"type":51,"tag":181,"props":5432,"children":5433},{"style":254},[5434],{"type":57,"value":358},{"type":51,"tag":181,"props":5436,"children":5437},{"style":254},[5438],{"type":57,"value":363},{"type":51,"tag":181,"props":5440,"children":5441},{"style":193},[5442],{"type":57,"value":5443},"http:\u002F\u002Flocalhost:",{"type":51,"tag":181,"props":5445,"children":5446},{"style":254},[5447],{"type":57,"value":3369},{"type":51,"tag":181,"props":5449,"children":5450},{"style":248},[5451],{"type":57,"value":3888},{"type":51,"tag":181,"props":5453,"children":5454},{"style":254},[5455],{"type":57,"value":1697},{"type":51,"tag":181,"props":5457,"children":5458},{"style":193},[5459],{"type":57,"value":5460},"\u002Fv1\u002Fready",{"type":51,"tag":181,"props":5462,"children":5463},{"style":254},[5464],{"type":57,"value":373},{"type":51,"tag":181,"props":5466,"children":5467},{"class":183,"line":733},[5468,5472,5476,5481,5485,5489,5493,5498],{"type":51,"tag":181,"props":5469,"children":5470},{"style":450},[5471],{"type":57,"value":1540},{"type":51,"tag":181,"props":5473,"children":5474},{"style":254},[5475],{"type":57,"value":506},{"type":51,"tag":181,"props":5477,"children":5478},{"style":193},[5479],{"type":57,"value":5480},"Waiting for microservice readiness at ",{"type":51,"tag":181,"props":5482,"children":5483},{"style":254},[5484],{"type":57,"value":3369},{"type":51,"tag":181,"props":5486,"children":5487},{"style":248},[5488],{"type":57,"value":5430},{"type":51,"tag":181,"props":5490,"children":5491},{"style":254},[5492],{"type":57,"value":1697},{"type":51,"tag":181,"props":5494,"children":5495},{"style":193},[5496],{"type":57,"value":5497}," ...",{"type":51,"tag":181,"props":5499,"children":5500},{"style":254},[5501],{"type":57,"value":373},{"type":51,"tag":181,"props":5503,"children":5504},{"class":183,"line":788},[5505,5510,5514],{"type":51,"tag":181,"props":5506,"children":5507},{"style":248},[5508],{"type":57,"value":5509},"ready_response",{"type":51,"tag":181,"props":5511,"children":5512},{"style":254},[5513],{"type":57,"value":358},{"type":51,"tag":181,"props":5515,"children":5516},{"style":254},[5517],{"type":57,"value":820},{"type":51,"tag":181,"props":5519,"children":5520},{"class":183,"line":797},[5521,5525,5530,5534,5539,5544,5548,5553,5558],{"type":51,"tag":181,"props":5522,"children":5523},{"style":827},[5524],{"type":57,"value":830},{"type":51,"tag":181,"props":5526,"children":5527},{"style":248},[5528],{"type":57,"value":5529}," attempt ",{"type":51,"tag":181,"props":5531,"children":5532},{"style":827},[5533],{"type":57,"value":840},{"type":51,"tag":181,"props":5535,"children":5536},{"style":254},[5537],{"type":57,"value":5538}," $(",{"type":51,"tag":181,"props":5540,"children":5541},{"style":188},[5542],{"type":57,"value":5543},"seq",{"type":51,"tag":181,"props":5545,"children":5546},{"style":1475},[5547],{"type":57,"value":2549},{"type":51,"tag":181,"props":5549,"children":5550},{"style":1475},[5551],{"type":57,"value":5552}," 24",{"type":51,"tag":181,"props":5554,"children":5555},{"style":254},[5556],{"type":57,"value":5557},");",{"type":51,"tag":181,"props":5559,"children":5560},{"style":827},[5561],{"type":57,"value":1022},{"type":51,"tag":181,"props":5563,"children":5564},{"class":183,"line":805},[5565,5569,5574,5578,5583,5588,5593,5598,5602,5606,5610,5614,5618,5623,5627],{"type":51,"tag":181,"props":5566,"children":5567},{"style":827},[5568],{"type":57,"value":1031},{"type":51,"tag":181,"props":5570,"children":5571},{"style":248},[5572],{"type":57,"value":5573}," ready_response",{"type":51,"tag":181,"props":5575,"children":5576},{"style":254},[5577],{"type":57,"value":2041},{"type":51,"tag":181,"props":5579,"children":5580},{"style":188},[5581],{"type":57,"value":5582},"curl",{"type":51,"tag":181,"props":5584,"children":5585},{"style":193},[5586],{"type":57,"value":5587}," -fsS",{"type":51,"tag":181,"props":5589,"children":5590},{"style":193},[5591],{"type":57,"value":5592}," --max-time",{"type":51,"tag":181,"props":5594,"children":5595},{"style":1475},[5596],{"type":57,"value":5597}," 5",{"type":51,"tag":181,"props":5599,"children":5600},{"style":254},[5601],{"type":57,"value":3812},{"type":51,"tag":181,"props":5603,"children":5604},{"style":248},[5605],{"type":57,"value":5430},{"type":51,"tag":181,"props":5607,"children":5608},{"style":254},[5609],{"type":57,"value":916},{"type":51,"tag":181,"props":5611,"children":5612},{"style":254},[5613],{"type":57,"value":622},{"type":51,"tag":181,"props":5615,"children":5616},{"style":193},[5617],{"type":57,"value":627},{"type":51,"tag":181,"props":5619,"children":5620},{"style":254},[5621],{"type":57,"value":5622},")",{"type":51,"tag":181,"props":5624,"children":5625},{"style":254},[5626],{"type":57,"value":1221},{"type":51,"tag":181,"props":5628,"children":5629},{"style":248},[5630],{"type":57,"value":526},{"type":51,"tag":181,"props":5632,"children":5633},{"class":183,"line":823},[5634,5639,5643,5647,5651,5655,5659,5663,5667,5672,5676,5680],{"type":51,"tag":181,"props":5635,"children":5636},{"style":450},[5637],{"type":57,"value":5638},"     echo",{"type":51,"tag":181,"props":5640,"children":5641},{"style":254},[5642],{"type":57,"value":3812},{"type":51,"tag":181,"props":5644,"children":5645},{"style":248},[5646],{"type":57,"value":5509},{"type":51,"tag":181,"props":5648,"children":5649},{"style":254},[5650],{"type":57,"value":916},{"type":51,"tag":181,"props":5652,"children":5653},{"style":254},[5654],{"type":57,"value":1952},{"type":51,"tag":181,"props":5656,"children":5657},{"style":188},[5658],{"type":57,"value":583},{"type":51,"tag":181,"props":5660,"children":5661},{"style":193},[5662],{"type":57,"value":588},{"type":51,"tag":181,"props":5664,"children":5665},{"style":254},[5666],{"type":57,"value":1976},{"type":51,"tag":181,"props":5668,"children":5669},{"style":193},[5670],{"type":57,"value":5671},"\"code\"[[:space:]]*:[[:space:]]*0",{"type":51,"tag":181,"props":5673,"children":5674},{"style":254},[5675],{"type":57,"value":1986},{"type":51,"tag":181,"props":5677,"children":5678},{"style":254},[5679],{"type":57,"value":1017},{"type":51,"tag":181,"props":5681,"children":5682},{"style":827},[5683],{"type":57,"value":1058},{"type":51,"tag":181,"props":5685,"children":5686},{"class":183,"line":847},[5687,5691,5695,5700,5704,5708],{"type":51,"tag":181,"props":5688,"children":5689},{"style":450},[5690],{"type":57,"value":1092},{"type":51,"tag":181,"props":5692,"children":5693},{"style":254},[5694],{"type":57,"value":506},{"type":51,"tag":181,"props":5696,"children":5697},{"style":193},[5698],{"type":57,"value":5699},"Microservice ready: ",{"type":51,"tag":181,"props":5701,"children":5702},{"style":254},[5703],{"type":57,"value":3369},{"type":51,"tag":181,"props":5705,"children":5706},{"style":248},[5707],{"type":57,"value":5509},{"type":51,"tag":181,"props":5709,"children":5710},{"style":254},[5711],{"type":57,"value":3378},{"type":51,"tag":181,"props":5713,"children":5714},{"class":183,"line":869},[5715],{"type":51,"tag":181,"props":5716,"children":5717},{"style":827},[5718],{"type":57,"value":1119},{"type":51,"tag":181,"props":5720,"children":5721},{"class":183,"line":923},[5722],{"type":51,"tag":181,"props":5723,"children":5724},{"style":827},[5725],{"type":57,"value":1128},{"type":51,"tag":181,"props":5727,"children":5728},{"class":183,"line":972},[5729,5733,5737,5741,5746,5750,5755,5759,5763],{"type":51,"tag":181,"props":5730,"children":5731},{"style":827},[5732],{"type":57,"value":1031},{"type":51,"tag":181,"props":5734,"children":5735},{"style":254},[5736],{"type":57,"value":540},{"type":51,"tag":181,"props":5738,"children":5739},{"style":254},[5740],{"type":57,"value":3812},{"type":51,"tag":181,"props":5742,"children":5743},{"style":248},[5744],{"type":57,"value":5745},"attempt",{"type":51,"tag":181,"props":5747,"children":5748},{"style":254},[5749],{"type":57,"value":916},{"type":51,"tag":181,"props":5751,"children":5752},{"style":254},[5753],{"type":57,"value":5754}," -lt",{"type":51,"tag":181,"props":5756,"children":5757},{"style":1475},[5758],{"type":57,"value":5552},{"type":51,"tag":181,"props":5760,"children":5761},{"style":254},[5762],{"type":57,"value":1180},{"type":51,"tag":181,"props":5764,"children":5765},{"style":827},[5766],{"type":57,"value":1058},{"type":51,"tag":181,"props":5768,"children":5769},{"class":183,"line":998},[5770,5775,5779,5784,5788,5792,5796],{"type":51,"tag":181,"props":5771,"children":5772},{"style":450},[5773],{"type":57,"value":5774},"    printf",{"type":51,"tag":181,"props":5776,"children":5777},{"style":254},[5778],{"type":57,"value":506},{"type":51,"tag":181,"props":5780,"children":5781},{"style":193},[5782],{"type":57,"value":5783},"  [%02d\u002F24] Microservice not ready yet; retrying in 5s...\\n",{"type":51,"tag":181,"props":5785,"children":5786},{"style":254},[5787],{"type":57,"value":363},{"type":51,"tag":181,"props":5789,"children":5790},{"style":254},[5791],{"type":57,"value":3812},{"type":51,"tag":181,"props":5793,"children":5794},{"style":248},[5795],{"type":57,"value":5745},{"type":51,"tag":181,"props":5797,"children":5798},{"style":254},[5799],{"type":57,"value":3378},{"type":51,"tag":181,"props":5801,"children":5802},{"class":183,"line":1025},[5803,5808],{"type":51,"tag":181,"props":5804,"children":5805},{"style":188},[5806],{"type":57,"value":5807},"    sleep",{"type":51,"tag":181,"props":5809,"children":5810},{"style":1475},[5811],{"type":57,"value":5812}," 5\n",{"type":51,"tag":181,"props":5814,"children":5815},{"class":183,"line":1061},[5816],{"type":51,"tag":181,"props":5817,"children":5818},{"style":827},[5819],{"type":57,"value":1128},{"type":51,"tag":181,"props":5821,"children":5822},{"class":183,"line":1086},[5823],{"type":51,"tag":181,"props":5824,"children":5825},{"style":827},[5826],{"type":57,"value":1137},{"type":51,"tag":181,"props":5828,"children":5829},{"class":183,"line":1113},[5830],{"type":51,"tag":181,"props":5831,"children":5832},{"emptyLinePlaceholder":465},[5833],{"type":57,"value":468},{"type":51,"tag":181,"props":5835,"children":5836},{"class":183,"line":1122},[5837,5841,5845,5849,5853,5857,5861,5865,5869,5873,5877,5881,5885,5889],{"type":51,"tag":181,"props":5838,"children":5839},{"style":827},[5840],{"type":57,"value":1154},{"type":51,"tag":181,"props":5842,"children":5843},{"style":254},[5844],{"type":57,"value":2481},{"type":51,"tag":181,"props":5846,"children":5847},{"style":450},[5848],{"type":57,"value":2521},{"type":51,"tag":181,"props":5850,"children":5851},{"style":254},[5852],{"type":57,"value":3812},{"type":51,"tag":181,"props":5854,"children":5855},{"style":248},[5856],{"type":57,"value":5509},{"type":51,"tag":181,"props":5858,"children":5859},{"style":254},[5860],{"type":57,"value":916},{"type":51,"tag":181,"props":5862,"children":5863},{"style":254},[5864],{"type":57,"value":1952},{"type":51,"tag":181,"props":5866,"children":5867},{"style":188},[5868],{"type":57,"value":583},{"type":51,"tag":181,"props":5870,"children":5871},{"style":193},[5872],{"type":57,"value":588},{"type":51,"tag":181,"props":5874,"children":5875},{"style":254},[5876],{"type":57,"value":1976},{"type":51,"tag":181,"props":5878,"children":5879},{"style":193},[5880],{"type":57,"value":5671},{"type":51,"tag":181,"props":5882,"children":5883},{"style":254},[5884],{"type":57,"value":1986},{"type":51,"tag":181,"props":5886,"children":5887},{"style":254},[5888],{"type":57,"value":1017},{"type":51,"tag":181,"props":5890,"children":5891},{"style":827},[5892],{"type":57,"value":1058},{"type":51,"tag":181,"props":5894,"children":5895},{"class":183,"line":1131},[5896,5900,5904,5909,5913,5917,5921],{"type":51,"tag":181,"props":5897,"children":5898},{"style":450},[5899],{"type":57,"value":1379},{"type":51,"tag":181,"props":5901,"children":5902},{"style":254},[5903],{"type":57,"value":506},{"type":51,"tag":181,"props":5905,"children":5906},{"style":193},[5907],{"type":57,"value":5908},"ERROR: microservice did not report ready within 120 seconds: ",{"type":51,"tag":181,"props":5910,"children":5911},{"style":254},[5912],{"type":57,"value":3369},{"type":51,"tag":181,"props":5914,"children":5915},{"style":248},[5916],{"type":57,"value":5430},{"type":51,"tag":181,"props":5918,"children":5919},{"style":254},[5920],{"type":57,"value":916},{"type":51,"tag":181,"props":5922,"children":5923},{"style":254},[5924],{"type":57,"value":1779},{"type":51,"tag":181,"props":5926,"children":5927},{"class":183,"line":1140},[5928,5932,5936,5941,5945],{"type":51,"tag":181,"props":5929,"children":5930},{"style":450},[5931],{"type":57,"value":1379},{"type":51,"tag":181,"props":5933,"children":5934},{"style":254},[5935],{"type":57,"value":506},{"type":51,"tag":181,"props":5937,"children":5938},{"style":193},[5939],{"type":57,"value":5940},"Check status and logs:",{"type":51,"tag":181,"props":5942,"children":5943},{"style":254},[5944],{"type":57,"value":363},{"type":51,"tag":181,"props":5946,"children":5947},{"style":254},[5948],{"type":57,"value":1779},{"type":51,"tag":181,"props":5950,"children":5951},{"class":183,"line":1148},[5952,5956,5960,5965,5969,5973,5977,5982,5986],{"type":51,"tag":181,"props":5953,"children":5954},{"style":450},[5955],{"type":57,"value":1379},{"type":51,"tag":181,"props":5957,"children":5958},{"style":254},[5959],{"type":57,"value":506},{"type":51,"tag":181,"props":5961,"children":5962},{"style":193},[5963],{"type":57,"value":5964},"  cd ",{"type":51,"tag":181,"props":5966,"children":5967},{"style":254},[5968],{"type":57,"value":3369},{"type":51,"tag":181,"props":5970,"children":5971},{"style":248},[5972],{"type":57,"value":811},{"type":51,"tag":181,"props":5974,"children":5975},{"style":254},[5976],{"type":57,"value":1697},{"type":51,"tag":181,"props":5978,"children":5979},{"style":193},[5980],{"type":57,"value":5981},"\u002Fcompose && docker compose ps",{"type":51,"tag":181,"props":5983,"children":5984},{"style":254},[5985],{"type":57,"value":363},{"type":51,"tag":181,"props":5987,"children":5988},{"style":254},[5989],{"type":57,"value":1779},{"type":51,"tag":181,"props":5991,"children":5992},{"class":183,"line":1187},[5993,5997,6001,6005,6009,6013,6017,6022,6026],{"type":51,"tag":181,"props":5994,"children":5995},{"style":450},[5996],{"type":57,"value":1379},{"type":51,"tag":181,"props":5998,"children":5999},{"style":254},[6000],{"type":57,"value":506},{"type":51,"tag":181,"props":6002,"children":6003},{"style":193},[6004],{"type":57,"value":5964},{"type":51,"tag":181,"props":6006,"children":6007},{"style":254},[6008],{"type":57,"value":3369},{"type":51,"tag":181,"props":6010,"children":6011},{"style":248},[6012],{"type":57,"value":811},{"type":51,"tag":181,"props":6014,"children":6015},{"style":254},[6016],{"type":57,"value":1697},{"type":51,"tag":181,"props":6018,"children":6019},{"style":193},[6020],{"type":57,"value":6021},"\u002Fcompose && docker compose logs auto-magic-calib-ms",{"type":51,"tag":181,"props":6023,"children":6024},{"style":254},[6025],{"type":57,"value":363},{"type":51,"tag":181,"props":6027,"children":6028},{"style":254},[6029],{"type":57,"value":1779},{"type":51,"tag":181,"props":6031,"children":6032},{"class":183,"line":1257},[6033,6037],{"type":51,"tag":181,"props":6034,"children":6035},{"style":450},[6036],{"type":57,"value":1472},{"type":51,"tag":181,"props":6038,"children":6039},{"style":1475},[6040],{"type":57,"value":1478},{"type":51,"tag":181,"props":6042,"children":6043},{"class":183,"line":1287},[6044],{"type":51,"tag":181,"props":6045,"children":6046},{"style":827},[6047],{"type":57,"value":1487},{"type":51,"tag":181,"props":6049,"children":6050},{"class":183,"line":1308},[6051],{"type":51,"tag":181,"props":6052,"children":6053},{"emptyLinePlaceholder":465},[6054],{"type":57,"value":468},{"type":51,"tag":181,"props":6056,"children":6057},{"class":183,"line":1329},[6058],{"type":51,"tag":181,"props":6059,"children":6060},{"style":1349},[6061],{"type":57,"value":6062},"# Check UI is serving\n",{"type":51,"tag":181,"props":6064,"children":6065},{"class":183,"line":1337},[6066,6071,6075,6079,6084,6089,6094,6099,6103,6108,6112,6116,6120,6124,6128,6132,6136,6140],{"type":51,"tag":181,"props":6067,"children":6068},{"style":248},[6069],{"type":57,"value":6070},"UI_STATUS",{"type":51,"tag":181,"props":6072,"children":6073},{"style":254},[6074],{"type":57,"value":2041},{"type":51,"tag":181,"props":6076,"children":6077},{"style":188},[6078],{"type":57,"value":5582},{"type":51,"tag":181,"props":6080,"children":6081},{"style":193},[6082],{"type":57,"value":6083}," -s",{"type":51,"tag":181,"props":6085,"children":6086},{"style":193},[6087],{"type":57,"value":6088}," -o",{"type":51,"tag":181,"props":6090,"children":6091},{"style":193},[6092],{"type":57,"value":6093}," \u002Fdev\u002Fnull",{"type":51,"tag":181,"props":6095,"children":6096},{"style":193},[6097],{"type":57,"value":6098}," -w",{"type":51,"tag":181,"props":6100,"children":6101},{"style":254},[6102],{"type":57,"value":506},{"type":51,"tag":181,"props":6104,"children":6105},{"style":193},[6106],{"type":57,"value":6107},"%{http_code}",{"type":51,"tag":181,"props":6109,"children":6110},{"style":254},[6111],{"type":57,"value":363},{"type":51,"tag":181,"props":6113,"children":6114},{"style":193},[6115],{"type":57,"value":5592},{"type":51,"tag":181,"props":6117,"children":6118},{"style":1475},[6119],{"type":57,"value":5597},{"type":51,"tag":181,"props":6121,"children":6122},{"style":254},[6123],{"type":57,"value":506},{"type":51,"tag":181,"props":6125,"children":6126},{"style":193},[6127],{"type":57,"value":5443},{"type":51,"tag":181,"props":6129,"children":6130},{"style":254},[6131],{"type":57,"value":3369},{"type":51,"tag":181,"props":6133,"children":6134},{"style":248},[6135],{"type":57,"value":3913},{"type":51,"tag":181,"props":6137,"children":6138},{"style":254},[6139],{"type":57,"value":916},{"type":51,"tag":181,"props":6141,"children":6142},{"style":254},[6143],{"type":57,"value":2060},{"type":51,"tag":181,"props":6145,"children":6146},{"class":183,"line":1345},[6147,6151,6155,6159,6163,6167,6172,6176,6181,6185,6189],{"type":51,"tag":181,"props":6148,"children":6149},{"style":827},[6150],{"type":57,"value":1154},{"type":51,"tag":181,"props":6152,"children":6153},{"style":254},[6154],{"type":57,"value":540},{"type":51,"tag":181,"props":6156,"children":6157},{"style":254},[6158],{"type":57,"value":3812},{"type":51,"tag":181,"props":6160,"children":6161},{"style":248},[6162],{"type":57,"value":6070},{"type":51,"tag":181,"props":6164,"children":6165},{"style":254},[6166],{"type":57,"value":916},{"type":51,"tag":181,"props":6168,"children":6169},{"style":254},[6170],{"type":57,"value":6171}," !=",{"type":51,"tag":181,"props":6173,"children":6174},{"style":254},[6175],{"type":57,"value":506},{"type":51,"tag":181,"props":6177,"children":6178},{"style":193},[6179],{"type":57,"value":6180},"200",{"type":51,"tag":181,"props":6182,"children":6183},{"style":254},[6184],{"type":57,"value":363},{"type":51,"tag":181,"props":6186,"children":6187},{"style":254},[6188],{"type":57,"value":1180},{"type":51,"tag":181,"props":6190,"children":6191},{"style":827},[6192],{"type":57,"value":1058},{"type":51,"tag":181,"props":6194,"children":6195},{"class":183,"line":1355},[6196,6200,6204,6209,6213,6217,6221,6226,6230],{"type":51,"tag":181,"props":6197,"children":6198},{"style":450},[6199],{"type":57,"value":1379},{"type":51,"tag":181,"props":6201,"children":6202},{"style":254},[6203],{"type":57,"value":506},{"type":51,"tag":181,"props":6205,"children":6206},{"style":193},[6207],{"type":57,"value":6208},"ERROR: Web UI returned HTTP ",{"type":51,"tag":181,"props":6210,"children":6211},{"style":254},[6212],{"type":57,"value":3369},{"type":51,"tag":181,"props":6214,"children":6215},{"style":248},[6216],{"type":57,"value":6070},{"type":51,"tag":181,"props":6218,"children":6219},{"style":254},[6220],{"type":57,"value":1697},{"type":51,"tag":181,"props":6222,"children":6223},{"style":193},[6224],{"type":57,"value":6225},"; check docker compose ps and UI logs.",{"type":51,"tag":181,"props":6227,"children":6228},{"style":254},[6229],{"type":57,"value":363},{"type":51,"tag":181,"props":6231,"children":6232},{"style":254},[6233],{"type":57,"value":1779},{"type":51,"tag":181,"props":6235,"children":6236},{"class":183,"line":1364},[6237,6241],{"type":51,"tag":181,"props":6238,"children":6239},{"style":450},[6240],{"type":57,"value":1472},{"type":51,"tag":181,"props":6242,"children":6243},{"style":1475},[6244],{"type":57,"value":1478},{"type":51,"tag":181,"props":6246,"children":6247},{"class":183,"line":1373},[6248],{"type":51,"tag":181,"props":6249,"children":6250},{"style":827},[6251],{"type":57,"value":1487},{"type":51,"tag":181,"props":6253,"children":6254},{"class":183,"line":1395},[6255,6259,6263,6268,6272,6276],{"type":51,"tag":181,"props":6256,"children":6257},{"style":450},[6258],{"type":57,"value":1540},{"type":51,"tag":181,"props":6260,"children":6261},{"style":254},[6262],{"type":57,"value":506},{"type":51,"tag":181,"props":6264,"children":6265},{"style":193},[6266],{"type":57,"value":6267},"Web UI ready: HTTP ",{"type":51,"tag":181,"props":6269,"children":6270},{"style":254},[6271],{"type":57,"value":3369},{"type":51,"tag":181,"props":6273,"children":6274},{"style":248},[6275],{"type":57,"value":6070},{"type":51,"tag":181,"props":6277,"children":6278},{"style":254},[6279],{"type":57,"value":3378},{"type":51,"tag":181,"props":6281,"children":6282},{"class":183,"line":1435},[6283],{"type":51,"tag":181,"props":6284,"children":6285},{"emptyLinePlaceholder":465},[6286],{"type":57,"value":468},{"type":51,"tag":181,"props":6288,"children":6289},{"class":183,"line":1466},[6290,6294,6298,6303,6307,6311,6315,6319,6323,6327],{"type":51,"tag":181,"props":6291,"children":6292},{"style":450},[6293],{"type":57,"value":1540},{"type":51,"tag":181,"props":6295,"children":6296},{"style":254},[6297],{"type":57,"value":506},{"type":51,"tag":181,"props":6299,"children":6300},{"style":193},[6301],{"type":57,"value":6302},"Microservice: http:\u002F\u002F",{"type":51,"tag":181,"props":6304,"children":6305},{"style":254},[6306],{"type":57,"value":3369},{"type":51,"tag":181,"props":6308,"children":6309},{"style":248},[6310],{"type":57,"value":3239},{"type":51,"tag":181,"props":6312,"children":6313},{"style":254},[6314],{"type":57,"value":1697},{"type":51,"tag":181,"props":6316,"children":6317},{"style":193},[6318],{"type":57,"value":884},{"type":51,"tag":181,"props":6320,"children":6321},{"style":254},[6322],{"type":57,"value":3369},{"type":51,"tag":181,"props":6324,"children":6325},{"style":248},[6326],{"type":57,"value":3888},{"type":51,"tag":181,"props":6328,"children":6329},{"style":254},[6330],{"type":57,"value":3378},{"type":51,"tag":181,"props":6332,"children":6333},{"class":183,"line":1481},[6334,6338,6342,6347,6351,6355,6359,6363,6367,6371],{"type":51,"tag":181,"props":6335,"children":6336},{"style":450},[6337],{"type":57,"value":1540},{"type":51,"tag":181,"props":6339,"children":6340},{"style":254},[6341],{"type":57,"value":506},{"type":51,"tag":181,"props":6343,"children":6344},{"style":193},[6345],{"type":57,"value":6346},"Web UI:       http:\u002F\u002F",{"type":51,"tag":181,"props":6348,"children":6349},{"style":254},[6350],{"type":57,"value":3369},{"type":51,"tag":181,"props":6352,"children":6353},{"style":248},[6354],{"type":57,"value":3239},{"type":51,"tag":181,"props":6356,"children":6357},{"style":254},[6358],{"type":57,"value":1697},{"type":51,"tag":181,"props":6360,"children":6361},{"style":193},[6362],{"type":57,"value":884},{"type":51,"tag":181,"props":6364,"children":6365},{"style":254},[6366],{"type":57,"value":3369},{"type":51,"tag":181,"props":6368,"children":6369},{"style":248},[6370],{"type":57,"value":3913},{"type":51,"tag":181,"props":6372,"children":6373},{"style":254},[6374],{"type":57,"value":3378},{"type":51,"tag":66,"props":6376,"children":6378},{"id":6377},"success-criteria",[6379],{"type":57,"value":6380},"Success Criteria",{"type":51,"tag":73,"props":6382,"children":6383},{},[6384,6403,6421,6434],{"type":51,"tag":77,"props":6385,"children":6386},{},[6387,6393,6395,6401],{"type":51,"tag":91,"props":6388,"children":6390},{"className":6389},[],[6391],{"type":57,"value":6392},"docker compose ps",{"type":57,"value":6394}," shows MS and UI containers ",{"type":51,"tag":91,"props":6396,"children":6398},{"className":6397},[],[6399],{"type":57,"value":6400},"Up",{"type":57,"value":6402},"; MS should be healthy.",{"type":51,"tag":77,"props":6404,"children":6405},{},[6406,6411,6413,6419],{"type":51,"tag":91,"props":6407,"children":6409},{"className":6408},[],[6410],{"type":57,"value":5460},{"type":57,"value":6412}," returns ",{"type":51,"tag":91,"props":6414,"children":6416},{"className":6415},[],[6417],{"type":57,"value":6418},"code:0",{"type":57,"value":6420}," and Step 6 prints the microservice and UI URLs.",{"type":51,"tag":77,"props":6422,"children":6423},{},[6424,6426,6432],{"type":57,"value":6425},"Browser access to ",{"type":51,"tag":91,"props":6427,"children":6429},{"className":6428},[],[6430],{"type":57,"value":6431},"http:\u002F\u002F\u003CHOST_IP>:\u003CAUTO_MAGIC_CALIB_UI_PORT>",{"type":57,"value":6433}," works.",{"type":51,"tag":77,"props":6435,"children":6436},{},[6437,6439,6445],{"type":57,"value":6438},"Projects persist under ",{"type":51,"tag":91,"props":6440,"children":6442},{"className":6441},[],[6443],{"type":57,"value":6444},"$REPO_ROOT\u002Fprojects\u002F",{"type":57,"value":129},{"type":51,"tag":66,"props":6447,"children":6449},{"id":6448},"troubleshooting",[6450],{"type":57,"value":6451},"Troubleshooting",{"type":51,"tag":6453,"props":6454,"children":6455},"table",{},[6456,6475],{"type":51,"tag":6457,"props":6458,"children":6459},"thead",{},[6460],{"type":51,"tag":6461,"props":6462,"children":6463},"tr",{},[6464,6470],{"type":51,"tag":6465,"props":6466,"children":6467},"th",{},[6468],{"type":57,"value":6469},"Issue",{"type":51,"tag":6465,"props":6471,"children":6472},{},[6473],{"type":57,"value":6474},"Fix",{"type":51,"tag":6476,"props":6477,"children":6478},"tbody",{},[6479,6507,6526,6539,6590,6617,6630,6658,6686,6712],{"type":51,"tag":6461,"props":6480,"children":6481},{},[6482,6488],{"type":51,"tag":6483,"props":6484,"children":6485},"td",{},[6486],{"type":57,"value":6487},"Docker permission denied",{"type":51,"tag":6483,"props":6489,"children":6490},{},[6491,6493,6499,6501,6506],{"type":57,"value":6492},"Ask the user to run ",{"type":51,"tag":91,"props":6494,"children":6496},{"className":6495},[],[6497],{"type":57,"value":6498},"sudo usermod -aG docker $USER && newgrp docker",{"type":57,"value":6500},", then retry ",{"type":51,"tag":91,"props":6502,"children":6504},{"className":6503},[],[6505],{"type":57,"value":153},{"type":57,"value":129},{"type":51,"tag":6461,"props":6508,"children":6509},{},[6510,6521],{"type":51,"tag":6483,"props":6511,"children":6512},{},[6513,6519],{"type":51,"tag":91,"props":6514,"children":6516},{"className":6515},[],[6517],{"type":57,"value":6518},"docker login",{"type":57,"value":6520}," rejected",{"type":51,"tag":6483,"props":6522,"children":6523},{},[6524],{"type":57,"value":6525},"Ask for a current NGC key and log in again.",{"type":51,"tag":6461,"props":6527,"children":6528},{},[6529,6534],{"type":51,"tag":6483,"props":6530,"children":6531},{},[6532],{"type":57,"value":6533},"Required image inaccessible",{"type":51,"tag":6483,"props":6535,"children":6536},{},[6537],{"type":57,"value":6538},"The key lacks image namespace access; ask for a key with access, then retry Step 1 and Step 5.",{"type":51,"tag":6461,"props":6540,"children":6541},{},[6542,6565],{"type":51,"tag":6483,"props":6543,"children":6544},{},[6545,6551,6552,6557,6558,6563],{"type":51,"tag":91,"props":6546,"children":6548},{"className":6547},[],[6549],{"type":57,"value":6550},"python3 -m venv",{"type":57,"value":105},{"type":51,"tag":91,"props":6553,"children":6555},{"className":6554},[],[6556],{"type":57,"value":1601},{"type":57,"value":113},{"type":51,"tag":91,"props":6559,"children":6561},{"className":6560},[],[6562],{"type":57,"value":1891},{"type":57,"value":6564}," missing",{"type":51,"tag":6483,"props":6566,"children":6567},{},[6568,6570,6575,6576,6582,6584,6589],{"type":57,"value":6569},"Install ",{"type":51,"tag":91,"props":6571,"children":6573},{"className":6572},[],[6574],{"type":57,"value":1609},{"type":57,"value":898},{"type":51,"tag":91,"props":6577,"children":6579},{"className":6578},[],[6580],{"type":57,"value":6581},"python3-pip",{"type":57,"value":6583},"; the HF binary is named ",{"type":51,"tag":91,"props":6585,"children":6587},{"className":6586},[],[6588],{"type":57,"value":1891},{"type":57,"value":129},{"type":51,"tag":6461,"props":6591,"children":6592},{},[6593,6598],{"type":51,"tag":6483,"props":6594,"children":6595},{},[6596],{"type":57,"value":6597},"VGGT permission error",{"type":51,"tag":6483,"props":6599,"children":6600},{},[6601,6603,6608,6610,6615],{"type":57,"value":6602},"Download VGGT before ",{"type":51,"tag":91,"props":6604,"children":6606},{"className":6605},[],[6607],{"type":57,"value":2704},{"type":57,"value":6609},"; to recover, restore user ownership of ",{"type":51,"tag":91,"props":6611,"children":6613},{"className":6612},[],[6614],{"type":57,"value":330},{"type":57,"value":6616}," and re-download.",{"type":51,"tag":6461,"props":6618,"children":6619},{},[6620,6625],{"type":51,"tag":6483,"props":6621,"children":6622},{},[6623],{"type":57,"value":6624},"Port in use",{"type":51,"tag":6483,"props":6626,"children":6627},{},[6628],{"type":57,"value":6629},"Pick a free MS port in 8000-8009 and UI port in 5000-5009, then update the Compose environment file.",{"type":51,"tag":6461,"props":6631,"children":6632},{},[6633,6638],{"type":51,"tag":6483,"props":6634,"children":6635},{},[6636],{"type":57,"value":6637},"Readiness timeout or exited container",{"type":51,"tag":6483,"props":6639,"children":6640},{},[6641,6643,6649,6651,6657],{"type":57,"value":6642},"Run ",{"type":51,"tag":91,"props":6644,"children":6646},{"className":6645},[],[6647],{"type":57,"value":6648},"cd $REPO_ROOT\u002Fcompose && docker compose ps",{"type":57,"value":6650}," and inspect ",{"type":51,"tag":91,"props":6652,"children":6654},{"className":6653},[],[6655],{"type":57,"value":6656},"docker compose logs auto-magic-calib-ms",{"type":57,"value":129},{"type":51,"tag":6461,"props":6659,"children":6660},{},[6661,6666],{"type":51,"tag":6483,"props":6662,"children":6663},{},[6664],{"type":57,"value":6665},"Project\u002Fmodel permission denied",{"type":51,"tag":6483,"props":6667,"children":6668},{},[6669,6671,6677,6679,6684],{"type":57,"value":6670},"Re-run Step 4 for ",{"type":51,"tag":91,"props":6672,"children":6674},{"className":6673},[],[6675],{"type":57,"value":6676},"projects\u002F",{"type":57,"value":6678}," or ",{"type":51,"tag":91,"props":6680,"children":6682},{"className":6681},[],[6683],{"type":57,"value":330},{"type":57,"value":6685}," only.",{"type":51,"tag":6461,"props":6687,"children":6688},{},[6689,6694],{"type":51,"tag":6483,"props":6690,"children":6691},{},[6692],{"type":57,"value":6693},"UI cannot reach backend",{"type":51,"tag":6483,"props":6695,"children":6696},{},[6697,6699,6704,6706,6711],{"type":57,"value":6698},"Verify ",{"type":51,"tag":91,"props":6700,"children":6702},{"className":6701},[],[6703],{"type":57,"value":3239},{"type":57,"value":6705}," in the Compose environment file is the machine network IP, not ",{"type":51,"tag":91,"props":6707,"children":6709},{"className":6708},[],[6710],{"type":57,"value":4251},{"type":57,"value":129},{"type":51,"tag":6461,"props":6713,"children":6714},{},[6715,6720],{"type":51,"tag":6483,"props":6716,"children":6717},{},[6718],{"type":57,"value":6719},"GPU unavailable",{"type":51,"tag":6483,"props":6721,"children":6722},{},[6723,6725,6731],{"type":57,"value":6724},"Verify NVIDIA runtime with ",{"type":51,"tag":91,"props":6726,"children":6728},{"className":6727},[],[6729],{"type":57,"value":6730},"docker run --rm --runtime=nvidia --gpus all ubuntu:20.04 nvidia-smi",{"type":57,"value":129},{"type":51,"tag":60,"props":6733,"children":6734},{},[6735,6740],{"type":51,"tag":285,"props":6736,"children":6737},{},[6738],{"type":57,"value":6739},"Common Fixes",{"type":57,"value":884},{"type":51,"tag":170,"props":6742,"children":6744},{"className":172,"code":6743,"language":174,"meta":175,"style":175},"cd $REPO_ROOT\u002Fcompose\n\n# View logs\ndocker compose logs -f\n\n# View logs for specific service\ndocker compose logs -f auto-magic-calib-ms\n\n# Restart all services\ndocker compose restart\n\n# Stop and remove containers\ndocker compose down\n\n# Update Compose environment settings and relaunch\ndocker compose up -d\n",[6745],{"type":51,"tag":91,"props":6746,"children":6747},{"__ignoreMap":175},[6748,6763,6770,6778,6799,6806,6814,6838,6845,6853,6869,6876,6884,6900,6907,6915],{"type":51,"tag":181,"props":6749,"children":6750},{"class":183,"line":184},[6751,6755,6759],{"type":51,"tag":181,"props":6752,"children":6753},{"style":450},[6754],{"type":57,"value":1504},{"type":51,"tag":181,"props":6756,"children":6757},{"style":248},[6758],{"type":57,"value":2736},{"type":51,"tag":181,"props":6760,"children":6761},{"style":193},[6762],{"type":57,"value":2741},{"type":51,"tag":181,"props":6764,"children":6765},{"class":183,"line":376},[6766],{"type":51,"tag":181,"props":6767,"children":6768},{"emptyLinePlaceholder":465},[6769],{"type":57,"value":468},{"type":51,"tag":181,"props":6771,"children":6772},{"class":183,"line":407},[6773],{"type":51,"tag":181,"props":6774,"children":6775},{"style":1349},[6776],{"type":57,"value":6777},"# View logs\n",{"type":51,"tag":181,"props":6779,"children":6780},{"class":183,"line":461},[6781,6785,6789,6794],{"type":51,"tag":181,"props":6782,"children":6783},{"style":188},[6784],{"type":57,"value":22},{"type":51,"tag":181,"props":6786,"children":6787},{"style":193},[6788],{"type":57,"value":4784},{"type":51,"tag":181,"props":6790,"children":6791},{"style":193},[6792],{"type":57,"value":6793}," logs",{"type":51,"tag":181,"props":6795,"children":6796},{"style":193},[6797],{"type":57,"value":6798}," -f\n",{"type":51,"tag":181,"props":6800,"children":6801},{"class":183,"line":471},[6802],{"type":51,"tag":181,"props":6803,"children":6804},{"emptyLinePlaceholder":465},[6805],{"type":57,"value":468},{"type":51,"tag":181,"props":6807,"children":6808},{"class":183,"line":490},[6809],{"type":51,"tag":181,"props":6810,"children":6811},{"style":1349},[6812],{"type":57,"value":6813},"# View logs for specific service\n",{"type":51,"tag":181,"props":6815,"children":6816},{"class":183,"line":529},[6817,6821,6825,6829,6833],{"type":51,"tag":181,"props":6818,"children":6819},{"style":188},[6820],{"type":57,"value":22},{"type":51,"tag":181,"props":6822,"children":6823},{"style":193},[6824],{"type":57,"value":4784},{"type":51,"tag":181,"props":6826,"children":6827},{"style":193},[6828],{"type":57,"value":6793},{"type":51,"tag":181,"props":6830,"children":6831},{"style":193},[6832],{"type":57,"value":545},{"type":51,"tag":181,"props":6834,"children":6835},{"style":193},[6836],{"type":57,"value":6837}," auto-magic-calib-ms\n",{"type":51,"tag":181,"props":6839,"children":6840},{"class":183,"line":573},[6841],{"type":51,"tag":181,"props":6842,"children":6843},{"emptyLinePlaceholder":465},[6844],{"type":57,"value":468},{"type":51,"tag":181,"props":6846,"children":6847},{"class":183,"line":634},[6848],{"type":51,"tag":181,"props":6849,"children":6850},{"style":1349},[6851],{"type":57,"value":6852},"# Restart all services\n",{"type":51,"tag":181,"props":6854,"children":6855},{"class":183,"line":675},[6856,6860,6864],{"type":51,"tag":181,"props":6857,"children":6858},{"style":188},[6859],{"type":57,"value":22},{"type":51,"tag":181,"props":6861,"children":6862},{"style":193},[6863],{"type":57,"value":4784},{"type":51,"tag":181,"props":6865,"children":6866},{"style":193},[6867],{"type":57,"value":6868}," restart\n",{"type":51,"tag":181,"props":6870,"children":6871},{"class":183,"line":733},[6872],{"type":51,"tag":181,"props":6873,"children":6874},{"emptyLinePlaceholder":465},[6875],{"type":57,"value":468},{"type":51,"tag":181,"props":6877,"children":6878},{"class":183,"line":788},[6879],{"type":51,"tag":181,"props":6880,"children":6881},{"style":1349},[6882],{"type":57,"value":6883},"# Stop and remove containers\n",{"type":51,"tag":181,"props":6885,"children":6886},{"class":183,"line":797},[6887,6891,6895],{"type":51,"tag":181,"props":6888,"children":6889},{"style":188},[6890],{"type":57,"value":22},{"type":51,"tag":181,"props":6892,"children":6893},{"style":193},[6894],{"type":57,"value":4784},{"type":51,"tag":181,"props":6896,"children":6897},{"style":193},[6898],{"type":57,"value":6899}," down\n",{"type":51,"tag":181,"props":6901,"children":6902},{"class":183,"line":805},[6903],{"type":51,"tag":181,"props":6904,"children":6905},{"emptyLinePlaceholder":465},[6906],{"type":57,"value":468},{"type":51,"tag":181,"props":6908,"children":6909},{"class":183,"line":823},[6910],{"type":51,"tag":181,"props":6911,"children":6912},{"style":1349},[6913],{"type":57,"value":6914},"# Update Compose environment settings and relaunch\n",{"type":51,"tag":181,"props":6916,"children":6917},{"class":183,"line":847},[6918,6922,6926,6930],{"type":51,"tag":181,"props":6919,"children":6920},{"style":188},[6921],{"type":57,"value":22},{"type":51,"tag":181,"props":6923,"children":6924},{"style":193},[6925],{"type":57,"value":4784},{"type":51,"tag":181,"props":6927,"children":6928},{"style":193},[6929],{"type":57,"value":5121},{"type":51,"tag":181,"props":6931,"children":6932},{"style":193},[6933],{"type":57,"value":5126},{"type":51,"tag":66,"props":6935,"children":6937},{"id":6936},"stopping-the-services",[6938],{"type":57,"value":6939},"Stopping the Services",{"type":51,"tag":170,"props":6941,"children":6943},{"className":172,"code":6942,"language":174,"meta":175,"style":175},"cd $REPO_ROOT\u002Fcompose\n\n# Stop all services (containers removed, data persisted)\ndocker compose down\n\n# Stop and remove volumes\ndocker compose down -v\n",[6944],{"type":51,"tag":91,"props":6945,"children":6946},{"__ignoreMap":175},[6947,6962,6969,6977,6992,6999,7007],{"type":51,"tag":181,"props":6948,"children":6949},{"class":183,"line":184},[6950,6954,6958],{"type":51,"tag":181,"props":6951,"children":6952},{"style":450},[6953],{"type":57,"value":1504},{"type":51,"tag":181,"props":6955,"children":6956},{"style":248},[6957],{"type":57,"value":2736},{"type":51,"tag":181,"props":6959,"children":6960},{"style":193},[6961],{"type":57,"value":2741},{"type":51,"tag":181,"props":6963,"children":6964},{"class":183,"line":376},[6965],{"type":51,"tag":181,"props":6966,"children":6967},{"emptyLinePlaceholder":465},[6968],{"type":57,"value":468},{"type":51,"tag":181,"props":6970,"children":6971},{"class":183,"line":407},[6972],{"type":51,"tag":181,"props":6973,"children":6974},{"style":1349},[6975],{"type":57,"value":6976},"# Stop all services (containers removed, data persisted)\n",{"type":51,"tag":181,"props":6978,"children":6979},{"class":183,"line":461},[6980,6984,6988],{"type":51,"tag":181,"props":6981,"children":6982},{"style":188},[6983],{"type":57,"value":22},{"type":51,"tag":181,"props":6985,"children":6986},{"style":193},[6987],{"type":57,"value":4784},{"type":51,"tag":181,"props":6989,"children":6990},{"style":193},[6991],{"type":57,"value":6899},{"type":51,"tag":181,"props":6993,"children":6994},{"class":183,"line":471},[6995],{"type":51,"tag":181,"props":6996,"children":6997},{"emptyLinePlaceholder":465},[6998],{"type":57,"value":468},{"type":51,"tag":181,"props":7000,"children":7001},{"class":183,"line":490},[7002],{"type":51,"tag":181,"props":7003,"children":7004},{"style":1349},[7005],{"type":57,"value":7006},"# Stop and remove volumes\n",{"type":51,"tag":181,"props":7008,"children":7009},{"class":183,"line":529},[7010,7014,7018,7023],{"type":51,"tag":181,"props":7011,"children":7012},{"style":188},[7013],{"type":57,"value":22},{"type":51,"tag":181,"props":7015,"children":7016},{"style":193},[7017],{"type":57,"value":4784},{"type":51,"tag":181,"props":7019,"children":7020},{"style":193},[7021],{"type":57,"value":7022}," down",{"type":51,"tag":181,"props":7024,"children":7025},{"style":193},[7026],{"type":57,"value":7027}," -v\n",{"type":51,"tag":66,"props":7029,"children":7031},{"id":7030},"related-skills",[7032],{"type":57,"value":7033},"Related Skills",{"type":51,"tag":73,"props":7035,"children":7036},{},[7037,7048,7059],{"type":51,"tag":77,"props":7038,"children":7039},{},[7040,7046],{"type":51,"tag":91,"props":7041,"children":7043},{"className":7042},[],[7044],{"type":57,"value":7045},"skills\u002Famc-run-sample-calibration\u002FSKILL.md",{"type":57,"value":7047}," - Sanity-check the running stack with the bundled sample dataset",{"type":51,"tag":77,"props":7049,"children":7050},{},[7051,7057],{"type":51,"tag":91,"props":7052,"children":7054},{"className":7053},[],[7055],{"type":57,"value":7056},"skills\u002Famc-run-video-calibration\u002FSKILL.md",{"type":57,"value":7058}," - Calibrate from your own pre-recorded MP4s via REST API",{"type":51,"tag":77,"props":7060,"children":7061},{},[7062,7067],{"type":51,"tag":91,"props":7063,"children":7065},{"className":7064},[],[7066],{"type":57,"value":4285},{"type":57,"value":7068}," - Calibrate from live RTSP streams through VIOS capture",{"type":51,"tag":7070,"props":7071,"children":7072},"style",{},[7073],{"type":57,"value":7074},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":7076,"total":7233},[7077,7095,7111,7122,7134,7148,7161,7175,7188,7199,7213,7222],{"slug":7078,"name":7078,"fn":7079,"description":7080,"org":7081,"tags":7082,"stars":7092,"repoUrl":7093,"updatedAt":7094},"nemoclaw-user-guide","retrieve NemoClaw documentation and configuration","Guides human users' AI agents to the NemoClaw docs MCP server and canonical Fern documentation in Markdown form. Use when users ask how to install, configure, operate, troubleshoot, secure, or learn NemoClaw with an AI coding assistant. Trigger keywords - nemoclaw docs, use nemoclaw with ai agent, nemoclaw mcp docs, nemoclaw install help, nemoclaw quickstart, nemoclaw markdown docs, llms.txt, agent skills.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[7083,7086,7089],{"name":7084,"slug":7085,"type":15},"Documentation","documentation",{"name":7087,"slug":7088,"type":15},"MCP","mcp",{"name":7090,"slug":7091,"type":15},"Search","search",21777,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FNemoClaw","2026-07-20T06:00:01.461044",{"slug":7096,"name":7096,"fn":7097,"description":7098,"org":7099,"tags":7100,"stars":7108,"repoUrl":7109,"updatedAt":7110},"mcore-build-and-dependency","manage Megatron-LM development environments","Container-based dev environment setup and dependency management for Megatron-LM. Covers acquiring and launching the CI container, uv package management, and updating uv.lock.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[7101,7104,7105],{"name":7102,"slug":7103,"type":15},"Containers","containers",{"name":17,"slug":18,"type":15},{"name":7106,"slug":7107,"type":15},"Python","python",17049,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FMegatron-LM","2026-07-27T06:06:11.249662",{"slug":7112,"name":7112,"fn":7113,"description":7114,"org":7115,"tags":7116,"stars":7108,"repoUrl":7109,"updatedAt":7121},"mcore-bump-base-image","update NVIDIA PyTorch base images","Bump the NVIDIA PyTorch base image (`nvcr.io\u002Fnvidia\u002Fpytorch:YY.MM-py3`) used by Megatron-LM CI. Covers the two pin sites (GitHub CI in `docker\u002F.ngc_version.dev` and GitLab CI in `.gitlab\u002Fstages\u002F01.build.yml`), the post-bump CI loop (re-run functional tests, refresh golden values, mark broken tests), and the gotchas that bit PRs",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[7117,7120],{"name":7118,"slug":7119,"type":15},"CI\u002FCD","ci-cd",{"name":17,"slug":18,"type":15},"2026-07-14T05:25:59.97109",{"slug":7123,"name":7123,"fn":7124,"description":7125,"org":7126,"tags":7127,"stars":7108,"repoUrl":7109,"updatedAt":7133},"mcore-cicd","manage CI\u002FCD pipelines for Megatron-LM","CI\u002FCD reference for Megatron-LM. Covers CI pipeline structure, PR scope labels, triggering internal GitLab CI (which force-pushes the current branch to a pull-request\u002FBRANCH ref — always dry-run and verify the destination first; never run against shared or protected branches), and CI failure investigation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[7128,7129,7130],{"name":7118,"slug":7119,"type":15},{"name":17,"slug":18,"type":15},{"name":7131,"slug":7132,"type":15},"GitHub","github","2026-07-27T06:06:12.278222",{"slug":7135,"name":7135,"fn":7136,"description":7137,"org":7138,"tags":7139,"stars":7108,"repoUrl":7109,"updatedAt":7147},"mcore-create-issue","investigate CI failures and create issues","Investigate a failing GitHub Actions run or job and create a GitHub issue for the failure.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[7140,7143,7144],{"name":7141,"slug":7142,"type":15},"Debugging","debugging",{"name":7131,"slug":7132,"type":15},{"name":7145,"slug":7146,"type":15},"Triage","triage","2026-07-14T05:25:57.442089",{"slug":7149,"name":7149,"fn":7150,"description":7151,"org":7152,"tags":7153,"stars":7108,"repoUrl":7109,"updatedAt":7160},"mcore-linting-and-formatting","lint and format Megatron-LM code","Linting and formatting for Megatron-LM. Covers running autoformat.sh, tools (ruff, black, isort, pylint, mypy), and code style rules.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[7154,7157],{"name":7155,"slug":7156,"type":15},"Best Practices","best-practices",{"name":7158,"slug":7159,"type":15},"Code Analysis","code-analysis","2026-07-14T05:25:56.18433",{"slug":7162,"name":7162,"fn":7163,"description":7164,"org":7165,"tags":7166,"stars":7108,"repoUrl":7109,"updatedAt":7174},"mcore-migrate-gpt-to-hybrid","migrate Megatron-LM models to HybridModel","Migration guide for moving Megatron Core GPTModel checkpoints, model providers, training commands, and layer mappings to HybridModel.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[7167,7170,7173],{"name":7168,"slug":7169,"type":15},"Machine Learning","machine-learning",{"name":7171,"slug":7172,"type":15},"Migration","migration",{"name":9,"slug":8,"type":15},"2026-07-17T06:07:11.777011",{"slug":7176,"name":7176,"fn":7177,"description":7178,"org":7179,"tags":7180,"stars":7108,"repoUrl":7109,"updatedAt":7187},"mcore-onboard-gb200-1node-tests","onboard functional tests for GB200","Onboard 1-node GitHub MR functional tests for GB200 from existing mr-scoped 2-node tests.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[7181,7184],{"name":7182,"slug":7183,"type":15},"QA","qa",{"name":7185,"slug":7186,"type":15},"Testing","testing","2026-07-14T05:25:53.673039",{"slug":7189,"name":7189,"fn":7190,"description":7191,"org":7192,"tags":7193,"stars":7108,"repoUrl":7109,"updatedAt":7198},"mcore-run-on-slurm","launch distributed training jobs on SLURM","How to launch distributed Megatron-LM training jobs on a SLURM cluster. Covers a minimal sbatch skeleton, environment-variable setup for torch.distributed.run, CUDA_DEVICE_MAX_CONNECTIONS rules across hardware and parallelism modes, container conventions, monitoring, and per-rank failure diagnosis.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[7194,7195],{"name":17,"slug":18,"type":15},{"name":7196,"slug":7197,"type":15},"Infrastructure","infrastructure","2026-07-14T05:25:49.362534",{"slug":7200,"name":7200,"fn":7201,"description":7202,"org":7203,"tags":7204,"stars":7108,"repoUrl":7109,"updatedAt":7212},"mcore-split-pr","split pull requests to reduce review load","Split a PR into multiple PRs to reduce the number of required CODEOWNERS reviewer groups.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[7205,7208,7209],{"name":7206,"slug":7207,"type":15},"Code Review","code-review",{"name":7131,"slug":7132,"type":15},{"name":7210,"slug":7211,"type":15},"Pull Requests","pull-requests","2026-07-14T05:26:01.226578",{"slug":7214,"name":7214,"fn":7215,"description":7216,"org":7217,"tags":7218,"stars":7108,"repoUrl":7109,"updatedAt":7221},"mcore-testing","run and manage Megatron-LM tests","Test system for Megatron-LM. Covers test layout, recipe YAML structure, adding and running unit and functional tests, golden values, marker filters, and CI parity.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[7219,7220],{"name":7182,"slug":7183,"type":15},{"name":7185,"slug":7186,"type":15},"2026-07-14T05:25:54.928983",{"slug":7223,"name":7223,"fn":7224,"description":7225,"org":7226,"tags":7227,"stars":7108,"repoUrl":7109,"updatedAt":7232},"nightly-sync","manage nightly main-to-dev sync workflows","Domain knowledge for the nightly main-to-dev sync workflow. Covers merge strategy, CI architecture, failure investigation, and known issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[7228,7231],{"name":7229,"slug":7230,"type":15},"Automation","automation",{"name":7118,"slug":7119,"type":15},"2026-07-30T05:29:03.275638",496,{"items":7235,"total":7323},[7236,7253,7263,7277,7287,7302,7309],{"slug":7237,"name":7237,"fn":7238,"description":7239,"org":7240,"tags":7241,"stars":23,"repoUrl":24,"updatedAt":7252},"accelerated-computing-cudf","accelerate data processing with cuDF","Official NVIDIA-authored guidance for NVIDIA cuDF GPU DataFrames, pandas acceleration, dask-cuDF, ETL, joins, groupby, CSV\u002FParquet I\u002FO, nullable semantics, and multi-GPU DataFrame workloads.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[7242,7245,7248,7249],{"name":7243,"slug":7244,"type":15},"Data Analysis","data-analysis",{"name":7246,"slug":7247,"type":15},"Data Engineering","data-engineering",{"name":9,"slug":8,"type":15},{"name":7250,"slug":7251,"type":15},"Performance","performance","2026-07-14T05:28:43.176466",{"slug":7254,"name":7254,"fn":7255,"description":7256,"org":7257,"tags":7258,"stars":23,"repoUrl":24,"updatedAt":7262},"aiq-deploy","deploy and manage NVIDIA AI-Q infrastructure","Use when asked to install, deploy, run, validate, troubleshoot, or stop NVIDIA AI-Q Blueprint infrastructure.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[7259,7260,7261],{"name":17,"slug":18,"type":15},{"name":7196,"slug":7197,"type":15},{"name":9,"slug":8,"type":15},"2026-07-14T05:29:06.667109",{"slug":7264,"name":7264,"fn":7265,"description":7266,"org":7267,"tags":7268,"stars":23,"repoUrl":24,"updatedAt":7276},"aiq-research","conduct deep research with AI-Q","Use when asked to run deep research or AI-Q research through a reachable NVIDIA AI-Q Blueprint backend.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[7269,7272,7273],{"name":7270,"slug":7271,"type":15},"Agents","agents",{"name":9,"slug":8,"type":15},{"name":7274,"slug":7275,"type":15},"Research","research","2026-07-14T05:28:06.816956",{"slug":7278,"name":7278,"fn":7279,"description":7280,"org":7281,"tags":7282,"stars":23,"repoUrl":24,"updatedAt":7286},"amc-run-sample-calibration","run AMC sample dataset calibration","Run end-to-end calibration on the shipped sample dataset (sdg_08_2_sample_data_010926.zip) against a running AMC microservice. Use when user says 'test sample dataset', 'run sample calibration', 'verify AMC install', or 'launch and test'.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[7283,7284,7285],{"name":7243,"slug":7244,"type":15},{"name":9,"slug":8,"type":15},{"name":7185,"slug":7186,"type":15},"2026-07-17T05:29:03.913266",{"slug":7288,"name":7288,"fn":7289,"description":7290,"org":7291,"tags":7292,"stars":23,"repoUrl":24,"updatedAt":7301},"amc-run-video-calibration","calibrate video datasets with AutoMagicCalib","Calibrate a new dataset from pre-recorded video files via the AutoMagicCalib REST API. Use when user has local MP4s and says 'calibrate my videos', 'run AMC on these videos', or similar. For RTSP\u002Flive streams, use amc-run-rtsp-calibration instead.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[7293,7294,7297,7298],{"name":7229,"slug":7230,"type":15},{"name":7295,"slug":7296,"type":15},"Imaging","imaging",{"name":9,"slug":8,"type":15},{"name":7299,"slug":7300,"type":15},"Video","video","2026-07-17T05:28:53.905004",{"slug":4,"name":4,"fn":5,"description":6,"org":7303,"tags":7304,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[7305,7306,7307,7308],{"name":17,"slug":18,"type":15},{"name":21,"slug":22,"type":15},{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"slug":7310,"name":7310,"fn":7311,"description":7312,"org":7313,"tags":7314,"stars":23,"repoUrl":24,"updatedAt":7322},"cudaq-guide","develop quantum applications with CUDA-Q","CUDA-Q onboarding guide for installation, test programs, GPU simulation, QPU hardware, and quantum applications.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[7315,7316,7319],{"name":9,"slug":8,"type":15},{"name":7317,"slug":7318,"type":15},"Quantum Computing","quantum-computing",{"name":7320,"slug":7321,"type":15},"Simulation","simulation","2026-07-14T05:26:58.898253",305]