[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6K5E21QEYHCT7Z2HA4AQ804":3,"skill-same:01M6K5E21QEYHCT7Z2HA4AQ804":72},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":42,"linkOnly":43,"markdownContent":44,"markdownBody":45,"frontMatter":46,"refName":50,"commitSha":51,"skillDirectory":52,"forksCount":53,"repositoryHtmlUrl":54,"repositoryHomepageUrl":55,"ownerHtmlUrl":56,"ownerBlogUrl":55,"ownerDescription":57,"updatedAt":58,"install":59,"resources":71},"01M6K5E21QEYHCT7Z2HA4AQ804","setup",null,"One-time setup of image and video generation credentials, verified before use. \"set up my API keys\"","indranilbanerjee\u002Fsocialforge","indranilbanerjee","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1857369?v=4","01M6K5AJ210R87KXT6WF07RC4T","Indranil Banerjee","01M6K5AJ6FXW6Y1CDESBGX191P",43,"MIT","https:\u002F\u002Fgithub.com\u002Findranilbanerjee\u002Fsocialforge\u002Fblob\u002Fmain\u002Fskills\u002Fsetup\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",[5,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41],"up","api keys","verified","keys","my","true","reset","generation","time","fallback","image","use","video generation","Video","api","credentials","SET","status","2026-11-10 10:12:30",false,"---\nname: setup\ndescription: \"One-time setup of image and video generation credentials, verified before use. \\\"set up my API keys\\\"\"\nargument-hint: \"[--image | --video | --fallback | --status | --reset]\"\neffort: low\nuser-invocable: true\n---\n\n# \u002Fsocialforge:setup — API Credential Configuration\n\n> **Script location.** If your host does not set `${CLAUDE_PLUGIN_ROOT}`, the scripts are in this plugin's `scripts\u002F` folder, next to `skills\u002F`. Run them with Python 3.10 or newer: `python`, or `python3` where `python` is not found (macOS, many Linux systems).\n\nOne-time setup that records where each credential lives. A key kept in an environment variable is never written anywhere: setup records the variable name and the scripts read the value each time. See Security Notes for what is stored where.\n\n## Context efficiency\n\nAsset-heavy skill. **Grep before Read** the asset catalog (`${CLAUDE_PLUGIN_DATA}\u002Fsocialforge\u002Fbrands\u002F\u003Cbrand>\u002Fasset-index.json`) — never list the asset directory. Reference generated images \u002F videos by path, not by loading metadata. Brand profile loads once per session.\n\n## What This Does\n\nConfigures two services that SocialForge needs for creative production:\n\n1. **Google Cloud Vertex AI** (required for images) — the image models, resolved at run time from the registry aliases `latest-image-balanced-google` and `latest-image-google`\n2. **WaveSpeed** (required for video) — image-to-video, resolved from the registry alias `latest-video-wavespeed`\n\n## Prerequisites\n\nYour admin provides you with:\n- A **Google Cloud service account JSON file** (for image generation)\n- A **WaveSpeed API key** (for video generation)\n\nIf you are the admin, see the Admin Setup section below.\n\n## How to Run\n\n```\n\u002Fsocialforge:setup\n```\n\n## Interactive Flow\n\n### Step 0: Check Dependencies (nothing installs without your yes)\n\nRun this first. It only REPORTS which packages are present and prints the exact pinned install command for each one that is missing; it installs nothing:\n```bash\npython \"${CLAUDE_PLUGIN_ROOT}\u002Fscripts\u002Finstall_deps.py\"\n```\n\nPackages it checks by default (every version is pinned in `scripts\u002Finstall_deps.py`): Pillow (compositing), google-genai (Vertex AI), wavespeed and imageio-ffmpeg (video), playwright (carousels; its Chromium browser is a large download).\n\nShow the user the list, then ask:\n\n```\nThese packages are missing: \u003Clist>. Install them now with the pinned versions? (yes \u002F no)\n  Playwright's browser (for carousels) is a large download; say so if playwright is on the list.\n```\n\nOnly on an explicit `yes`, run:\n```bash\npython \"${CLAUDE_PLUGIN_ROOT}\u002Fscripts\u002Finstall_deps.py\" --install\n```\nAny other answer: print the pinned commands from the report for the user to run themselves, and continue.\n\nExtra packages are never part of that default and are installed only when the user asks for them by name: HiggsField's client (`--groups higgsfield`), background removal, which fetches model weights on first use (`--groups background-removal`), C2PA signing (`--groups c2pa`), and OS keychain support (`--groups keyring`), which lets a key you type or pipe in be kept in the keychain instead of a plain-text file.\n\n### Step 1: Image Generation (Vertex AI)\n\nCheck if already configured:\n```bash\npython \"${CLAUDE_PLUGIN_ROOT}\u002Fscripts\u002Fcredential_manager.py\" status\n```\n\nIf not configured, ask:\n\n```\nImage Generation Setup (Google Cloud Vertex AI)\n\nDo you have a Google Cloud service account JSON file?\n  Provide the full file path (e.g., C:\\Users\\you\\Downloads\\socialforge-credentials.json)\n\nOr type \"skip\" to configure later (image generation will not work).\n```\n\nWhen user provides the path:\n```bash\npython \"${CLAUDE_PLUGIN_ROOT}\u002Fscripts\u002Fcredential_manager.py\" setup-vertex --json-path \"\u003Cuser-provided-path>\"\n```\n\nThe script records the file's PATH and uses the file where it is; it makes no copy. Tell the user to keep the file there, readable only by them. If the result carries `warnings` about an older SocialForge copy (`gcp-credentials.json`, made before 1.31.0), show it: that copy is no longer used, and deleting it is the user's call.\n\nShow the result. If success:\n```\nImage generation configured.\n  Project: \u003Cproject_id>\n  Service Account: \u003Cemail>\n  Models: resolved at run time from the registry (aliases latest-image-balanced-google, latest-image-google)\n```\n\n### Step 2: Video Generation (WaveSpeed)\n\n```\nVideo Generation Setup (WaveSpeed)\n\nDo you have a WaveSpeed API key?\n  Do NOT paste it here: anything typed into this chat is stored in the conversation transcript.\n  Set it as the environment variable WAVESPEED_API_KEY (in your shell or your host's environment\n  settings) and tell me when it is set.\n\nOr type \"skip\" to configure later (video generation will not work).\n```\n\nWhen the user says it is set, run the command below. The script reads `WAVESPEED_API_KEY` and records only the variable name; the key itself is never written, and it is read from the environment each time a video is made. `--api-key` is refused with exit 2 (a key on the command line lands in shell history and the process table). The script never reads stdin on its own, so with no key it stops at once with exit 2 (`no key: set WAVESPEED_API_KEY, or use --api-key-stdin`) instead of waiting: tell the user the variable is not visible to this shell and ask them to set it where the host can see it.\n\nIf the variable cannot stay set across sessions, the user can store the key once from their own terminal with `--prompt` (a hidden prompt, real terminal only); `--api-key-stdin` reads one line from stdin. A key given either way goes to the OS keychain when `keyring` is installed (`--groups keyring` above), and otherwise to `credentials.json` in plain text, with a warning in the result: show that warning to the user.\n```bash\npython \"${CLAUDE_PLUGIN_ROOT}\u002Fscripts\u002Fcredential_manager.py\" setup-wavespeed\n```\n\nShow the result. If success:\n```\nVideo generation configured.\n  Provider: WaveSpeed (alias latest-video-wavespeed)\n  Models: image-to-video, text-to-video (3-15 seconds)\n```\n\n### Step 2.5: HiggsField (Optional Fallback)\n\n```\nHiggsField Setup (Optional — adds fallback resilience)\n\nDo you have a HiggsField API key and secret?\n  Do NOT paste them here. Set the environment variables HF_API_KEY and HF_API_SECRET and tell me\n  when they are set.\n\nOr type \"skip\" (HiggsField is optional — Vertex AI and WaveSpeed are sufficient).\n```\n\nWhen the user says both are set, run the command below. It reads `HF_API_KEY` and `HF_API_SECRET` and records only the variable names; `--api-key` and `--api-secret` are refused with exit 2. It never reads stdin on its own, so with either missing it stops at once with exit 2. `--api-key-stdin` reads the key from the first stdin line and the secret from the second, and stores them like the WaveSpeed key (keychain, else the file with a warning).\n```bash\npython \"${CLAUDE_PLUGIN_ROOT}\u002Fscripts\u002Fcredential_manager.py\" setup-higgsfield\n```\n\n### Step 3: Summary\n\n```\nSocialForge API Setup Complete\n\n  Image Generation: [configured \u002F not configured]\n    Provider: Google Cloud Vertex AI\n    Project: \u003Cproject_id>\n    Models: registry aliases latest-image-balanced-google, latest-image-google\n\n  Video Generation: [configured \u002F not configured]\n    Provider: WaveSpeed (alias latest-video-wavespeed)\n    Modes: image-to-video, text-to-video\n\n  HiggsField: [configured \u002F skipped]\n    Provider: HiggsField (fallback)\n\n  Credentials recorded. Keys in environment variables are read from the environment each run,\n  so keep those variables set; nothing else needs setting up again.\n\n  Next: \u002Fsocialforge:brand-setup [brand-name] to configure your first brand.\n```\n\n## Arguments\n\n| Argument | Effect |\n|----------|--------|\n| (none) | Run full interactive setup |\n| `--image` | Configure image generation only (Vertex AI) |\n| `--video` | Configure video generation only (WaveSpeed) |\n| `--fallback` | Configure HiggsField fallback only |\n| `--status` | Show current configuration status |\n| `--reset` | Remove all stored credentials and start fresh |\n\n## Admin Setup Guide\n\nIf you are setting up the cloud accounts for your team, follow these detailed guides.\n\n### Google Cloud (Vertex AI — Image Generation)\n\n#### Step 1: Create a Google Cloud Project\n1. Open https:\u002F\u002Fconsole.cloud.google.com\u002F\n2. If you don't have an account, click \"Get started for free\" and follow registration\n3. Click the project dropdown at the top of the page (next to \"Google Cloud\")\n4. Click \"NEW PROJECT\"\n5. Enter a project name (e.g., \"socialforge-production\")\n6. Click \"CREATE\"\n7. Wait for the project to be created (30 seconds), then select it from the dropdown\n\n#### Step 2: Enable Billing\n1. Go to https:\u002F\u002Fconsole.cloud.google.com\u002Fbilling\n2. Click \"LINK A BILLING ACCOUNT\"\n3. If you don't have a billing account, click \"CREATE BILLING ACCOUNT\"\n4. Add a payment method (credit card)\n5. New accounts may come with promotional credits — the console states the current offer and its expiry. This skill does not quote it, because a number stated from memory is wrong the moment the vendor changes it.\n\n#### Step 3: Enable Vertex AI API\n1. Go to https:\u002F\u002Fconsole.cloud.google.com\u002Fapis\u002Flibrary\n2. Search for \"Vertex AI API\"\n3. Click on it, then click \"ENABLE\"\n4. Wait for it to activate (takes a few seconds)\n\n#### Step 4: Create a Service Account\n1. Go to https:\u002F\u002Fconsole.cloud.google.com\u002Fiam-admin\u002Fserviceaccounts\n2. Click \"+ CREATE SERVICE ACCOUNT\"\n3. Service account name: `socialforge-image-gen`\n4. Description: `SocialForge AI image generation`\n5. Click \"CREATE AND CONTINUE\"\n6. In \"Grant this service account access to project\":\n   - Click the \"Select a role\" dropdown\n   - Type \"Vertex AI User\" in the search box\n   - Select \"Vertex AI User\"\n7. Click \"CONTINUE\", then \"DONE\"\n\n#### Step 5: Download the JSON Key File\n1. In the service accounts list, click on `socialforge-image-gen`\n2. Go to the \"KEYS\" tab\n3. Click \"ADD KEY\" then \"Create new key\"\n4. Select \"JSON\" and click \"CREATE\"\n5. A .json file downloads automatically — this is your credential file\n6. Save it somewhere safe on your computer\n\n#### Step 6: Share with Your Team\nShare the downloaded JSON file with your team via:\n- Slack DM (not in a public channel)\n- Email (encrypted if possible)\n- Shared company drive (restricted access)\n\nNEVER commit this file to Git. NEVER share it publicly.\n\n**Cost:** this skill does not state a price. Per-image cost depends on model and resolution and changes without notice, so quoting one here would be a number nobody looked up. Run `python \"${CLAUDE_PLUGIN_ROOT}\u002Fscripts\u002Fprice_book.py\" --action lookup --model \u003Cmodel> --provider \u003Cprovider>`; it returns a recorded price or refuses with the vendor's own pricing URL. All costs go to the admin's billing account.\n\n### WaveSpeed (Video Generation)\n\n#### Step 1: Create a WaveSpeed Account\n1. Open https:\u002F\u002Fwavespeed.ai\n2. Click \"Sign Up\" and create an account\n3. Verify your email\n\n#### Step 2: Add Credits\n1. After logging in, go to your dashboard\n2. Click \"Top Up\" or navigate to billing\n3. Add credits (minimum top-up required to activate API access)\n4. Pricing: read the current per-second rate from the vendor's billing page. This skill deliberately does not quote it — see `price_book.py`, which refuses to quote a price it has not looked up rather than repeating a stale one.\n\n#### Step 3: Create an API Key\n1. Go to https:\u002F\u002Fwavespeed.ai\u002Faccesskey\n2. Click \"Create API Key\"\n3. Copy the key (it's a long string of letters and numbers)\n4. Save it somewhere safe\n\n#### Step 4: Share with Your Team\nShare the API key string with your team via:\n- Slack DM\n- Password manager (recommended)\n- Email (encrypted if possible)\n\nNEVER commit this key to Git or paste it in public forums.\n\n**Cost:** All video generation costs go to the admin's WaveSpeed account. Monitor usage at https:\u002F\u002Fwavespeed.ai\u002Fdashboard\n\n### HiggsField (Optional Fallback — Video + Image)\n\nHiggsField provides additional resilience. If both Vertex AI and WaveSpeed are down, HiggsField can generate images and videos.\n\n#### Step 1: Create a HiggsField Account\n1. Open https:\u002F\u002Fhiggsfield.ai\n2. Click \"Sign Up\" and create an account\n3. Any promotional credit for new accounts is shown at signup; this skill does not quote an amount.\n\n#### Step 2: Get API Credentials\n1. Log in at https:\u002F\u002Fcloud.higgsfield.ai and open the API \u002F Developer section of your dashboard\n2. Create a new API key pair — you'll get an API Key AND an API Secret\n3. Save both values\n\n#### Step 3: Share with Your Team\nShare both the API key AND secret with your team. Both are needed for authentication.\n\n## Security Notes\n\n- `credentials.json` in the plugin data folder (or `~\u002Fsocialforge-workspace\u002F`) records where each credential lives. For a key in an environment variable it holds only the variable name: the key is never written, and the scripts read it from the environment each time.\n- The GCP service-account JSON is used where you keep it: setup records its path and makes no copy. Keep the file there and readable only by you. Setup before 1.31.0 copied it to `gcp-credentials.json`; that copy is no longer used and is reported by `status` until you delete it.\n- A key given through `--api-key-stdin` or `--prompt` goes to the OS keychain (Windows Credential Manager, macOS Keychain, the Secret Service on Linux) when the optional `keyring` package is installed and has a working backend. Without one it is written to `credentials.json` in plain text, and the result and `status` say so.\n- File permissions: on macOS and Linux the files are `chmod 600`. On Windows chmod does nothing useful (it only sets the read-only flag), so setup also runs `icacls \u003Cfile> \u002Finheritance:r \u002Fgrant:r \u003Cyou>:F`, which removes inherited access and leaves only your account. If that fails, the result says so. An administrator of the machine can still read any file.\n- Keys are never taken through the chat or the command line: `--api-key` and `--api-secret` exit 2. Only environment variables, or an explicit `--api-key-stdin` \u002F `--prompt`, are read. A script never reads stdin on its own, so a missing key fails at once instead of hanging the shell.\n- No credentials are committed to git or shared outside the local machine.\n- To revoke access: rotate the service account key in GCP Console or regenerate the WaveSpeed API key.\n","# \u002Fsocialforge:setup — API Credential Configuration\n\n> **Script location.** If your host does not set `${CLAUDE_PLUGIN_ROOT}`, the scripts are in this plugin's `scripts\u002F` folder, next to `skills\u002F`. Run them with Python 3.10 or newer: `python`, or `python3` where `python` is not found (macOS, many Linux systems).\n\nOne-time setup that records where each credential lives. A key kept in an environment variable is never written anywhere: setup records the variable name and the scripts read the value each time. See Security Notes for what is stored where.\n\n## Context efficiency\n\nAsset-heavy skill. **Grep before Read** the asset catalog (`${CLAUDE_PLUGIN_DATA}\u002Fsocialforge\u002Fbrands\u002F\u003Cbrand>\u002Fasset-index.json`) — never list the asset directory. Reference generated images \u002F videos by path, not by loading metadata. Brand profile loads once per session.\n\n## What This Does\n\nConfigures two services that SocialForge needs for creative production:\n\n1. **Google Cloud Vertex AI** (required for images) — the image models, resolved at run time from the registry aliases `latest-image-balanced-google` and `latest-image-google`\n2. **WaveSpeed** (required for video) — image-to-video, resolved from the registry alias `latest-video-wavespeed`\n\n## Prerequisites\n\nYour admin provides you with:\n- A **Google Cloud service account JSON file** (for image generation)\n- A **WaveSpeed API key** (for video generation)\n\nIf you are the admin, see the Admin Setup section below.\n\n## How to Run\n\n```\n\u002Fsocialforge:setup\n```\n\n## Interactive Flow\n\n### Step 0: Check Dependencies (nothing installs without your yes)\n\nRun this first. It only REPORTS which packages are present and prints the exact pinned install command for each one that is missing; it installs nothing:\n```bash\npython \"${CLAUDE_PLUGIN_ROOT}\u002Fscripts\u002Finstall_deps.py\"\n```\n\nPackages it checks by default (every version is pinned in `scripts\u002Finstall_deps.py`): Pillow (compositing), google-genai (Vertex AI), wavespeed and imageio-ffmpeg (video), playwright (carousels; its Chromium browser is a large download).\n\nShow the user the list, then ask:\n\n```\nThese packages are missing: \u003Clist>. Install them now with the pinned versions? (yes \u002F no)\n  Playwright's browser (for carousels) is a large download; say so if playwright is on the list.\n```\n\nOnly on an explicit `yes`, run:\n```bash\npython \"${CLAUDE_PLUGIN_ROOT}\u002Fscripts\u002Finstall_deps.py\" --install\n```\nAny other answer: print the pinned commands from the report for the user to run themselves, and continue.\n\nExtra packages are never part of that default and are installed only when the user asks for them by name: HiggsField's client (`--groups higgsfield`), background removal, which fetches model weights on first use (`--groups background-removal`), C2PA signing (`--groups c2pa`), and OS keychain support (`--groups keyring`), which lets a key you type or pipe in be kept in the keychain instead of a plain-text file.\n\n### Step 1: Image Generation (Vertex AI)\n\nCheck if already configured:\n```bash\npython \"${CLAUDE_PLUGIN_ROOT}\u002Fscripts\u002Fcredential_manager.py\" status\n```\n\nIf not configured, ask:\n\n```\nImage Generation Setup (Google Cloud Vertex AI)\n\nDo you have a Google Cloud service account JSON file?\n  Provide the full file path (e.g., C:\\Users\\you\\Downloads\\socialforge-credentials.json)\n\nOr type \"skip\" to configure later (image generation will not work).\n```\n\nWhen user provides the path:\n```bash\npython \"${CLAUDE_PLUGIN_ROOT}\u002Fscripts\u002Fcredential_manager.py\" setup-vertex --json-path \"\u003Cuser-provided-path>\"\n```\n\nThe script records the file's PATH and uses the file where it is; it makes no copy. Tell the user to keep the file there, readable only by them. If the result carries `warnings` about an older SocialForge copy (`gcp-credentials.json`, made before 1.31.0), show it: that copy is no longer used, and deleting it is the user's call.\n\nShow the result. If success:\n```\nImage generation configured.\n  Project: \u003Cproject_id>\n  Service Account: \u003Cemail>\n  Models: resolved at run time from the registry (aliases latest-image-balanced-google, latest-image-google)\n```\n\n### Step 2: Video Generation (WaveSpeed)\n\n```\nVideo Generation Setup (WaveSpeed)\n\nDo you have a WaveSpeed API key?\n  Do NOT paste it here: anything typed into this chat is stored in the conversation transcript.\n  Set it as the environment variable WAVESPEED_API_KEY (in your shell or your host's environment\n  settings) and tell me when it is set.\n\nOr type \"skip\" to configure later (video generation will not work).\n```\n\nWhen the user says it is set, run the command below. The script reads `WAVESPEED_API_KEY` and records only the variable name; the key itself is never written, and it is read from the environment each time a video is made. `--api-key` is refused with exit 2 (a key on the command line lands in shell history and the process table). The script never reads stdin on its own, so with no key it stops at once with exit 2 (`no key: set WAVESPEED_API_KEY, or use --api-key-stdin`) instead of waiting: tell the user the variable is not visible to this shell and ask them to set it where the host can see it.\n\nIf the variable cannot stay set across sessions, the user can store the key once from their own terminal with `--prompt` (a hidden prompt, real terminal only); `--api-key-stdin` reads one line from stdin. A key given either way goes to the OS keychain when `keyring` is installed (`--groups keyring` above), and otherwise to `credentials.json` in plain text, with a warning in the result: show that warning to the user.\n```bash\npython \"${CLAUDE_PLUGIN_ROOT}\u002Fscripts\u002Fcredential_manager.py\" setup-wavespeed\n```\n\nShow the result. If success:\n```\nVideo generation configured.\n  Provider: WaveSpeed (alias latest-video-wavespeed)\n  Models: image-to-video, text-to-video (3-15 seconds)\n```\n\n### Step 2.5: HiggsField (Optional Fallback)\n\n```\nHiggsField Setup (Optional — adds fallback resilience)\n\nDo you have a HiggsField API key and secret?\n  Do NOT paste them here. Set the environment variables HF_API_KEY and HF_API_SECRET and tell me\n  when they are set.\n\nOr type \"skip\" (HiggsField is optional — Vertex AI and WaveSpeed are sufficient).\n```\n\nWhen the user says both are set, run the command below. It reads `HF_API_KEY` and `HF_API_SECRET` and records only the variable names; `--api-key` and `--api-secret` are refused with exit 2. It never reads stdin on its own, so with either missing it stops at once with exit 2. `--api-key-stdin` reads the key from the first stdin line and the secret from the second, and stores them like the WaveSpeed key (keychain, else the file with a warning).\n```bash\npython \"${CLAUDE_PLUGIN_ROOT}\u002Fscripts\u002Fcredential_manager.py\" setup-higgsfield\n```\n\n### Step 3: Summary\n\n```\nSocialForge API Setup Complete\n\n  Image Generation: [configured \u002F not configured]\n    Provider: Google Cloud Vertex AI\n    Project: \u003Cproject_id>\n    Models: registry aliases latest-image-balanced-google, latest-image-google\n\n  Video Generation: [configured \u002F not configured]\n    Provider: WaveSpeed (alias latest-video-wavespeed)\n    Modes: image-to-video, text-to-video\n\n  HiggsField: [configured \u002F skipped]\n    Provider: HiggsField (fallback)\n\n  Credentials recorded. Keys in environment variables are read from the environment each run,\n  so keep those variables set; nothing else needs setting up again.\n\n  Next: \u002Fsocialforge:brand-setup [brand-name] to configure your first brand.\n```\n\n## Arguments\n\n| Argument | Effect |\n|----------|--------|\n| (none) | Run full interactive setup |\n| `--image` | Configure image generation only (Vertex AI) |\n| `--video` | Configure video generation only (WaveSpeed) |\n| `--fallback` | Configure HiggsField fallback only |\n| `--status` | Show current configuration status |\n| `--reset` | Remove all stored credentials and start fresh |\n\n## Admin Setup Guide\n\nIf you are setting up the cloud accounts for your team, follow these detailed guides.\n\n### Google Cloud (Vertex AI — Image Generation)\n\n#### Step 1: Create a Google Cloud Project\n1. Open https:\u002F\u002Fconsole.cloud.google.com\u002F\n2. If you don't have an account, click \"Get started for free\" and follow registration\n3. Click the project dropdown at the top of the page (next to \"Google Cloud\")\n4. Click \"NEW PROJECT\"\n5. Enter a project name (e.g., \"socialforge-production\")\n6. Click \"CREATE\"\n7. Wait for the project to be created (30 seconds), then select it from the dropdown\n\n#### Step 2: Enable Billing\n1. Go to https:\u002F\u002Fconsole.cloud.google.com\u002Fbilling\n2. Click \"LINK A BILLING ACCOUNT\"\n3. If you don't have a billing account, click \"CREATE BILLING ACCOUNT\"\n4. Add a payment method (credit card)\n5. New accounts may come with promotional credits — the console states the current offer and its expiry. This skill does not quote it, because a number stated from memory is wrong the moment the vendor changes it.\n\n#### Step 3: Enable Vertex AI API\n1. Go to https:\u002F\u002Fconsole.cloud.google.com\u002Fapis\u002Flibrary\n2. Search for \"Vertex AI API\"\n3. Click on it, then click \"ENABLE\"\n4. Wait for it to activate (takes a few seconds)\n\n#### Step 4: Create a Service Account\n1. Go to https:\u002F\u002Fconsole.cloud.google.com\u002Fiam-admin\u002Fserviceaccounts\n2. Click \"+ CREATE SERVICE ACCOUNT\"\n3. Service account name: `socialforge-image-gen`\n4. Description: `SocialForge AI image generation`\n5. Click \"CREATE AND CONTINUE\"\n6. In \"Grant this service account access to project\":\n   - Click the \"Select a role\" dropdown\n   - Type \"Vertex AI User\" in the search box\n   - Select \"Vertex AI User\"\n7. Click \"CONTINUE\", then \"DONE\"\n\n#### Step 5: Download the JSON Key File\n1. In the service accounts list, click on `socialforge-image-gen`\n2. Go to the \"KEYS\" tab\n3. Click \"ADD KEY\" then \"Create new key\"\n4. Select \"JSON\" and click \"CREATE\"\n5. A .json file downloads automatically — this is your credential file\n6. Save it somewhere safe on your computer\n\n#### Step 6: Share with Your Team\nShare the downloaded JSON file with your team via:\n- Slack DM (not in a public channel)\n- Email (encrypted if possible)\n- Shared company drive (restricted access)\n\nNEVER commit this file to Git. NEVER share it publicly.\n\n**Cost:** this skill does not state a price. Per-image cost depends on model and resolution and changes without notice, so quoting one here would be a number nobody looked up. Run `python \"${CLAUDE_PLUGIN_ROOT}\u002Fscripts\u002Fprice_book.py\" --action lookup --model \u003Cmodel> --provider \u003Cprovider>`; it returns a recorded price or refuses with the vendor's own pricing URL. All costs go to the admin's billing account.\n\n### WaveSpeed (Video Generation)\n\n#### Step 1: Create a WaveSpeed Account\n1. Open https:\u002F\u002Fwavespeed.ai\n2. Click \"Sign Up\" and create an account\n3. Verify your email\n\n#### Step 2: Add Credits\n1. After logging in, go to your dashboard\n2. Click \"Top Up\" or navigate to billing\n3. Add credits (minimum top-up required to activate API access)\n4. Pricing: read the current per-second rate from the vendor's billing page. This skill deliberately does not quote it — see `price_book.py`, which refuses to quote a price it has not looked up rather than repeating a stale one.\n\n#### Step 3: Create an API Key\n1. Go to https:\u002F\u002Fwavespeed.ai\u002Faccesskey\n2. Click \"Create API Key\"\n3. Copy the key (it's a long string of letters and numbers)\n4. Save it somewhere safe\n\n#### Step 4: Share with Your Team\nShare the API key string with your team via:\n- Slack DM\n- Password manager (recommended)\n- Email (encrypted if possible)\n\nNEVER commit this key to Git or paste it in public forums.\n\n**Cost:** All video generation costs go to the admin's WaveSpeed account. Monitor usage at https:\u002F\u002Fwavespeed.ai\u002Fdashboard\n\n### HiggsField (Optional Fallback — Video + Image)\n\nHiggsField provides additional resilience. If both Vertex AI and WaveSpeed are down, HiggsField can generate images and videos.\n\n#### Step 1: Create a HiggsField Account\n1. Open https:\u002F\u002Fhiggsfield.ai\n2. Click \"Sign Up\" and create an account\n3. Any promotional credit for new accounts is shown at signup; this skill does not quote an amount.\n\n#### Step 2: Get API Credentials\n1. Log in at https:\u002F\u002Fcloud.higgsfield.ai and open the API \u002F Developer section of your dashboard\n2. Create a new API key pair — you'll get an API Key AND an API Secret\n3. Save both values\n\n#### Step 3: Share with Your Team\nShare both the API key AND secret with your team. Both are needed for authentication.\n\n## Security Notes\n\n- `credentials.json` in the plugin data folder (or `~\u002Fsocialforge-workspace\u002F`) records where each credential lives. For a key in an environment variable it holds only the variable name: the key is never written, and the scripts read it from the environment each time.\n- The GCP service-account JSON is used where you keep it: setup records its path and makes no copy. Keep the file there and readable only by you. Setup before 1.31.0 copied it to `gcp-credentials.json`; that copy is no longer used and is reported by `status` until you delete it.\n- A key given through `--api-key-stdin` or `--prompt` goes to the OS keychain (Windows Credential Manager, macOS Keychain, the Secret Service on Linux) when the optional `keyring` package is installed and has a working backend. Without one it is written to `credentials.json` in plain text, and the result and `status` say so.\n- File permissions: on macOS and Linux the files are `chmod 600`. On Windows chmod does nothing useful (it only sets the read-only flag), so setup also runs `icacls \u003Cfile> \u002Finheritance:r \u002Fgrant:r \u003Cyou>:F`, which removes inherited access and leaves only your account. If that fails, the result says so. An administrator of the machine can still read any file.\n- Keys are never taken through the chat or the command line: `--api-key` and `--api-secret` exit 2. Only environment variables, or an explicit `--api-key-stdin` \u002F `--prompt`, are read. A script never reads stdin on its own, so a missing key fails at once instead of hanging the shell.\n- No credentials are committed to git or shared outside the local machine.\n- To revoke access: rotate the service account key in GCP Console or regenerate the WaveSpeed API key.\n",{"name":5,"effort":47,"description":7,"argument-hint":48,"user-invocable":49},"low","[--image | --video | --fallback | --status | --reset]",true,"main","8a9265fce82b93b728230eab5cf054480f5d6cf2","skills\u002Fsetup",9,"https:\u002F\u002Fgithub.com\u002Findranilbanerjee\u002Fsocialforge","https:\u002F\u002Findranil.in","https:\u002F\u002Fgithub.com\u002Findranilbanerjee","Builder across trustworthy AI, agentic systems, and marketing engineering. Security roots; focused on human capability amplified by software.","2026-11-08 01:03:55",{"source":8,"skillName":5,"commands":60,"prompt":70,"zipAvailable":49},[61,64,67],{"tool":62,"command":63},"npx","npx skills add indranilbanerjee\u002Fsocialforge --skill setup",{"tool":65,"command":66},"bunx","bunx skills add indranilbanerjee\u002Fsocialforge --skill setup",{"tool":68,"command":69},"pnpm","pnpm dlx skills add indranilbanerjee\u002Fsocialforge --skill setup","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Findranilbanerjee\u002Fsocialforge\u002Fblob\u002Fmain\u002Fskills\u002Fsetup\u002FSKILL.md",[],[73,98,124,142,172,186],{"skillNo":74,"name":75,"nameZh":6,"description":76,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":82,"publishedAt":42},"01M6K5DWRWPF1ZHZ93VE8Z1NB4","research-month","Turn supplied comment exports and competitor ads into a what's-working brief before planning a month. \"analyse these competitor ads and comments\"","https:\u002F\u002Fgithub.com\u002Findranilbanerjee\u002Fsocialforge\u002Fblob\u002Fmain\u002Fskills\u002Fresearch-month\u002FSKILL.md",[79],{"categoryNo":80,"categoryName":81,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000021","资料检索与研究",[83,84,85,86,29,87,88,89,90,91,92,93,94,95,96,97],"research month","research","brief","high","posts","comments","mm","name","export","brand","text","ads","csv","planning","screenshots",{"skillNo":99,"name":100,"nameZh":6,"description":101,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":102,"categories":103,"keywords":107,"publishedAt":42},"01M6K5DQ47966ZG9N916VA7Y68","render-carousels","Render multi-slide carousels from HTML templates into platform-ready images or PDF. \"build the carousel slides\"","https:\u002F\u002Fgithub.com\u002Findranilbanerjee\u002Fsocialforge\u002Fblob\u002Fmain\u002Fskills\u002Frender-carousels\u002FSKILL.md",[104],{"categoryNo":105,"categoryName":106,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000002","文档处理",[108,109,110,111,112,113,114,115,116,117,118,86,29,119,120,121,122,123],"render","render carousels","build","images","ready","html","template","slides","templates","PDF","platform","carousel","multi","post","id","type",{"skillNo":125,"name":126,"nameZh":6,"description":127,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":128,"categories":129,"keywords":130,"publishedAt":42},"01M6K5DHDFMZAK4BN2QFEVM614","price-check","Price a generation run from live provider rates before any spend. \"how much will this cost\"","https:\u002F\u002Fgithub.com\u002Findranilbanerjee\u002Fsocialforge\u002Fblob\u002Fmain\u002Fskills\u002Fprice-check\u002FSKILL.md",[],[131,132,133,31,134,135,90,136,122,29,137,138,139,140,141],"price check","price","check","provider","batch","live","compare","model","how","run","cost",{"skillNo":143,"name":144,"nameZh":6,"description":145,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":146,"categories":147,"keywords":157,"publishedAt":42},"01M6K5DDGBCGTN4SBEHZD5G9H8","parse-calendar","Parse a content calendar or plan from DOCX, XLSX, Notion or pasted text into structured posts. \"load this month's calendar\"","https:\u002F\u002Fgithub.com\u002Findranilbanerjee\u002Fsocialforge\u002Fblob\u002Fmain\u002Fskills\u002Fparse-calendar\u002FSKILL.md",[148,149,152],{"categoryNo":105,"categoryName":106,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":150,"categoryName":151,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000004","电子表格",{"categoryNo":153,"categoryName":154,"taxonomyType":155,"taxonomyTypeDesc":156},"01JBSEEDCAT000000000000034","行政与办公人员","PROFESSION","适用职业",[158,159,160,161,162,29,163,87,164,165,93,166,167,168,169,170,171],"calendar","parse calendar","content calendar","path","load","paste","URL","structured","plan","file","content","notion","xlsx","docx",{"skillNo":173,"name":174,"nameZh":6,"description":175,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":176,"categories":177,"keywords":178,"publishedAt":42},"01M6K5D9NZ6QEP1F5M9P8EXM7E","model-check","Find the best current model for a capability from the live catalogue and record its source. \"which model should we use\"","https:\u002F\u002Fgithub.com\u002Findranilbanerjee\u002Fsocialforge\u002Fblob\u002Fmain\u002Fskills\u002Fmodel-check\u002FSKILL.md",[],[179,133,138,29,180,90,136,181,134,35,182,183,184,185],"model check","kind","record","find","which","source","for",{"skillNo":187,"name":188,"nameZh":6,"description":189,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":190,"categories":191,"keywords":198,"publishedAt":42},"01M6K5D57PFJBAT97Y85HMR0PQ","match-assets","Match indexed brand assets to calendar posts and assign each a creative mode. \"which photo goes with which post\"","https:\u002F\u002Fgithub.com\u002Findranilbanerjee\u002Fsocialforge\u002Fblob\u002Fmain\u002Fskills\u002Fmatch-assets\u002FSKILL.md",[192,195],{"categoryNo":193,"categoryName":194,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":196,"categoryName":197,"taxonomyType":155,"taxonomyTypeDesc":156},"01JBSEEDCAT000000000000032","设计师",[199,200,201,183,86,202,29,203,87,204,89,121,90,158,205,92],"match assets","match","assets","mode","goes","with","creative"]