{
  "schemaVersion": "1.0",
  "item": {
    "slug": "web2labs-studio",
    "name": "Web2Labs Studio",
    "source": "tencent",
    "type": "skill",
    "category": "内容创作",
    "sourceUrl": "https://clawhub.ai/Vinlow/web2labs-studio",
    "canonicalUrl": "https://clawhub.ai/Vinlow/web2labs-studio",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/web2labs-studio",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=web2labs-studio",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "CHANGELOG.md",
      "claw.json",
      "CONTRIBUTING.md",
      "examples/batch-processing.md",
      "examples/gaming-montage.md",
      "examples/podcast-cleanup.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/web2labs-studio"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/web2labs-studio",
    "agentPageUrl": "https://openagent3.xyz/skills/web2labs-studio/agent",
    "manifestUrl": "https://openagent3.xyz/skills/web2labs-studio/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/web2labs-studio/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Web2Labs Studio",
        "body": "AI-powered video editor for creators. Process recordings into jump-cut videos,\nautomatic subtitles, and shorts."
      },
      {
        "title": "Available Tools",
        "body": "studio_setup: Send magic link, complete setup, or save an existing API key.\nstudio_upload: Upload local file or supported URL for processing.\n\nsupports optional webhook_url + webhook_secret for project.completed callbacks.\n\n\nstudio_status: Check current project status.\nstudio_poll: Wait for completion with real-time WebSocket progress (falls back to HTTP polling).\nstudio_results: Get output URLs and metadata.\nstudio_download: Download outputs to local filesystem.\nstudio_credits: Check API/subscription balances.\nstudio_pricing: Get current pricing metadata for API and Creator Credit features.\nstudio_estimate: Estimate API and Creator Credit cost before upload.\nstudio_thumbnails: Generate A/B/C thumbnail variants for a completed project.\nstudio_rerender: Re-render a completed project with configuration overrides. First re-render per project is free; subsequent re-renders cost 15 Creator Credits.\nstudio_analytics: Get usage and value analytics.\nstudio_brand: Get or update brand kit settings (colors, identity, fonts, defaults).\nstudio_brand_import: Import brand colors and identity from a YouTube/Twitch profile URL.\nstudio_assets: Upload/list/delete reusable intro/outro/watermark assets.\nstudio_projects: List recent projects.\nstudio_delete: Delete a project.\nstudio_feedback: Report bugs/suggestions/questions.\nstudio_referral: Get or apply referral codes for bonus credits.\nstudio_watch: Watch a YouTube or Twitch channel for new videos and auto-process them."
      },
      {
        "title": "Presets",
        "body": "quick: Fast cleanup, no extras.\nyoutube: Subtitles + shorts + music.\nshorts-only: Generate only vertical shorts.\npodcast: Soft cuts, subtitles, no zoom.\ngaming: Dynamic zoom and gaming-style pacing.\ntutorial: Gentle edits for educational content.\nvlog: Balanced vlog workflow.\ncinematic: High-production settings."
      },
      {
        "title": "Standard Workflow",
        "body": "If auth is missing, run studio_setup.\nRun studio_credits first.\nIf the workflow may use premium features, run studio_estimate.\nRun studio_upload with a preset.\nIf no webhook is configured, run studio_poll for progress until completion.\nRun studio_results and optionally studio_thumbnails.\nUse studio_rerender if the user wants output changes without re-uploading.\nRun studio_download to save outputs.\nUse studio_brand when the user asks for brand color/font consistency across future outputs.\nUse studio_brand_import when the user provides a YouTube/Twitch profile URL for one-click brand setup.\nUse studio_assets when the user wants reusable intro/outro/watermark media."
      },
      {
        "title": "Cost-Aware Workflow",
        "body": "Use studio_pricing when the user asks \"how much will this cost?\" or wants bundle guidance.\nUse studio_estimate before upload when configuration enables thumbnails/B-roll/audio polish.\nUse studio_rerender for post-processing adjustments when analysis is already complete.\nIf estimate is non-trivial, confirm expected cost with the user before upload.\nIf the user asks for urgent/rush processing, set priority: \"rush\" and confirm the 2x API-credit cost before upload.\nPaid tools support confirm_spend: true for explicit approval when required by spend policy."
      },
      {
        "title": "Spend Policy",
        "body": "Spend policy is controlled by env var WEB2LABS_SPEND_POLICY:\n\nauto (default): proceed without prompt unless auto-spend caps are exceeded. Best for most users who want a frictionless workflow.\nsmart: confirm higher-risk or higher-cost spends (rush uploads, low balance, large creator credit spend).\nexplicit: confirm every credit-spending action. Use for strict budget control.\n\nAuto mode caps (all tunable via env vars):\n\nWEB2LABS_AUTO_SPEND_MAX_API_PER_ACTION (default: 2)\nWEB2LABS_AUTO_SPEND_MAX_CREATOR_PER_ACTION (default: 40)\nWEB2LABS_AUTO_SPEND_MAX_API_PER_MONTH (default: 80)\nWEB2LABS_AUTO_SPEND_MAX_CREATOR_PER_MONTH (default: 400)\n\nWhen a tool returns spend_confirmation_required, ask the user and re-run with confirm_spend: true."
      },
      {
        "title": "URL Input",
        "body": "If file_path is a URL, use local yt-dlp download first.\nIf yt-dlp is missing, provide install help:\n\nmacOS: brew install yt-dlp\nLinux: pip install yt-dlp\nWindows: winget install yt-dlp\n\nOnly process content the user has rights to edit."
      },
      {
        "title": "Webhooks",
        "body": "studio_upload accepts webhook_url and optional webhook_secret.\nIf provided, Studio sends project.completed to the callback URL when rendering finishes.\nSigned callbacks include:\n\nX-Web2Labs-Webhook-Timestamp\nX-Web2Labs-Webhook-Signature (sha256=<hmac(timestamp + \".\" + payload)>)\n\n\nWith webhook enabled, polling is optional and can be skipped for fire-and-forget automation."
      },
      {
        "title": "Batch Workflow",
        "body": "Before batch processing, confirm total credit cost:\n\"This will process N videos and consume N credits. Proceed?\""
      },
      {
        "title": "Guardrails",
        "body": "Always call studio_credits before upload.\nNever expose API keys in logs or messages.\nRespect spend policy and confirmation requirements before spending credits.\nRemind users about retention after download.\nSuggest presets when users do not provide settings.\nFor URLs, verify yt-dlp availability before proceeding.\nRespect user rights and content ownership.\nFor priority: \"rush\", explicitly confirm \"2 API credits instead of 1\" before proceeding.\nFor watch mode, only monitor channels the user owns or has permission to process."
      },
      {
        "title": "Upsell Moments",
        "body": "After successful processing: suggest thumbnails if missing.\nWhen API credits are low (<=2): use studio_pricing and provide purchase links.\nWhen subscription monthly usage is above 80%: suggest API credit bundles.\nAfter first project: suggest thumbnails, cinematic preset, and brand consistency features.\nAfter first project: mention referral program — \"Share your referral link to earn 5 free credits per signup!\""
      },
      {
        "title": "Brand Kit Workflow",
        "body": "If user asks to set brand colors, fonts, or identity, call studio_brand with action: \"update\".\nUse snake_case fields for convenience (primary_color, secondary_color, channel_name) or updates object.\nConfirm that changes apply to future thumbnail/subtitle outputs.\nIf user shares a YouTube/Twitch profile URL, offer studio_brand_import first, then review/apply suggestions."
      },
      {
        "title": "Assets Workflow",
        "body": "Use studio_assets with:\n\naction: \"list\" to inspect available intro/outro/watermark assets.\naction: \"upload\" + asset_type + file_path to add reusable media.\naction: \"delete\" + asset_type to remove old assets.\n\n\nIf user says \"use this intro/outro on future videos\", upload via studio_assets first, then ensure brand defaults are configured with studio_brand."
      },
      {
        "title": "Watch Mode",
        "body": "Watch mode monitors YouTube or Twitch channels for new videos and auto-processes them through Studio."
      },
      {
        "title": "Setting up a watcher",
        "body": "Run studio_watch with action: \"add\" and the channel url (e.g. https://youtube.com/@username).\nOptionally set preset, max_duration_minutes, max_daily_uploads, and poll_interval_minutes.\nThe watcher is saved and ready. Run studio_watch with action: \"check\" to poll for new videos.\n\nOnly channel/user URLs are accepted, not individual video URLs."
      },
      {
        "title": "How check works",
        "body": "action: \"check\" does a single poll cycle:\n\nLists recent videos from each enabled watcher's channel via yt-dlp.\nFilters out already-processed videos (tracked by video ID).\nFilters out videos exceeding max_duration_minutes.\nRespects the max_daily_uploads cap per watcher.\nDownloads and uploads each new video to Studio with the watcher's preset.\nReturns a summary of what was processed.\n\nPass id to check a specific watcher, or omit to check all enabled watchers."
      },
      {
        "title": "Managing watchers",
        "body": "action: \"list\" — show all watchers and their status.\naction: \"status\" with id — detailed status for one watcher.\naction: \"pause\" / action: \"resume\" with id — disable/enable a watcher.\naction: \"remove\" with id — delete a watcher."
      },
      {
        "title": "Automation",
        "body": "Run studio_watch with action: \"check\" on a schedule. Examples:\n\nHave your AI agent call it periodically.\nUse a system cron job: */30 * * * * node /path/to/check-watchers.mjs\nUse a simple loop script with a sleep interval."
      },
      {
        "title": "Content rights",
        "body": "Only watch channels you own or have explicit permission to process. This aligns with the existing guardrail about respecting user rights and content ownership."
      },
      {
        "title": "Environment Variables",
        "body": "WEB2LABS_API_KEY: API key for authentication.\nWEB2LABS_BEARER_TOKEN: Bearer token for authentication (alternative to API key).\nWEB2LABS_API_ENDPOINT: API endpoint URL (default: https://web2labs.com).\nWEB2LABS_SOCKET_URL: WebSocket server URL for real-time progress (default: same as API endpoint). Override for local dev when the socket server runs on a different port.\nWEB2LABS_SPEND_POLICY: Spend confirmation policy (smart, explicit, auto).\nWEB2LABS_TEST_MODE: Set to true to target the test instance (https://test.web2labs.com). Changes the default API endpoint and enables test-mode behavior.\nWEB2LABS_BASIC_AUTH: HTTP Basic Auth credentials in user:password format. Required when the target instance is behind HTTP Basic Auth (e.g. the test instance)."
      },
      {
        "title": "Sandbox mode",
        "body": "When OpenClaw runs in sandbox mode, tool processes execute inside Docker and do not inherit host process.env. Environment variables set via skills.entries.@web2labs/studio.env in ~/.openclaw/openclaw.json are only injected in host mode.\n\nFor sandbox sessions, configure environment variables through the sandbox environment configuration or a custom Docker image. Alternatively, use studio_setup with action: \"save_api_key\" after starting the session — the key is written to a config file inside the container."
      },
      {
        "title": "Test Mode",
        "body": "Test mode targets the isolated test instance at https://test.web2labs.com. The test instance has its own database, storage, and configuration — nothing affects production."
      },
      {
        "title": "Enabling test mode",
        "body": "Set these environment variables:\n\nWEB2LABS_TEST_MODE=true\nWEB2LABS_BASIC_AUTH=web2labs:<password>\nWEB2LABS_API_KEY=<test-instance-api-key>\n\nWEB2LABS_TEST_MODE=true changes the default API endpoint to https://test.web2labs.com. You can also set WEB2LABS_API_ENDPOINT explicitly to override the URL.\n\nWEB2LABS_BASIC_AUTH provides the HTTP Basic Auth credentials that the test instance's nginx reverse proxy requires on all requests (format: user:password)."
      },
      {
        "title": "Getting a test API key",
        "body": "The test instance is password-protected at the nginx level, so the magic-link setup flow (send_magic_link / complete_setup) may not complete fully. Instead:\n\nOpen https://test.web2labs.com in a browser and enter the HTTP Basic Auth credentials when prompted.\nCreate an account or log in.\nNavigate to /user/api and generate an API key.\nSave it via studio_setup with action: \"save_api_key\" and api_key: \"<your-key>\", or set WEB2LABS_API_KEY directly."
      },
      {
        "title": "Test instance differences",
        "body": "No real billing (BILLING_MODE=test), no real emails, no analytics.\nLocal disk storage instead of GCS.\nSeparate database (web2labs_test).\nLower resource limits than production.\nProjects and data are fully isolated from production."
      },
      {
        "title": "Error Handling",
        "body": "Network timeout: retry up to 3 times with backoff.\n429 rate-limited: wait retryAfter then retry.\nWorker unavailable: surface clear retry guidance.\nInvalid file format: explain supported formats.\nFailed processing: include project_id in support guidance."
      },
      {
        "title": "Setup",
        "body": "If API key is missing, run onboarding with studio_setup:\n\nSend magic link:\nstudio_setup with action: \"send_magic_link\" and email.\nAsk user for the code from email (or auto-read via email skill).\nComplete setup:\nstudio_setup with action: \"complete_setup\", email, and code.\nAPI key is generated and saved to ~/.openclaw/openclaw.json.\n\nIf user already has an API key:\n\nstudio_setup with action: \"save_api_key\" and api_key.\n\nManual config example:\n\n{\n  \"skills\": {\n    \"entries\": {\n      \"@web2labs/studio\": {\n        \"apiKey\": \"w2l_xxxxx\"\n      }\n    }\n  }\n}"
      },
      {
        "title": "Feedback",
        "body": "Use studio_feedback when users want to report:\n\nbug\nsuggestion\nquestion\n\nInclude project_id when applicable."
      },
      {
        "title": "Referral Program",
        "body": "studio_referral: Get the user's referral code/link/stats, or apply a friend's referral code.\n\nEvery user gets a unique referral code (format: STUDIO-XXXX).\nWhen someone signs up using a code, both parties get 5 free API credits (60-day expiry)."
      },
      {
        "title": "When to mention referrals",
        "body": "After first successful project: \"Want 5 free credits? Share your referral link!\"\nWhen asked about free credits: Explain the referral program.\nDuring onboarding: \"Have a referral code from a friend? Use studio_referral with action: apply.\"\nWhen credits are low: \"You can earn 5 credits per referral — up to 50 total.\""
      },
      {
        "title": "How to use",
        "body": "Get code/link/stats: studio_referral with action: \"get\".\nApply a friend's code: studio_referral with action: \"apply\" and code: \"STUDIO-XXXX\".\nCodes can only be applied within 24 hours of account creation.\nUsers cannot apply their own code.\nMaximum 50 credits earned per user from referrals (10 referrals)."
      }
    ],
    "body": "Web2Labs Studio\n\nAI-powered video editor for creators. Process recordings into jump-cut videos, automatic subtitles, and shorts.\n\nAvailable Tools\nstudio_setup: Send magic link, complete setup, or save an existing API key.\nstudio_upload: Upload local file or supported URL for processing.\nsupports optional webhook_url + webhook_secret for project.completed callbacks.\nstudio_status: Check current project status.\nstudio_poll: Wait for completion with real-time WebSocket progress (falls back to HTTP polling).\nstudio_results: Get output URLs and metadata.\nstudio_download: Download outputs to local filesystem.\nstudio_credits: Check API/subscription balances.\nstudio_pricing: Get current pricing metadata for API and Creator Credit features.\nstudio_estimate: Estimate API and Creator Credit cost before upload.\nstudio_thumbnails: Generate A/B/C thumbnail variants for a completed project.\nstudio_rerender: Re-render a completed project with configuration overrides. First re-render per project is free; subsequent re-renders cost 15 Creator Credits.\nstudio_analytics: Get usage and value analytics.\nstudio_brand: Get or update brand kit settings (colors, identity, fonts, defaults).\nstudio_brand_import: Import brand colors and identity from a YouTube/Twitch profile URL.\nstudio_assets: Upload/list/delete reusable intro/outro/watermark assets.\nstudio_projects: List recent projects.\nstudio_delete: Delete a project.\nstudio_feedback: Report bugs/suggestions/questions.\nstudio_referral: Get or apply referral codes for bonus credits.\nstudio_watch: Watch a YouTube or Twitch channel for new videos and auto-process them.\nPresets\nquick: Fast cleanup, no extras.\nyoutube: Subtitles + shorts + music.\nshorts-only: Generate only vertical shorts.\npodcast: Soft cuts, subtitles, no zoom.\ngaming: Dynamic zoom and gaming-style pacing.\ntutorial: Gentle edits for educational content.\nvlog: Balanced vlog workflow.\ncinematic: High-production settings.\nStandard Workflow\nIf auth is missing, run studio_setup.\nRun studio_credits first.\nIf the workflow may use premium features, run studio_estimate.\nRun studio_upload with a preset.\nIf no webhook is configured, run studio_poll for progress until completion.\nRun studio_results and optionally studio_thumbnails.\nUse studio_rerender if the user wants output changes without re-uploading.\nRun studio_download to save outputs.\nUse studio_brand when the user asks for brand color/font consistency across future outputs.\nUse studio_brand_import when the user provides a YouTube/Twitch profile URL for one-click brand setup.\nUse studio_assets when the user wants reusable intro/outro/watermark media.\nCost-Aware Workflow\nUse studio_pricing when the user asks \"how much will this cost?\" or wants bundle guidance.\nUse studio_estimate before upload when configuration enables thumbnails/B-roll/audio polish.\nUse studio_rerender for post-processing adjustments when analysis is already complete.\nIf estimate is non-trivial, confirm expected cost with the user before upload.\nIf the user asks for urgent/rush processing, set priority: \"rush\" and confirm the 2x API-credit cost before upload.\nPaid tools support confirm_spend: true for explicit approval when required by spend policy.\nSpend Policy\n\nSpend policy is controlled by env var WEB2LABS_SPEND_POLICY:\n\nauto (default): proceed without prompt unless auto-spend caps are exceeded. Best for most users who want a frictionless workflow.\nsmart: confirm higher-risk or higher-cost spends (rush uploads, low balance, large creator credit spend).\nexplicit: confirm every credit-spending action. Use for strict budget control.\n\nAuto mode caps (all tunable via env vars):\n\nWEB2LABS_AUTO_SPEND_MAX_API_PER_ACTION (default: 2)\nWEB2LABS_AUTO_SPEND_MAX_CREATOR_PER_ACTION (default: 40)\nWEB2LABS_AUTO_SPEND_MAX_API_PER_MONTH (default: 80)\nWEB2LABS_AUTO_SPEND_MAX_CREATOR_PER_MONTH (default: 400)\n\nWhen a tool returns spend_confirmation_required, ask the user and re-run with confirm_spend: true.\n\nURL Input\n\nIf file_path is a URL, use local yt-dlp download first. If yt-dlp is missing, provide install help:\n\nmacOS: brew install yt-dlp\nLinux: pip install yt-dlp\nWindows: winget install yt-dlp\n\nOnly process content the user has rights to edit.\n\nWebhooks\nstudio_upload accepts webhook_url and optional webhook_secret.\nIf provided, Studio sends project.completed to the callback URL when rendering finishes.\nSigned callbacks include:\nX-Web2Labs-Webhook-Timestamp\nX-Web2Labs-Webhook-Signature (sha256=<hmac(timestamp + \".\" + payload)>)\nWith webhook enabled, polling is optional and can be skipped for fire-and-forget automation.\nBatch Workflow\n\nBefore batch processing, confirm total credit cost: \"This will process N videos and consume N credits. Proceed?\"\n\nGuardrails\nAlways call studio_credits before upload.\nNever expose API keys in logs or messages.\nRespect spend policy and confirmation requirements before spending credits.\nRemind users about retention after download.\nSuggest presets when users do not provide settings.\nFor URLs, verify yt-dlp availability before proceeding.\nRespect user rights and content ownership.\nFor priority: \"rush\", explicitly confirm \"2 API credits instead of 1\" before proceeding.\nFor watch mode, only monitor channels the user owns or has permission to process.\nUpsell Moments\nAfter successful processing: suggest thumbnails if missing.\nWhen API credits are low (<=2): use studio_pricing and provide purchase links.\nWhen subscription monthly usage is above 80%: suggest API credit bundles.\nAfter first project: suggest thumbnails, cinematic preset, and brand consistency features.\nAfter first project: mention referral program — \"Share your referral link to earn 5 free credits per signup!\"\nBrand Kit Workflow\nIf user asks to set brand colors, fonts, or identity, call studio_brand with action: \"update\".\nUse snake_case fields for convenience (primary_color, secondary_color, channel_name) or updates object.\nConfirm that changes apply to future thumbnail/subtitle outputs.\nIf user shares a YouTube/Twitch profile URL, offer studio_brand_import first, then review/apply suggestions.\nAssets Workflow\nUse studio_assets with:\naction: \"list\" to inspect available intro/outro/watermark assets.\naction: \"upload\" + asset_type + file_path to add reusable media.\naction: \"delete\" + asset_type to remove old assets.\nIf user says \"use this intro/outro on future videos\", upload via studio_assets first, then ensure brand defaults are configured with studio_brand.\nWatch Mode\n\nWatch mode monitors YouTube or Twitch channels for new videos and auto-processes them through Studio.\n\nSetting up a watcher\nRun studio_watch with action: \"add\" and the channel url (e.g. https://youtube.com/@username).\nOptionally set preset, max_duration_minutes, max_daily_uploads, and poll_interval_minutes.\nThe watcher is saved and ready. Run studio_watch with action: \"check\" to poll for new videos.\n\nOnly channel/user URLs are accepted, not individual video URLs.\n\nHow check works\n\naction: \"check\" does a single poll cycle:\n\nLists recent videos from each enabled watcher's channel via yt-dlp.\nFilters out already-processed videos (tracked by video ID).\nFilters out videos exceeding max_duration_minutes.\nRespects the max_daily_uploads cap per watcher.\nDownloads and uploads each new video to Studio with the watcher's preset.\nReturns a summary of what was processed.\n\nPass id to check a specific watcher, or omit to check all enabled watchers.\n\nManaging watchers\naction: \"list\" — show all watchers and their status.\naction: \"status\" with id — detailed status for one watcher.\naction: \"pause\" / action: \"resume\" with id — disable/enable a watcher.\naction: \"remove\" with id — delete a watcher.\nAutomation\n\nRun studio_watch with action: \"check\" on a schedule. Examples:\n\nHave your AI agent call it periodically.\nUse a system cron job: */30 * * * * node /path/to/check-watchers.mjs\nUse a simple loop script with a sleep interval.\nContent rights\n\nOnly watch channels you own or have explicit permission to process. This aligns with the existing guardrail about respecting user rights and content ownership.\n\nEnvironment Variables\nWEB2LABS_API_KEY: API key for authentication.\nWEB2LABS_BEARER_TOKEN: Bearer token for authentication (alternative to API key).\nWEB2LABS_API_ENDPOINT: API endpoint URL (default: https://web2labs.com).\nWEB2LABS_SOCKET_URL: WebSocket server URL for real-time progress (default: same as API endpoint). Override for local dev when the socket server runs on a different port.\nWEB2LABS_SPEND_POLICY: Spend confirmation policy (smart, explicit, auto).\nWEB2LABS_TEST_MODE: Set to true to target the test instance (https://test.web2labs.com). Changes the default API endpoint and enables test-mode behavior.\nWEB2LABS_BASIC_AUTH: HTTP Basic Auth credentials in user:password format. Required when the target instance is behind HTTP Basic Auth (e.g. the test instance).\nSandbox mode\n\nWhen OpenClaw runs in sandbox mode, tool processes execute inside Docker and do not inherit host process.env. Environment variables set via skills.entries.@web2labs/studio.env in ~/.openclaw/openclaw.json are only injected in host mode.\n\nFor sandbox sessions, configure environment variables through the sandbox environment configuration or a custom Docker image. Alternatively, use studio_setup with action: \"save_api_key\" after starting the session — the key is written to a config file inside the container.\n\nTest Mode\n\nTest mode targets the isolated test instance at https://test.web2labs.com. The test instance has its own database, storage, and configuration — nothing affects production.\n\nEnabling test mode\n\nSet these environment variables:\n\nWEB2LABS_TEST_MODE=true\nWEB2LABS_BASIC_AUTH=web2labs:<password>\nWEB2LABS_API_KEY=<test-instance-api-key>\n\n\nWEB2LABS_TEST_MODE=true changes the default API endpoint to https://test.web2labs.com. You can also set WEB2LABS_API_ENDPOINT explicitly to override the URL.\n\nWEB2LABS_BASIC_AUTH provides the HTTP Basic Auth credentials that the test instance's nginx reverse proxy requires on all requests (format: user:password).\n\nGetting a test API key\n\nThe test instance is password-protected at the nginx level, so the magic-link setup flow (send_magic_link / complete_setup) may not complete fully. Instead:\n\nOpen https://test.web2labs.com in a browser and enter the HTTP Basic Auth credentials when prompted.\nCreate an account or log in.\nNavigate to /user/api and generate an API key.\nSave it via studio_setup with action: \"save_api_key\" and api_key: \"<your-key>\", or set WEB2LABS_API_KEY directly.\nTest instance differences\nNo real billing (BILLING_MODE=test), no real emails, no analytics.\nLocal disk storage instead of GCS.\nSeparate database (web2labs_test).\nLower resource limits than production.\nProjects and data are fully isolated from production.\nError Handling\nNetwork timeout: retry up to 3 times with backoff.\n429 rate-limited: wait retryAfter then retry.\nWorker unavailable: surface clear retry guidance.\nInvalid file format: explain supported formats.\nFailed processing: include project_id in support guidance.\nSetup\n\nIf API key is missing, run onboarding with studio_setup:\n\nSend magic link: studio_setup with action: \"send_magic_link\" and email.\nAsk user for the code from email (or auto-read via email skill).\nComplete setup: studio_setup with action: \"complete_setup\", email, and code.\nAPI key is generated and saved to ~/.openclaw/openclaw.json.\n\nIf user already has an API key:\n\nstudio_setup with action: \"save_api_key\" and api_key.\n\nManual config example:\n\n{\n  \"skills\": {\n    \"entries\": {\n      \"@web2labs/studio\": {\n        \"apiKey\": \"w2l_xxxxx\"\n      }\n    }\n  }\n}\n\nFeedback\n\nUse studio_feedback when users want to report:\n\nbug\nsuggestion\nquestion\n\nInclude project_id when applicable.\n\nReferral Program\nstudio_referral: Get the user's referral code/link/stats, or apply a friend's referral code.\n\nEvery user gets a unique referral code (format: STUDIO-XXXX). When someone signs up using a code, both parties get 5 free API credits (60-day expiry).\n\nWhen to mention referrals\nAfter first successful project: \"Want 5 free credits? Share your referral link!\"\nWhen asked about free credits: Explain the referral program.\nDuring onboarding: \"Have a referral code from a friend? Use studio_referral with action: apply.\"\nWhen credits are low: \"You can earn 5 credits per referral — up to 50 total.\"\nHow to use\nGet code/link/stats: studio_referral with action: \"get\".\nApply a friend's code: studio_referral with action: \"apply\" and code: \"STUDIO-XXXX\".\nCodes can only be applied within 24 hours of account creation.\nUsers cannot apply their own code.\nMaximum 50 credits earned per user from referrals (10 referrals)."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/Vinlow/web2labs-studio",
    "publisherUrl": "https://clawhub.ai/Vinlow/web2labs-studio",
    "owner": "Vinlow",
    "version": "1.0.1",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/web2labs-studio",
    "downloadUrl": "https://openagent3.xyz/downloads/web2labs-studio",
    "agentUrl": "https://openagent3.xyz/skills/web2labs-studio/agent",
    "manifestUrl": "https://openagent3.xyz/skills/web2labs-studio/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/web2labs-studio/agent.md"
  }
}