[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6991EKEG8XEM3VWW4VGV0ZQ":3,"skill-same:01M6991EKEG8XEM3VWW4VGV0ZQ":217},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":29,"publishedAt":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":53,"commitSha":54,"skillDirectory":55,"forksCount":56,"repositoryHtmlUrl":57,"repositoryHomepageUrl":58,"ownerHtmlUrl":59,"ownerBlogUrl":60,"ownerDescription":61,"updatedAt":62,"install":63,"resources":76},"01M6991EKEG8XEM3VWW4VGV0ZQ","retail-virtual-tryon",null,"Creates virtual try-on agents supporting image and video (catwalk animation) try-ons on Google Cloud (Gemini image models and Veo on Gemini Enterprise Agent Platform). Handles resource setup, user photo uploading, image\u002Fvideo generation pipelines, local testing, and evaluation.","google\u002Fadk-recipes","google","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1342004?v=4","01M698VYEFDM0VJBZDYYJ2T83S","Google","01M6990124CWS5627VKGSKJXRD",10626,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fvirtual-tryon\u002FSKILL.md",[18,23,26],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体",{"categoryNo":27,"categoryName":28,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[30,31,32,9,33,34,35,36,37],"retail virtual tryon","testing","image","gemini","genai","adk","gemini enterprise agent platform","google cloud","2026-11-10 10:12:30",false,"---\nname: retail-virtual-tryon\ndescription: >-\n  Creates virtual try-on agents supporting image and video (catwalk animation) try-ons\n  on Google Cloud (Gemini image models and Veo on Gemini Enterprise Agent Platform). Handles resource setup,\n  user photo uploading, image\u002Fvideo generation pipelines, local testing, and evaluation.\nmetadata:\n  author: Google\n  license: Apache-2.0\n  version: 0.2.0\n  requires:\n    pip:\n      - google-genai>=1.0\n      - google-cloud-storage>=2.0\n      - pillow>=9.0\n      - pyyaml>=6.0\n      - google-adk>=2.2.0\n    install_hint: \"From inside the workspace (see Workspace Setup section), run: pip install -e \\\"$SKILL_DIR\\\" -- this installs the skill's pyproject.toml including google-adk for the agent runtime\"\n---\n\n# Virtual Try-On Agent\n\nCreates virtual try-on (VTO) agents on Google Cloud supporting image and video (catwalk animation) try-on modes.\n\n## STOP -- READ THIS BEFORE RESPONDING\n\n**Check your operating mode first — there are two distinct modes:**\n\n### Mode A: Deployed Try-On Agent\n**If the system context tells you** that setup is complete (e.g. it says \"You are a DEPLOYED try-on agent\", or the conversation history shows setup has already been completed) —\n**skip Q-MODE entirely.** Respond directly to the user's try-on query.\nDo NOT output the Q-MODE block. Do NOT mention setup.\n\n### Mode B: First-time Setup (default)\n**If there is no such context** (fresh invocation, no prior setup) —\nyour VERY FIRST response MUST be the Q-MODE block below. Nothing else.\n\nDo NOT ask about products, industry, GCP project, or anything else first.\nDo NOT propose a plan. Do NOT explain what you will do.\n\nYour first message to the user must be EXACTLY this (copy-paste, no changes):\n\n```\n[skill: retail-virtual-tryon] active.\nQ-MODE: Pick a setup mode? [default: 1]\n  1. Quick start -- Local testing sandbox, interactive 6-question config, ~90s. Best for demos.\n  2. Export Web App & GCS Catalog Sync -- Generate standalone containerized codebase, GCS catalog sync, and Cloud Run config, ~3 min.\n```\n\nThen STOP and wait for the user's answer.\n\nAccept: `1`, `quick`, empty\u002FEnter (= Quick Start), `2`, `export`, `sync` or `webapp` (= Export Web App & GCS Catalog Sync).\n\n## Execution Rules\n\n1. **Q-MODE first, always.** No exceptions. No preamble.\n   - **CRITICAL WARNING**: Do NOT automatically run setup or deployment scripts (e.g. `setup_tryon.py`, `export_app.py`, `deploy_cloudrun.sh`) upon receiving a general request like \"I want to create\u002Fdeploy a VTO app on GCP\". You MUST first present the Q-MODE setup menu choice and wait for the user to select Mode 1, 2, or 3.\n2. **One question at a time. Show the default. Accept empty input.**\n   Format: `Q: \u003Cquestion text>? [default: \u003Cvalue>]`\n   Pressing Enter = use the default. **NEVER ask multiple questions in one turn.**\n3. **Execute steps in order.** Do NOT jump ahead or skip steps.\n4. **Verify each step succeeded** before moving to the next.\n5. **Save all answers to `.\u002Fdesign-spec.md`** (in the workspace) as you collect them.\n   After the interview, run `.venv\u002Fbin\u002Fpython \"$SKILL_DIR\u002Fscripts\u002Fsetup.py\" --config .\u002Fdesign-spec.md`\n   (see the Workspace Setup section to resolve `$SKILL_DIR`).\n6. **Confirm completion** of each step before proceeding.\n\n**Before Quick Start has launched setup, the user can say \"export\", \"webapp\",\nor \"deploy\" to switch to Mode 2 (Export Web App & GCS Catalog Sync).** Carry\nover answers already given for project, mode, and region; ask only the\nremaining Mode-2 questions (GCS catalog bucket, export directory). After\nsetup.py has already started buckets\u002FAPIs, the workflow is committed -- to run\nMode 2 instead, start a fresh workspace.\n\n## Workspace Setup\n\nThe skill has two locations:\n- **Install dir** -- where SKILL.md and scripts live (varies by host)\n- **Workspace** -- the agent's cwd; design-spec.md, .venv, and per-run state live here\n\nBy the end of this section the workspace must have `.venv\u002F` (with the skill\ninstalled editable), `design-spec.md`, and `SKILL_DIR`\nexported in the shell.\n\nRun this as ONE shell command -- splitting it across tool calls loses state:\n\n```bash\nSKILL_DIR=$(for d in ~\u002F.claude\u002Fskills ~\u002F.agents\u002Fskills ~\u002F.gemini\u002Fskills ~\u002F.cursor\u002Fskills; do\n  [ -f \"$d\u002Fretail-virtual-tryon\u002FSKILL.md\" ] && echo \"$d\u002Fretail-virtual-tryon\" && break\ndone)\nbash \"$SKILL_DIR\u002Fscripts\u002Fbootstrap.sh\"\n```\n\n`bootstrap.sh` finds a Python 3.11+ interpreter (with absolute-path fallback\nfor sandboxed shells), creates `.venv`, installs the skill editable, and copies\n`design-spec.md` into the workspace.\n\nAll scripts run from the install dir against the workspace config. **Use\n`.venv\u002Fbin\u002Fpython`, not bare `python`** -- bare `python` may resolve to a\nPython without the skill's editable install on sys.path.\n\n```bash\n.venv\u002Fbin\u002Fpython \"$SKILL_DIR\u002Fscripts\u002Fsetup.py\" --config .\u002Fdesign-spec.md\n```\n\nEdit `.\u002Fdesign-spec.md` and set `gcp_project_id` (the agent will do this based on the user's answers in Q-MODE).\n\n## Mode 1: Quick start (4-5 questions)\n\n| Q | Question | Default | Source |\n|---|---|---|---|\n| Q-A | GCP project ID? | `$GOOGLE_CLOUD_PROJECT` or `gcloud config get-value project` | env \u002F gcloud |\n| Q-B | Try-on mode? | `2` (both Image + Veo Video) | prompt |\n| Q-C | GCP Region? | `us-west1` | prompt |\n| Q-D | Catalog Path? | `demo` (type 'demo' to use bundled catalog, or specify local folder, or gs:\u002F\u002F URI) | prompt |\n| Q-E | Upload local catalog to GCS? *(Only asked if Q-D is a custom local folder)* | `1` (Yes) | prompt |\n\n### Question Formats & Accepted Choices:\n\n- **Q-B: Try-on mode?**\n  Format to print:\n  ```\n  Q: Try-on mode? [default: 2]\n    1. image_only (Faster, static images only)\n    2. image_and_video (Catwalk video animations via Veo)\n  ```\n  Accept: `1` (= `image_only`), `2` (= `image_and_video`), `image_only`, `image_and_video`.\n\n- **Q-D: Catalog Path?**\n  Accept: `demo` (uses bundled catalog), local directory path, or GCS URI starting with `gs:\u002F\u002F`.\n\n- **Q-E: Upload local catalog to GCS?**\n  Format to print:\n  ```\n  Q: Upload local catalog to GCS? [default: 1]\n    1. Yes (Sync and host catalog in GCS)\n    2. No (Run locally using local folder assets)\n  ```\n  Accept: `1` (= `Yes`), `2` (= `No`), `Yes`, `No`.\n\nAfter collecting these answers, do this **automatically**:\n\n1. Write the answers to `.\u002Fdesign-spec.md` (in the workspace), filling in:\n   - `gcp_project_id`\n   - `tryon_mode`\n   - `tryon_model` (always use `flash`)\n   - `tryon_output_bucket` (default: `{project_id}-tryon-output`)\n   - `tryon_upload_bucket` (default: `{project_id}-tryon-uploads`)\n   - `gcp_region`\n   - `tryon_catalog_path`\n   - `tryon_catalog_upload` (set to `true` by default, set to `false` only if Q-E is answered as `No`)\n2. Tell the user: \"Setting up local sandbox environment resources...\"\n3. Run: `.venv\u002Fbin\u002Fpython \"$SKILL_DIR\u002Fscripts\u002Fsetup.py\" --config .\u002Fdesign-spec.md`\n4. Stream the output. On success, start the local sandbox server in the background:\n   `.venv\u002Fbin\u002Fpython \"$SKILL_DIR\u002Fscripts\u002Fstart_sandbox.py\" --config .\u002Fdesign-spec.md`\n5. Provide the user with the clickable localhost link to test: \"VTO fitting room sandbox is running! Open http:\u002F\u002Flocalhost:8080 in your browser to test it.\"\n\n## Mode 2: Export Web App & GCS Catalog Sync (4 questions)\n\n| Q | Question | Default | Source |\n|---|---|---|---|\n| Q2-A | GCP project ID? | `$GOOGLE_CLOUD_PROJECT` or `gcloud config get-value project` | env \u002F gcloud |\n| Q2-B | Try-on mode? | `2` (both Image + Veo Video) | prompt |\n| Q2-C | GCS Catalog Bucket name? | `{project_id}-tryon-catalog` | prompt |\n| Q2-D | Target Directory to export code? | `.\u002Fvto-retail-app` | prompt |\n\n### Question Formats & Accepted Choices:\n\n- **Q2-B: Try-on mode?**\n  Format to print:\n  ```\n  Q: Try-on mode? [default: 2]\n    1. image_only (Faster, static images only)\n    2. image_and_video (Catwalk video animations via Veo)\n  ```\n  Accept: `1` (= `image_only`), `2` (= `image_and_video`), `image_only`, `image_and_video`.\n\nAfter collecting these answers, do this **automatically**:\n\n1. Write the answers to `.\u002Fdesign-spec.md` (in the workspace), filling in:\n   - `gcp_project_id`\n   - `tryon_mode`\n   - `gcs_catalog_bucket` (starts with `gs:\u002F\u002F...`)\n   - `export_directory`\n   - `gcp_region` (default: `us-west1`)\n   - `tryon_model` (always use `gemini-2.5-flash-image`)\n2. Tell the user: \"Setting up Cloud resources, exporting containerized codebase, and deploying to Google Cloud Run...\"\n3. Run: `.venv\u002Fbin\u002Fpython \"$SKILL_DIR\u002Fscripts\u002Fexport_app.py\" --config .\u002Fdesign-spec.md --skill-dir \"$SKILL_DIR\"`\n4. Run GCS sync verification: `.venv\u002Fbin\u002Fpython \"$SKILL_DIR\u002Fscripts\u002Fsetup_tryon.py\" --config .\u002Fdesign-spec.md`\n5. Build and Deploy container to Google Cloud Run:\n   `gcloud run deploy vto-retail-app --source .\u002Fvto-retail-app\u002F --region us-west1 --project {gcp_project_id} --allow-unauthenticated`\n6. Get the deployed service URL:\n   `gcloud run services describe vto-retail-app --region us-west1 --project {gcp_project_id} --format=\"value(status.url)\"`\n7. Output the following structured instructions to the user:\n   - Clickable Cloud Run service link:\n     \"? **VTO App is deployed and running on Cloud Run! Open [Cloud Run App URL] in your browser to test it directly.**\"\n   - **How to Sync Catalog Images to GCS**:\n     ```bash\n     gsutil -m rsync -r .\u002Fmy_clothes\u002F gs:\u002F\u002F{gcs_catalog_bucket}\u002F\n     # Then force index refresh:\n     curl -X GET \"https:\u002F\u002F{cloud_run_url}\u002Fapi\u002Fcatalog?force=true\"\n     ```\n   - **How to Embed in Your Website**:\n     ```html\n     \u003C!-- Place this iframe widget on your product details page -->\n     \u003Ciframe src=\"https:\u002F\u002F{cloud_run_url}\" width=\"100%\" height=\"800px\" style=\"border:none; border-radius:12px; box-shadow: 0 4px 20px rgba(0,0,0,0.15);\">\u003C\u002Fiframe>\n     ```\n\n## When to Use\n\n- Building **virtual try-on fitting rooms** for e-commerce.\n- Creating interactive **catwalk-style video animations** showing how clothes look when walking.\n- Enabling **general retail try-on** for accessories, jewelry, eyewear, or clothes.\n\nDo NOT use for furniture\u002Fhome styling (use room placement tools), or complex 3D avatar creation.\n\n## Resource Setup\n\nSet the parameters in `.\u002Fdesign-spec.md` (in the workspace), then run:\n\n```bash\n.venv\u002Fbin\u002Fpython \"$SKILL_DIR\u002Fscripts\u002Fsetup.py\" --config .\u002Fdesign-spec.md\n```\n\nOn success, local sample catalog images will be generated under `.\u002Fcatalog_images\u002F` (unless a GCS bucket or custom catalog path was specified, in which case bucket access will be verified).\n\n## Testing & Verification\n\nSet the required environment variables in the shell that runs the agent:\n\n```bash\nexport GOOGLE_CLOUD_PROJECT=\"\u003Cyour-project-id>\"\nexport TRYON_OUTPUT_BUCKET=\"\u003Cyour-project-id>-tryon-output\"\nexport TRYON_UPLOAD_BUCKET=\"\u003Cyour-project-id>-tryon-uploads\"\nexport GEMINI_IMAGE_MODEL=\"flash\"  # or pro \u002F gemini-2.5-flash-image \u002F gemini-2.5-pro-image\n```\n\n### Run using `adk web`\n\nLaunch the interactive web UI. **Use `.venv\u002Fbin\u002Fadk`, not bare `adk`** -- bare\n`adk` may resolve to a global Python (pyenv, brew, etc.) whose ADK can't find\nthe skill and reports an empty app list (UI loads, but `\u002Flist-apps` returns\n`[]` and queries time out).\n\n```bash\n.venv\u002Fbin\u002Fadk web .\n```\n\nYou can start a chat session and test VTO by providing:\n- Product ID: `shirt_001` or `sunglasses_001`\n- User Photo: Upload `catalog_images\u002Fsample_user.jpg` or any photo of yourself.\n- Request: \"Try on this shirt for me\" or \"Show me a catwalk video wearing these sunglasses\".\n\n### Direct Python Smoke Test\n\nRun a quick test script without the UI:\n\n```bash\n# Test image try-on\n.venv\u002Fbin\u002Fpython -c \"\nfrom scripts.tryon_agent import try_on_product_image\nres = try_on_product_image('shirt_001', 'catalog_images\u002Fsample_user.jpg', 'catalog_images\u002Fshirt_001.jpg', 'clothing', 'red shirt')\nprint(res)\n\"\n\n# Test video try-on (Veo)\n.venv\u002Fbin\u002Fpython -c \"\nfrom scripts.tryon_agent import try_on_product_video\nres = try_on_product_video('sunglasses_001', 'catalog_images\u002Fsample_user.jpg', 'catalog_images\u002Fsunglasses_001.jpg', 'eyewear', 'sunglasses')\nprint(res)\n\"\n```\n\n## Evaluation\n\nVerify outputs using the local evaluation YAML. Ensure image consistency, correct garment placement, and no visual distortions.\n\n## Sandbox Visual Testing\n\nTo test the VTO skill interactively with your own catalog of product images, launch the Sandbox Dashboard:\n\n1. Start the FastAPI local server:\n   ```bash\n   .venv\u002Fbin\u002Fpython \"$SKILL_DIR\u002Fscripts\u002Fstart_sandbox.py\" --config .\u002Fdesign-spec.md\n   ```\n2. Open [http:\u002F\u002Flocalhost:8080](http:\u002F\u002Flocalhost:8080) in your browser.\n3. Upload your own portrait photo, select any product card from the scanned catalog, and click **Generate Try-On Image**.\n4. To index a custom local folder of images, type the folder path in the search header input and click **Scan** (uses Gemini to automatically catalog and describe them).\n\n## Gotchas\n\n- **Veo video resolution\u002Fduration**: Video generation via Veo takes ~30-60s. Be patient.\n- **Image Models**: Use `flash` (recommended) or `pro` for general try-on.\n- **Privacy Compliance**: ephemerally upload user photos into the uploads bucket with a 24-hour Lifecycle auto-delete rule (configured automatically by `setup_tryon.py`).\n\n## Troubleshooting\n\n| Error pattern | Likely cause | Fix |\n|---|---|---|\n| `BILLING_DISABLED` | GCP project has no billing | Link billing account in Cloud Console |\n| `API has not been used` \u002F `disabled` | Required API disabled | Run: `gcloud services enable aiplatform.googleapis.com storage.googleapis.com` |\n| `PermissionDenied` on GCS | Service Account lack rights | Grant `roles\u002Fstorage.admin` |\n| `MethodNotImplemented: 501` \u002F `Model not found` | Selected model is unavailable in region | Check your GCP project region availability |\n\n## Completion Checklist\n\n- [ ] GCP project ID and try-on mode configured.\n- [ ] GCP resources provisioned and verified (Buckets, Gemini Enterprise Agent Platform APIs).\n- [ ] Sample catalog generated.\n- [ ] Smoke tests for image try-on succeed.\n- [ ] Catwalk video generation using Veo verified.\n","# Virtual Try-On Agent\n\nCreates virtual try-on (VTO) agents on Google Cloud supporting image and video (catwalk animation) try-on modes.\n\n## STOP -- READ THIS BEFORE RESPONDING\n\n**Check your operating mode first — there are two distinct modes:**\n\n### Mode A: Deployed Try-On Agent\n**If the system context tells you** that setup is complete (e.g. it says \"You are a DEPLOYED try-on agent\", or the conversation history shows setup has already been completed) —\n**skip Q-MODE entirely.** Respond directly to the user's try-on query.\nDo NOT output the Q-MODE block. Do NOT mention setup.\n\n### Mode B: First-time Setup (default)\n**If there is no such context** (fresh invocation, no prior setup) —\nyour VERY FIRST response MUST be the Q-MODE block below. Nothing else.\n\nDo NOT ask about products, industry, GCP project, or anything else first.\nDo NOT propose a plan. Do NOT explain what you will do.\n\nYour first message to the user must be EXACTLY this (copy-paste, no changes):\n\n```\n[skill: retail-virtual-tryon] active.\nQ-MODE: Pick a setup mode? [default: 1]\n  1. Quick start -- Local testing sandbox, interactive 6-question config, ~90s. Best for demos.\n  2. Export Web App & GCS Catalog Sync -- Generate standalone containerized codebase, GCS catalog sync, and Cloud Run config, ~3 min.\n```\n\nThen STOP and wait for the user's answer.\n\nAccept: `1`, `quick`, empty\u002FEnter (= Quick Start), `2`, `export`, `sync` or `webapp` (= Export Web App & GCS Catalog Sync).\n\n## Execution Rules\n\n1. **Q-MODE first, always.** No exceptions. No preamble.\n   - **CRITICAL WARNING**: Do NOT automatically run setup or deployment scripts (e.g. `setup_tryon.py`, `export_app.py`, `deploy_cloudrun.sh`) upon receiving a general request like \"I want to create\u002Fdeploy a VTO app on GCP\". You MUST first present the Q-MODE setup menu choice and wait for the user to select Mode 1, 2, or 3.\n2. **One question at a time. Show the default. Accept empty input.**\n   Format: `Q: \u003Cquestion text>? [default: \u003Cvalue>]`\n   Pressing Enter = use the default. **NEVER ask multiple questions in one turn.**\n3. **Execute steps in order.** Do NOT jump ahead or skip steps.\n4. **Verify each step succeeded** before moving to the next.\n5. **Save all answers to `.\u002Fdesign-spec.md`** (in the workspace) as you collect them.\n   After the interview, run `.venv\u002Fbin\u002Fpython \"$SKILL_DIR\u002Fscripts\u002Fsetup.py\" --config .\u002Fdesign-spec.md`\n   (see the Workspace Setup section to resolve `$SKILL_DIR`).\n6. **Confirm completion** of each step before proceeding.\n\n**Before Quick Start has launched setup, the user can say \"export\", \"webapp\",\nor \"deploy\" to switch to Mode 2 (Export Web App & GCS Catalog Sync).** Carry\nover answers already given for project, mode, and region; ask only the\nremaining Mode-2 questions (GCS catalog bucket, export directory). After\nsetup.py has already started buckets\u002FAPIs, the workflow is committed -- to run\nMode 2 instead, start a fresh workspace.\n\n## Workspace Setup\n\nThe skill has two locations:\n- **Install dir** -- where SKILL.md and scripts live (varies by host)\n- **Workspace** -- the agent's cwd; design-spec.md, .venv, and per-run state live here\n\nBy the end of this section the workspace must have `.venv\u002F` (with the skill\ninstalled editable), `design-spec.md`, and `SKILL_DIR`\nexported in the shell.\n\nRun this as ONE shell command -- splitting it across tool calls loses state:\n\n```bash\nSKILL_DIR=$(for d in ~\u002F.claude\u002Fskills ~\u002F.agents\u002Fskills ~\u002F.gemini\u002Fskills ~\u002F.cursor\u002Fskills; do\n  [ -f \"$d\u002Fretail-virtual-tryon\u002FSKILL.md\" ] && echo \"$d\u002Fretail-virtual-tryon\" && break\ndone)\nbash \"$SKILL_DIR\u002Fscripts\u002Fbootstrap.sh\"\n```\n\n`bootstrap.sh` finds a Python 3.11+ interpreter (with absolute-path fallback\nfor sandboxed shells), creates `.venv`, installs the skill editable, and copies\n`design-spec.md` into the workspace.\n\nAll scripts run from the install dir against the workspace config. **Use\n`.venv\u002Fbin\u002Fpython`, not bare `python`** -- bare `python` may resolve to a\nPython without the skill's editable install on sys.path.\n\n```bash\n.venv\u002Fbin\u002Fpython \"$SKILL_DIR\u002Fscripts\u002Fsetup.py\" --config .\u002Fdesign-spec.md\n```\n\nEdit `.\u002Fdesign-spec.md` and set `gcp_project_id` (the agent will do this based on the user's answers in Q-MODE).\n\n## Mode 1: Quick start (4-5 questions)\n\n| Q | Question | Default | Source |\n|---|---|---|---|\n| Q-A | GCP project ID? | `$GOOGLE_CLOUD_PROJECT` or `gcloud config get-value project` | env \u002F gcloud |\n| Q-B | Try-on mode? | `2` (both Image + Veo Video) | prompt |\n| Q-C | GCP Region? | `us-west1` | prompt |\n| Q-D | Catalog Path? | `demo` (type 'demo' to use bundled catalog, or specify local folder, or gs:\u002F\u002F URI) | prompt |\n| Q-E | Upload local catalog to GCS? *(Only asked if Q-D is a custom local folder)* | `1` (Yes) | prompt |\n\n### Question Formats & Accepted Choices:\n\n- **Q-B: Try-on mode?**\n  Format to print:\n  ```\n  Q: Try-on mode? [default: 2]\n    1. image_only (Faster, static images only)\n    2. image_and_video (Catwalk video animations via Veo)\n  ```\n  Accept: `1` (= `image_only`), `2` (= `image_and_video`), `image_only`, `image_and_video`.\n\n- **Q-D: Catalog Path?**\n  Accept: `demo` (uses bundled catalog), local directory path, or GCS URI starting with `gs:\u002F\u002F`.\n\n- **Q-E: Upload local catalog to GCS?**\n  Format to print:\n  ```\n  Q: Upload local catalog to GCS? [default: 1]\n    1. Yes (Sync and host catalog in GCS)\n    2. No (Run locally using local folder assets)\n  ```\n  Accept: `1` (= `Yes`), `2` (= `No`), `Yes`, `No`.\n\nAfter collecting these answers, do this **automatically**:\n\n1. Write the answers to `.\u002Fdesign-spec.md` (in the workspace), filling in:\n   - `gcp_project_id`\n   - `tryon_mode`\n   - `tryon_model` (always use `flash`)\n   - `tryon_output_bucket` (default: `{project_id}-tryon-output`)\n   - `tryon_upload_bucket` (default: `{project_id}-tryon-uploads`)\n   - `gcp_region`\n   - `tryon_catalog_path`\n   - `tryon_catalog_upload` (set to `true` by default, set to `false` only if Q-E is answered as `No`)\n2. Tell the user: \"Setting up local sandbox environment resources...\"\n3. Run: `.venv\u002Fbin\u002Fpython \"$SKILL_DIR\u002Fscripts\u002Fsetup.py\" --config .\u002Fdesign-spec.md`\n4. Stream the output. On success, start the local sandbox server in the background:\n   `.venv\u002Fbin\u002Fpython \"$SKILL_DIR\u002Fscripts\u002Fstart_sandbox.py\" --config .\u002Fdesign-spec.md`\n5. Provide the user with the clickable localhost link to test: \"VTO fitting room sandbox is running! Open http:\u002F\u002Flocalhost:8080 in your browser to test it.\"\n\n## Mode 2: Export Web App & GCS Catalog Sync (4 questions)\n\n| Q | Question | Default | Source |\n|---|---|---|---|\n| Q2-A | GCP project ID? | `$GOOGLE_CLOUD_PROJECT` or `gcloud config get-value project` | env \u002F gcloud |\n| Q2-B | Try-on mode? | `2` (both Image + Veo Video) | prompt |\n| Q2-C | GCS Catalog Bucket name? | `{project_id}-tryon-catalog` | prompt |\n| Q2-D | Target Directory to export code? | `.\u002Fvto-retail-app` | prompt |\n\n### Question Formats & Accepted Choices:\n\n- **Q2-B: Try-on mode?**\n  Format to print:\n  ```\n  Q: Try-on mode? [default: 2]\n    1. image_only (Faster, static images only)\n    2. image_and_video (Catwalk video animations via Veo)\n  ```\n  Accept: `1` (= `image_only`), `2` (= `image_and_video`), `image_only`, `image_and_video`.\n\nAfter collecting these answers, do this **automatically**:\n\n1. Write the answers to `.\u002Fdesign-spec.md` (in the workspace), filling in:\n   - `gcp_project_id`\n   - `tryon_mode`\n   - `gcs_catalog_bucket` (starts with `gs:\u002F\u002F...`)\n   - `export_directory`\n   - `gcp_region` (default: `us-west1`)\n   - `tryon_model` (always use `gemini-2.5-flash-image`)\n2. Tell the user: \"Setting up Cloud resources, exporting containerized codebase, and deploying to Google Cloud Run...\"\n3. Run: `.venv\u002Fbin\u002Fpython \"$SKILL_DIR\u002Fscripts\u002Fexport_app.py\" --config .\u002Fdesign-spec.md --skill-dir \"$SKILL_DIR\"`\n4. Run GCS sync verification: `.venv\u002Fbin\u002Fpython \"$SKILL_DIR\u002Fscripts\u002Fsetup_tryon.py\" --config .\u002Fdesign-spec.md`\n5. Build and Deploy container to Google Cloud Run:\n   `gcloud run deploy vto-retail-app --source .\u002Fvto-retail-app\u002F --region us-west1 --project {gcp_project_id} --allow-unauthenticated`\n6. Get the deployed service URL:\n   `gcloud run services describe vto-retail-app --region us-west1 --project {gcp_project_id} --format=\"value(status.url)\"`\n7. Output the following structured instructions to the user:\n   - Clickable Cloud Run service link:\n     \"? **VTO App is deployed and running on Cloud Run! Open [Cloud Run App URL] in your browser to test it directly.**\"\n   - **How to Sync Catalog Images to GCS**:\n     ```bash\n     gsutil -m rsync -r .\u002Fmy_clothes\u002F gs:\u002F\u002F{gcs_catalog_bucket}\u002F\n     # Then force index refresh:\n     curl -X GET \"https:\u002F\u002F{cloud_run_url}\u002Fapi\u002Fcatalog?force=true\"\n     ```\n   - **How to Embed in Your Website**:\n     ```html\n     \u003C!-- Place this iframe widget on your product details page -->\n     \u003Ciframe src=\"https:\u002F\u002F{cloud_run_url}\" width=\"100%\" height=\"800px\" style=\"border:none; border-radius:12px; box-shadow: 0 4px 20px rgba(0,0,0,0.15);\">\u003C\u002Fiframe>\n     ```\n\n## When to Use\n\n- Building **virtual try-on fitting rooms** for e-commerce.\n- Creating interactive **catwalk-style video animations** showing how clothes look when walking.\n- Enabling **general retail try-on** for accessories, jewelry, eyewear, or clothes.\n\nDo NOT use for furniture\u002Fhome styling (use room placement tools), or complex 3D avatar creation.\n\n## Resource Setup\n\nSet the parameters in `.\u002Fdesign-spec.md` (in the workspace), then run:\n\n```bash\n.venv\u002Fbin\u002Fpython \"$SKILL_DIR\u002Fscripts\u002Fsetup.py\" --config .\u002Fdesign-spec.md\n```\n\nOn success, local sample catalog images will be generated under `.\u002Fcatalog_images\u002F` (unless a GCS bucket or custom catalog path was specified, in which case bucket access will be verified).\n\n## Testing & Verification\n\nSet the required environment variables in the shell that runs the agent:\n\n```bash\nexport GOOGLE_CLOUD_PROJECT=\"\u003Cyour-project-id>\"\nexport TRYON_OUTPUT_BUCKET=\"\u003Cyour-project-id>-tryon-output\"\nexport TRYON_UPLOAD_BUCKET=\"\u003Cyour-project-id>-tryon-uploads\"\nexport GEMINI_IMAGE_MODEL=\"flash\"  # or pro \u002F gemini-2.5-flash-image \u002F gemini-2.5-pro-image\n```\n\n### Run using `adk web`\n\nLaunch the interactive web UI. **Use `.venv\u002Fbin\u002Fadk`, not bare `adk`** -- bare\n`adk` may resolve to a global Python (pyenv, brew, etc.) whose ADK can't find\nthe skill and reports an empty app list (UI loads, but `\u002Flist-apps` returns\n`[]` and queries time out).\n\n```bash\n.venv\u002Fbin\u002Fadk web .\n```\n\nYou can start a chat session and test VTO by providing:\n- Product ID: `shirt_001` or `sunglasses_001`\n- User Photo: Upload `catalog_images\u002Fsample_user.jpg` or any photo of yourself.\n- Request: \"Try on this shirt for me\" or \"Show me a catwalk video wearing these sunglasses\".\n\n### Direct Python Smoke Test\n\nRun a quick test script without the UI:\n\n```bash\n# Test image try-on\n.venv\u002Fbin\u002Fpython -c \"\nfrom scripts.tryon_agent import try_on_product_image\nres = try_on_product_image('shirt_001', 'catalog_images\u002Fsample_user.jpg', 'catalog_images\u002Fshirt_001.jpg', 'clothing', 'red shirt')\nprint(res)\n\"\n\n# Test video try-on (Veo)\n.venv\u002Fbin\u002Fpython -c \"\nfrom scripts.tryon_agent import try_on_product_video\nres = try_on_product_video('sunglasses_001', 'catalog_images\u002Fsample_user.jpg', 'catalog_images\u002Fsunglasses_001.jpg', 'eyewear', 'sunglasses')\nprint(res)\n\"\n```\n\n## Evaluation\n\nVerify outputs using the local evaluation YAML. Ensure image consistency, correct garment placement, and no visual distortions.\n\n## Sandbox Visual Testing\n\nTo test the VTO skill interactively with your own catalog of product images, launch the Sandbox Dashboard:\n\n1. Start the FastAPI local server:\n   ```bash\n   .venv\u002Fbin\u002Fpython \"$SKILL_DIR\u002Fscripts\u002Fstart_sandbox.py\" --config .\u002Fdesign-spec.md\n   ```\n2. Open [http:\u002F\u002Flocalhost:8080](http:\u002F\u002Flocalhost:8080) in your browser.\n3. Upload your own portrait photo, select any product card from the scanned catalog, and click **Generate Try-On Image**.\n4. To index a custom local folder of images, type the folder path in the search header input and click **Scan** (uses Gemini to automatically catalog and describe them).\n\n## Gotchas\n\n- **Veo video resolution\u002Fduration**: Video generation via Veo takes ~30-60s. Be patient.\n- **Image Models**: Use `flash` (recommended) or `pro` for general try-on.\n- **Privacy Compliance**: ephemerally upload user photos into the uploads bucket with a 24-hour Lifecycle auto-delete rule (configured automatically by `setup_tryon.py`).\n\n## Troubleshooting\n\n| Error pattern | Likely cause | Fix |\n|---|---|---|\n| `BILLING_DISABLED` | GCP project has no billing | Link billing account in Cloud Console |\n| `API has not been used` \u002F `disabled` | Required API disabled | Run: `gcloud services enable aiplatform.googleapis.com storage.googleapis.com` |\n| `PermissionDenied` on GCS | Service Account lack rights | Grant `roles\u002Fstorage.admin` |\n| `MethodNotImplemented: 501` \u002F `Model not found` | Selected model is unavailable in region | Check your GCP project region availability |\n\n## Completion Checklist\n\n- [ ] GCP project ID and try-on mode configured.\n- [ ] GCP resources provisioned and verified (Buckets, Gemini Enterprise Agent Platform APIs).\n- [ ] Sample catalog generated.\n- [ ] Smoke tests for image try-on succeed.\n- [ ] Catwalk video generation using Veo verified.\n",{"name":5,"metadata":43,"description":7},{"author":12,"license":15,"version":44,"requires":45},"0.2.0",{"pip":46,"install_hint":52},[47,48,49,50,51],"google-genai>=1.0","google-cloud-storage>=2.0","pillow>=9.0","pyyaml>=6.0","google-adk>=2.2.0","From inside the workspace (see Workspace Setup section), run: pip install -e \"$SKILL_DIR\" -- this installs the skill's pyproject.toml including google-adk for the agent runtime","main","665f7b2a181686f2ba3c6c942e9b30a084b12ec3","plugins\u002Fretail\u002Fskills\u002Fvirtual-tryon",2962,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes","https:\u002F\u002Fadk.dev","https:\u002F\u002Fgithub.com\u002Fgoogle","https:\u002F\u002Fopensource.google\u002F","Google ❤️ Open Source","2026-11-14 04:01:32",{"source":8,"skillName":5,"commands":64,"prompt":74,"zipAvailable":75},[65,68,71],{"tool":66,"command":67},"npx","npx skills add google\u002Fadk-recipes --skill retail-virtual-tryon",{"tool":69,"command":70},"bunx","bunx skills add google\u002Fadk-recipes --skill retail-virtual-tryon",{"tool":72,"command":73},"pnpm","pnpm dlx skills add google\u002Fadk-recipes --skill retail-virtual-tryon","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fvirtual-tryon\u002FSKILL.md",true,[77,83,87,93,97,101,105,109,113,117,123,127,131,135,139,145,149,153,157,161,165,169,173,177,181,185,189,193,197,201,205,209,213],{"path":78,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":81,"sourceHtmlUrl":82},".env.example","OTHER","其他",1613,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fvirtual-tryon\u002F.env.example",{"path":84,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":85,"sourceHtmlUrl":86},".gitignore",174,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fvirtual-tryon\u002F.gitignore",{"path":88,"resourceType":89,"resourceTypeDesc":90,"sizeBytes":91,"sourceHtmlUrl":92},"assets\u002Fcatalog_images\u002Fcatalog.json","ASSET","资产文件",335,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fvirtual-tryon\u002Fassets\u002Fcatalog_images\u002Fcatalog.json",{"path":94,"resourceType":89,"resourceTypeDesc":90,"sizeBytes":95,"sourceHtmlUrl":96},"assets\u002Fcatalog_images\u002Fsample_user.jpg",8695,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fvirtual-tryon\u002Fassets\u002Fcatalog_images\u002Fsample_user.jpg",{"path":98,"resourceType":89,"resourceTypeDesc":90,"sizeBytes":99,"sourceHtmlUrl":100},"assets\u002Fcatalog_images\u002Fshirt_001.jpg",58146,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fvirtual-tryon\u002Fassets\u002Fcatalog_images\u002Fshirt_001.jpg",{"path":102,"resourceType":89,"resourceTypeDesc":90,"sizeBytes":103,"sourceHtmlUrl":104},"assets\u002Fcatalog_images\u002Fsunglasses_001.jpg",3821,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fvirtual-tryon\u002Fassets\u002Fcatalog_images\u002Fsunglasses_001.jpg",{"path":106,"resourceType":89,"resourceTypeDesc":90,"sizeBytes":107,"sourceHtmlUrl":108},"assets\u002Fdesign-spec.md",2394,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fvirtual-tryon\u002Fassets\u002Fdesign-spec.md",{"path":110,"resourceType":89,"resourceTypeDesc":90,"sizeBytes":111,"sourceHtmlUrl":112},"assets\u002Fexport-template\u002F.dockerignore",101,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fvirtual-tryon\u002Fassets\u002Fexport-template\u002F.dockerignore",{"path":114,"resourceType":89,"resourceTypeDesc":90,"sizeBytes":115,"sourceHtmlUrl":116},"assets\u002Fexport-template\u002Fcloudbuild.yaml",730,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fvirtual-tryon\u002Fassets\u002Fexport-template\u002Fcloudbuild.yaml",{"path":118,"resourceType":119,"resourceTypeDesc":120,"sizeBytes":121,"sourceHtmlUrl":122},"assets\u002Fexport-template\u002Fdeploy_cloudrun.sh","SCRIPT","脚本",1687,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fvirtual-tryon\u002Fassets\u002Fexport-template\u002Fdeploy_cloudrun.sh",{"path":124,"resourceType":89,"resourceTypeDesc":90,"sizeBytes":125,"sourceHtmlUrl":126},"assets\u002Fexport-template\u002FDockerfile",1209,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fvirtual-tryon\u002Fassets\u002Fexport-template\u002FDockerfile",{"path":128,"resourceType":119,"resourceTypeDesc":120,"sizeBytes":129,"sourceHtmlUrl":130},"assets\u002Fui\u002Fapp.js",24188,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fvirtual-tryon\u002Fassets\u002Fui\u002Fapp.js",{"path":132,"resourceType":89,"resourceTypeDesc":90,"sizeBytes":133,"sourceHtmlUrl":134},"assets\u002Fui\u002Findex.html",14053,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fvirtual-tryon\u002Fassets\u002Fui\u002Findex.html",{"path":136,"resourceType":89,"resourceTypeDesc":90,"sizeBytes":137,"sourceHtmlUrl":138},"assets\u002Fui\u002Fstyles.css",56511,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fvirtual-tryon\u002Fassets\u002Fui\u002Fstyles.css",{"path":140,"resourceType":141,"resourceTypeDesc":142,"sizeBytes":143,"sourceHtmlUrl":144},"EVAL.yaml","REFERENCE","参考文档",8730,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fvirtual-tryon\u002FEVAL.yaml",{"path":146,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":147,"sourceHtmlUrl":148},"Makefile",2051,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fvirtual-tryon\u002FMakefile",{"path":150,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":151,"sourceHtmlUrl":152},"pyproject.toml",1317,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fvirtual-tryon\u002Fpyproject.toml",{"path":154,"resourceType":141,"resourceTypeDesc":142,"sizeBytes":155,"sourceHtmlUrl":156},"README.md",8733,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fvirtual-tryon\u002FREADME.md",{"path":158,"resourceType":141,"resourceTypeDesc":142,"sizeBytes":159,"sourceHtmlUrl":160},"references\u002Ftryon-architecture.md",2453,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fvirtual-tryon\u002Freferences\u002Ftryon-architecture.md",{"path":162,"resourceType":119,"resourceTypeDesc":120,"sizeBytes":163,"sourceHtmlUrl":164},"scripts\u002F__init__.py",666,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fvirtual-tryon\u002Fscripts\u002F__init__.py",{"path":166,"resourceType":119,"resourceTypeDesc":120,"sizeBytes":167,"sourceHtmlUrl":168},"scripts\u002F_setup_utils.py",2185,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fvirtual-tryon\u002Fscripts\u002F_setup_utils.py",{"path":170,"resourceType":119,"resourceTypeDesc":120,"sizeBytes":171,"sourceHtmlUrl":172},"scripts\u002Fbootstrap.sh",3449,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fvirtual-tryon\u002Fscripts\u002Fbootstrap.sh",{"path":174,"resourceType":119,"resourceTypeDesc":120,"sizeBytes":175,"sourceHtmlUrl":176},"scripts\u002Fconfig.py",3786,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fvirtual-tryon\u002Fscripts\u002Fconfig.py",{"path":178,"resourceType":119,"resourceTypeDesc":120,"sizeBytes":179,"sourceHtmlUrl":180},"scripts\u002Fexport_app.py",9133,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fvirtual-tryon\u002Fscripts\u002Fexport_app.py",{"path":182,"resourceType":119,"resourceTypeDesc":120,"sizeBytes":183,"sourceHtmlUrl":184},"scripts\u002Fscan_catalog.py",11403,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fvirtual-tryon\u002Fscripts\u002Fscan_catalog.py",{"path":186,"resourceType":119,"resourceTypeDesc":120,"sizeBytes":187,"sourceHtmlUrl":188},"scripts\u002Fserver.py",13261,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fvirtual-tryon\u002Fscripts\u002Fserver.py",{"path":190,"resourceType":119,"resourceTypeDesc":120,"sizeBytes":191,"sourceHtmlUrl":192},"scripts\u002Fsetup_tryon.py",19620,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fvirtual-tryon\u002Fscripts\u002Fsetup_tryon.py",{"path":194,"resourceType":119,"resourceTypeDesc":120,"sizeBytes":195,"sourceHtmlUrl":196},"scripts\u002Fsetup.py",7259,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fvirtual-tryon\u002Fscripts\u002Fsetup.py",{"path":198,"resourceType":119,"resourceTypeDesc":120,"sizeBytes":199,"sourceHtmlUrl":200},"scripts\u002Fstart_sandbox.py",2890,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fvirtual-tryon\u002Fscripts\u002Fstart_sandbox.py",{"path":202,"resourceType":119,"resourceTypeDesc":120,"sizeBytes":203,"sourceHtmlUrl":204},"scripts\u002Ftryon_agent.py",6534,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fvirtual-tryon\u002Fscripts\u002Ftryon_agent.py",{"path":206,"resourceType":119,"resourceTypeDesc":120,"sizeBytes":207,"sourceHtmlUrl":208},"scripts\u002Ftryon_processor.py",17369,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fvirtual-tryon\u002Fscripts\u002Ftryon_processor.py",{"path":210,"resourceType":119,"resourceTypeDesc":120,"sizeBytes":211,"sourceHtmlUrl":212},"tests\u002Ftest_runnability.py",890,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fvirtual-tryon\u002Ftests\u002Ftest_runnability.py",{"path":214,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":215,"sourceHtmlUrl":216},"uv.lock",453818,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fvirtual-tryon\u002Fuv.lock",[218,252,277,294,315,334],{"skillNo":219,"name":220,"nameZh":6,"description":221,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":222,"categories":223,"keywords":233,"publishedAt":38},"01M6991ABTZW7FCPREXY8GD4RG","retail-product-search","Creates product search agents with semantic search and RAG on Google Cloud (Vector Search on Gemini Enterprise Agent Platform, BigQuery, embeddings). Use when the user wants to \"build a product search agent\", \"create an e-commerce search\", \"make a shopping assistant\", \"set up semantic catalog discovery\", \"ingest products into Vector Search\", or \"deploy a retail RAG agent\". Handles the full pipeline: catalog data ingestion to BigQuery, Gemini Enterprise Agent Platform Vector Search collection setup, ADK agent scaffolding, evaluation, and Cloud Run deployment.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fproduct-search\u002FSKILL.md",[224,227,228],{"categoryNo":225,"categoryName":226,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署",{"categoryNo":27,"categoryName":28,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":229,"categoryName":230,"taxonomyType":231,"taxonomyTypeDesc":232},"01JBSEEDCAT000000000000031","产品经理","PROFESSION","适用职业",[234,235,236,9,237,33,35,36,37,238,239,240,241,242,243,244,245,246,247,248,249,250,251],"retail product search","product","search","assistant","rag","create","run","apache","vector","pipeline","SET","collection","ingestion","up","shopping","scaffolding","commerce","when",{"skillNo":253,"name":254,"nameZh":6,"description":255,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":256,"categories":257,"keywords":259,"publishedAt":38},"01M69918HZCYZHD7K9Y9ZSD287","routines","Use for a recurring unattended task (cron; pull data, open a PR, post a digest), or to test\u002Fdry-run a routine first. Explains authoring and testing via the routine tool.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fcore\u002Fpython\u002Flong-horizon-harness\u002Fhorizon\u002Fbuiltin_skills\u002Froutines\u002FSKILL.md",[258],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[254,31,260,261,240,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276],"test","pr","pull","data","first","open","tool","recurring","use","task","digest","authoring","dry","via","post","for","routine",{"skillNo":278,"name":279,"nameZh":6,"description":280,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":281,"categories":282,"keywords":283,"publishedAt":38},"01M699178ZDFDXEZ11DG1Y9CTF","policy","Inspect the per-workspace tool-policy overlay (.lha\u002Fpolicies.jsonl) that gates destructive or sensitive tool calls, and tell the user what to change if they want a rule added or removed.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fcore\u002Fpython\u002Flong-horizon-harness\u002Fhorizon\u002Fbuiltin_skills\u002Fpolicy\u002FSKILL.md",[],[279,284,266,285,286,287,288,289,290,291,292,293],"change","workspace","user","gates","rule","jsonl","calls","inspect","tool calls","overlay",{"skillNo":295,"name":296,"nameZh":6,"description":297,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":298,"categories":299,"keywords":300,"publishedAt":38},"01M69915F8591SQBA1ZHK6NDA7","google-workspace","Read\u002Fwrite Google Drive, Docs, Sheets, Gmail, Calendar, Chat, Tasks, Slides via the `gws` CLI. Needs an OAuth client or service account configured first. Use for any Google Workspace task.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fcore\u002Fpython\u002Flong-horizon-harness\u002Fhorizon\u002Fbuiltin_skills\u002Fgoogle-workspace\u002FSKILL.md",[],[9,301,285,302,303,304,305,306,264,307,308,309,268,310,269,311,312,273,313,314,275],"google workspace","gmail","cli","docs","tasks","OAuth","slides","read","write","calendar","gws","chat","client","sheets",{"skillNo":316,"name":317,"nameZh":6,"description":318,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":319,"categories":320,"keywords":322,"publishedAt":38},"01M69914416KTZ6Z0WD425YYJ0","find-skills","Discover\u002Finstall NEW agent skills from external sources (skills.sh). Use for capabilities you lack, e.g. \"find a skill for X\". Do NOT use to list skills you already have; see `\u003Cavailable_skills>`.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fcore\u002Fpython\u002Flong-horizon-harness\u002Fhorizon\u002Fbuiltin_skills\u002Ffind-skills\u002FSKILL.md",[321],{"categoryNo":27,"categoryName":28,"taxonomyType":21,"taxonomyTypeDesc":22},[323,324,325,326,327,328,268,329,330,331,332,333,275],"find skills","find","capabilities","list skills","list","install","do","new agent","discover","sources","you",{"skillNo":335,"name":336,"nameZh":6,"description":337,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":338,"categories":339,"keywords":341,"publishedAt":38},"01M6991292FVYS3XR3WE7VXZJD","bootstrap-google-tools","Install\u002Fauth CLIs the sandbox lacks - `gws` (Drive, Gmail, Sheets, Calendar), `gcloud`, `agents-cli`, `mcp-cli` (MCP servers). Use on \"command not found\" or before GCP\u002FWorkspace\u002FMCP work.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fcore\u002Fpython\u002Flong-horizon-harness\u002Fhorizon\u002Fbuiltin_skills\u002Fbootstrap-google-tools\u002FSKILL.md",[340],{"categoryNo":27,"categoryName":28,"taxonomyType":21,"taxonomyTypeDesc":22},[9,342,343,344,345,302,303,346,347,348,349,285,350,351,328,268,310,311,314,352],"bootstrap google tools","bootstrap","Tools","MCP","gcloud","sandbox","auth","gcp","work","command","servers"]