[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6F6ED6K5S44HCVMDF5JBAW1":3,"skill-same:01M6F6ED6K5S44HCVMDF5JBAW1":87},{"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":31,"publishedAt":52,"linkOnly":53,"markdownContent":54,"markdownBody":55,"frontMatter":56,"refName":64,"commitSha":65,"skillDirectory":66,"forksCount":67,"repositoryHtmlUrl":68,"repositoryHomepageUrl":69,"ownerHtmlUrl":70,"ownerBlogUrl":6,"ownerDescription":71,"updatedAt":72,"install":73,"resources":86},"01M6F6ED6K5S44HCVMDF5JBAW1","adobe-cost-tuning",null,"Optimize Adobe API costs across Firefly Services (generative credits),\nPDF Services (document transactions), and Photoshop\u002FLightroom APIs.\nUse when analyzing Adobe billing, reducing API costs,\nor implementing usage monitoring and budget alerts.\nTrigger with phrases like \"adobe cost\", \"adobe billing\", \"adobe credits\",\n\"reduce adobe costs\", \"adobe pricing\", \"adobe budget\".","ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",66,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fadobe-cost-tuning\u002FSKILL.md",[18,23,28],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000002","文档处理","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",{"categoryNo":29,"categoryName":30,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000040","财务",[32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51],"adobe cost tuning","adobe","tuning","cost","read","billing","io","alerts","across","optimize","credits","PDF","transactions","api","Budget","analyzing","monitoring","code","pricing","design","2026-11-10 10:12:30",false,"---\nname: adobe-cost-tuning\ndescription: |\n  Optimize Adobe API costs across Firefly Services (generative credits),\n  PDF Services (document transactions), and Photoshop\u002FLightroom APIs.\n  Use when analyzing Adobe billing, reducing API costs,\n  or implementing usage monitoring and budget alerts.\n  Trigger with phrases like \"adobe cost\", \"adobe billing\", \"adobe credits\",\n  \"reduce adobe costs\", \"adobe pricing\", \"adobe budget\".\nallowed-tools: Read, Grep\nversion: 1.0.0\nlicense: MIT\nauthor: Jeremy Longshore \u003Cjeremy@intentsolutions.io>\ntags: [saas, design, adobe]\ncompatible-with: claude-code\n---\n\n# Adobe Cost Tuning\n\n## Overview\n\nOptimize costs across Adobe's consumption-based APIs. Each API family has different pricing models: Firefly uses generative credits, PDF Services uses document transactions, and Photoshop\u002FLightroom use API call credits.\n\n## Prerequisites\n\n- Access to Adobe Admin Console billing (https:\u002F\u002Fadminconsole.adobe.com)\n- Understanding of current API usage patterns\n- Monitoring infrastructure for usage tracking\n\n## Instructions\n\n### Step 1: Understand Adobe API Pricing Models\n\n| API | Free Tier | Paid Unit | Key Limit |\n|-----|-----------|-----------|-----------|\n| **PDF Services** | 500 tx\u002Fmonth | Document Transaction | Per-page for extract, per-file for create |\n| **Firefly API** | Trial credits | Generative Credit | 1 credit per image generated |\n| **Photoshop API** | Trial credits | API Credit | 1 credit per operation (cutout, actions, etc.) |\n| **Lightroom API** | Trial credits | API Credit | 1 credit per auto-edit |\n| **I\u002FO Events** | Included | Free with entitlement | 3,000 events\u002F5sec rate limit |\n| **Document Generation** | Part of PDF Services | Document Transaction | Per-document generated |\n\n### Step 2: Track Usage per API\n\n```typescript\n\u002F\u002F src\u002Fadobe\u002Fusage-tracker.ts\ninterface ApiUsageEntry {\n  api: 'firefly' | 'pdf-services' | 'photoshop' | 'lightroom';\n  operation: string;\n  timestamp: Date;\n  durationMs: number;\n  creditsUsed: number;\n}\n\nclass AdobeUsageTracker {\n  private entries: ApiUsageEntry[] = [];\n\n  record(entry: Omit\u003CApiUsageEntry, 'timestamp'>): void {\n    this.entries.push({ ...entry, timestamp: new Date() });\n  }\n\n  getMonthlySummary(): Record\u003Cstring, { calls: number; credits: number }> {\n    const now = new Date();\n    const monthStart = new Date(now.getFullYear(), now.getMonth(), 1);\n\n    const monthly = this.entries.filter(e => e.timestamp >= monthStart);\n\n    return monthly.reduce((acc, entry) => {\n      const key = entry.api;\n      if (!acc[key]) acc[key] = { calls: 0, credits: 0 };\n      acc[key].calls++;\n      acc[key].credits += entry.creditsUsed;\n      return acc;\n    }, {} as Record\u003Cstring, { calls: number; credits: number }>);\n  }\n\n  checkBudget(api: string, monthlyLimit: number): { remaining: number; warning: boolean } {\n    const summary = this.getMonthlySummary();\n    const used = summary[api]?.credits || 0;\n    const remaining = monthlyLimit - used;\n    return { remaining, warning: remaining \u003C monthlyLimit * 0.2 };\n  }\n}\n```\n\n### Step 3: Cost Reduction Strategies\n\n**Strategy 1: Cache Firefly outputs by prompt hash**\n```typescript\nimport crypto from 'crypto';\n\nfunction promptHash(prompt: string, size: { width: number; height: number }): string {\n  return crypto.createHash('sha256')\n    .update(`${prompt}:${size.width}x${size.height}`)\n    .digest('hex')\n    .slice(0, 16);\n}\n\n\u002F\u002F Before generating, check if identical prompt was already run\nconst hash = promptHash(prompt, { width: 1024, height: 1024 });\nconst cached = await cache.get(`firefly:${hash}`);\nif (cached) return cached; \u002F\u002F Saves 1 generative credit\n```\n\n**Strategy 2: Minimize PDF Services transactions**\n```typescript\n\u002F\u002F EXPENSIVE: Extract + Create + Merge = 3 transactions\nawait extractPdf(input);\nawait createPdf(html);\nawait mergePdfs([pdf1, pdf2]);\n\n\u002F\u002F CHEAPER: Combine operations where possible\n\u002F\u002F Use Document Generation API (1 transaction) instead of\n\u002F\u002F creating PDF then merging\nawait generateDocument(template, data); \u002F\u002F 1 transaction\n```\n\n**Strategy 3: Right-size Firefly image dimensions**\n```typescript\n\u002F\u002F Same credit cost but different use cases:\n\u002F\u002F - Thumbnails: 512x512 (same 1 credit, faster generation)\n\u002F\u002F - Social media: 1024x1024\n\u002F\u002F - Print: 2048x2048 (same 1 credit, slower generation)\n\u002F\u002F Generate at the size you actually need — don't upscale unnecessarily\n```\n\n**Strategy 4: Use Photoshop batch actions**\n```typescript\n\u002F\u002F EXPENSIVE: 5 separate API calls = 5 credits\nawait removeBackground(image1);\nawait removeBackground(image2);\n\u002F\u002F ...\n\n\u002F\u002F CHEAPER: Photoshop Actions can chain operations\n\u002F\u002F Record an action that does: remove bg + resize + add watermark\n\u002F\u002F Run it once per image = 1 credit for all 3 operations\nawait runPhotoshopAction(image, actionFile);\n```\n\n### Step 4: Budget Alert System\n\n```typescript\n\u002F\u002F Check PDF Services free tier monthly limit\nconst pdfTracker = new AdobeUsageTracker();\n\n\u002F\u002F Wrap PDF Services calls with tracking\nasync function trackedPdfExtract(pdfPath: string) {\n  const budget = pdfTracker.checkBudget('pdf-services', 500); \u002F\u002F Free tier\n\n  if (budget.remaining \u003C= 0) {\n    throw new Error('PDF Services monthly quota exhausted. Upgrade or wait for reset.');\n  }\n\n  if (budget.warning) {\n    console.warn(`PDF Services: only ${budget.remaining} transactions remaining this month`);\n    \u002F\u002F Send alert to Slack\u002Femail\n  }\n\n  const result = await extractPdfContent(pdfPath);\n  pdfTracker.record({\n    api: 'pdf-services',\n    operation: 'extract',\n    durationMs: 0,\n    creditsUsed: 1,\n  });\n\n  return result;\n}\n```\n\n### Step 5: Cost Dashboard Query\n\n```sql\n-- If tracking usage in your database\nSELECT\n  api,\n  operation,\n  DATE_TRUNC('day', timestamp) as date,\n  COUNT(*) as calls,\n  SUM(credits_used) as credits,\n  AVG(duration_ms) as avg_latency_ms\nFROM adobe_api_usage\nWHERE timestamp >= DATE_TRUNC('month', CURRENT_DATE)\nGROUP BY 1, 2, 3\nORDER BY credits DESC;\n```\n\n## Output\n\n- Per-API usage tracking with credit consumption\n- Budget alerts at 80% threshold\n- Caching to prevent duplicate Firefly credit charges\n- Operation batching for Photoshop workflows\n- Monthly cost dashboard query\n\n## Error Handling\n\n| Issue | Cause | Solution |\n|-------|-------|----------|\n| Unexpected charges | Untracked batch jobs | Wrap all calls with usage tracker |\n| Free tier exceeded | No budget alerts | Implement 80% warning threshold |\n| High Firefly costs | Duplicate prompts | Cache by prompt hash |\n| PDF overage | Unnecessary re-extractions | Cache extraction results |\n\n## Resources\n\n- [Adobe PDF Services Pricing](https:\u002F\u002Fdeveloper.adobe.com\u002Fdocument-services\u002Fpricing\u002Fmain\u002F)\n- [Firefly Services Documentation](https:\u002F\u002Fdeveloper.adobe.com\u002Ffirefly-services\u002Fdocs\u002Fguides\u002F)\n- [Adobe Admin Console](https:\u002F\u002Fadminconsole.adobe.com)\n\n## Next Steps\n\nFor architecture patterns, see `adobe-reference-architecture`.\n\n","# Adobe Cost Tuning\n\n## Overview\n\nOptimize costs across Adobe's consumption-based APIs. Each API family has different pricing models: Firefly uses generative credits, PDF Services uses document transactions, and Photoshop\u002FLightroom use API call credits.\n\n## Prerequisites\n\n- Access to Adobe Admin Console billing (https:\u002F\u002Fadminconsole.adobe.com)\n- Understanding of current API usage patterns\n- Monitoring infrastructure for usage tracking\n\n## Instructions\n\n### Step 1: Understand Adobe API Pricing Models\n\n| API | Free Tier | Paid Unit | Key Limit |\n|-----|-----------|-----------|-----------|\n| **PDF Services** | 500 tx\u002Fmonth | Document Transaction | Per-page for extract, per-file for create |\n| **Firefly API** | Trial credits | Generative Credit | 1 credit per image generated |\n| **Photoshop API** | Trial credits | API Credit | 1 credit per operation (cutout, actions, etc.) |\n| **Lightroom API** | Trial credits | API Credit | 1 credit per auto-edit |\n| **I\u002FO Events** | Included | Free with entitlement | 3,000 events\u002F5sec rate limit |\n| **Document Generation** | Part of PDF Services | Document Transaction | Per-document generated |\n\n### Step 2: Track Usage per API\n\n```typescript\n\u002F\u002F src\u002Fadobe\u002Fusage-tracker.ts\ninterface ApiUsageEntry {\n  api: 'firefly' | 'pdf-services' | 'photoshop' | 'lightroom';\n  operation: string;\n  timestamp: Date;\n  durationMs: number;\n  creditsUsed: number;\n}\n\nclass AdobeUsageTracker {\n  private entries: ApiUsageEntry[] = [];\n\n  record(entry: Omit\u003CApiUsageEntry, 'timestamp'>): void {\n    this.entries.push({ ...entry, timestamp: new Date() });\n  }\n\n  getMonthlySummary(): Record\u003Cstring, { calls: number; credits: number }> {\n    const now = new Date();\n    const monthStart = new Date(now.getFullYear(), now.getMonth(), 1);\n\n    const monthly = this.entries.filter(e => e.timestamp >= monthStart);\n\n    return monthly.reduce((acc, entry) => {\n      const key = entry.api;\n      if (!acc[key]) acc[key] = { calls: 0, credits: 0 };\n      acc[key].calls++;\n      acc[key].credits += entry.creditsUsed;\n      return acc;\n    }, {} as Record\u003Cstring, { calls: number; credits: number }>);\n  }\n\n  checkBudget(api: string, monthlyLimit: number): { remaining: number; warning: boolean } {\n    const summary = this.getMonthlySummary();\n    const used = summary[api]?.credits || 0;\n    const remaining = monthlyLimit - used;\n    return { remaining, warning: remaining \u003C monthlyLimit * 0.2 };\n  }\n}\n```\n\n### Step 3: Cost Reduction Strategies\n\n**Strategy 1: Cache Firefly outputs by prompt hash**\n```typescript\nimport crypto from 'crypto';\n\nfunction promptHash(prompt: string, size: { width: number; height: number }): string {\n  return crypto.createHash('sha256')\n    .update(`${prompt}:${size.width}x${size.height}`)\n    .digest('hex')\n    .slice(0, 16);\n}\n\n\u002F\u002F Before generating, check if identical prompt was already run\nconst hash = promptHash(prompt, { width: 1024, height: 1024 });\nconst cached = await cache.get(`firefly:${hash}`);\nif (cached) return cached; \u002F\u002F Saves 1 generative credit\n```\n\n**Strategy 2: Minimize PDF Services transactions**\n```typescript\n\u002F\u002F EXPENSIVE: Extract + Create + Merge = 3 transactions\nawait extractPdf(input);\nawait createPdf(html);\nawait mergePdfs([pdf1, pdf2]);\n\n\u002F\u002F CHEAPER: Combine operations where possible\n\u002F\u002F Use Document Generation API (1 transaction) instead of\n\u002F\u002F creating PDF then merging\nawait generateDocument(template, data); \u002F\u002F 1 transaction\n```\n\n**Strategy 3: Right-size Firefly image dimensions**\n```typescript\n\u002F\u002F Same credit cost but different use cases:\n\u002F\u002F - Thumbnails: 512x512 (same 1 credit, faster generation)\n\u002F\u002F - Social media: 1024x1024\n\u002F\u002F - Print: 2048x2048 (same 1 credit, slower generation)\n\u002F\u002F Generate at the size you actually need — don't upscale unnecessarily\n```\n\n**Strategy 4: Use Photoshop batch actions**\n```typescript\n\u002F\u002F EXPENSIVE: 5 separate API calls = 5 credits\nawait removeBackground(image1);\nawait removeBackground(image2);\n\u002F\u002F ...\n\n\u002F\u002F CHEAPER: Photoshop Actions can chain operations\n\u002F\u002F Record an action that does: remove bg + resize + add watermark\n\u002F\u002F Run it once per image = 1 credit for all 3 operations\nawait runPhotoshopAction(image, actionFile);\n```\n\n### Step 4: Budget Alert System\n\n```typescript\n\u002F\u002F Check PDF Services free tier monthly limit\nconst pdfTracker = new AdobeUsageTracker();\n\n\u002F\u002F Wrap PDF Services calls with tracking\nasync function trackedPdfExtract(pdfPath: string) {\n  const budget = pdfTracker.checkBudget('pdf-services', 500); \u002F\u002F Free tier\n\n  if (budget.remaining \u003C= 0) {\n    throw new Error('PDF Services monthly quota exhausted. Upgrade or wait for reset.');\n  }\n\n  if (budget.warning) {\n    console.warn(`PDF Services: only ${budget.remaining} transactions remaining this month`);\n    \u002F\u002F Send alert to Slack\u002Femail\n  }\n\n  const result = await extractPdfContent(pdfPath);\n  pdfTracker.record({\n    api: 'pdf-services',\n    operation: 'extract',\n    durationMs: 0,\n    creditsUsed: 1,\n  });\n\n  return result;\n}\n```\n\n### Step 5: Cost Dashboard Query\n\n```sql\n-- If tracking usage in your database\nSELECT\n  api,\n  operation,\n  DATE_TRUNC('day', timestamp) as date,\n  COUNT(*) as calls,\n  SUM(credits_used) as credits,\n  AVG(duration_ms) as avg_latency_ms\nFROM adobe_api_usage\nWHERE timestamp >= DATE_TRUNC('month', CURRENT_DATE)\nGROUP BY 1, 2, 3\nORDER BY credits DESC;\n```\n\n## Output\n\n- Per-API usage tracking with credit consumption\n- Budget alerts at 80% threshold\n- Caching to prevent duplicate Firefly credit charges\n- Operation batching for Photoshop workflows\n- Monthly cost dashboard query\n\n## Error Handling\n\n| Issue | Cause | Solution |\n|-------|-------|----------|\n| Unexpected charges | Untracked batch jobs | Wrap all calls with usage tracker |\n| Free tier exceeded | No budget alerts | Implement 80% warning threshold |\n| High Firefly costs | Duplicate prompts | Cache by prompt hash |\n| PDF overage | Unnecessary re-extractions | Cache extraction results |\n\n## Resources\n\n- [Adobe PDF Services Pricing](https:\u002F\u002Fdeveloper.adobe.com\u002Fdocument-services\u002Fpricing\u002Fmain\u002F)\n- [Firefly Services Documentation](https:\u002F\u002Fdeveloper.adobe.com\u002Ffirefly-services\u002Fdocs\u002Fguides\u002F)\n- [Adobe Admin Console](https:\u002F\u002Fadminconsole.adobe.com)\n\n## Next Steps\n\nFor architecture patterns, see `adobe-reference-architecture`.\n\n",{"name":5,"tags":57,"author":59,"license":15,"version":60,"description":61,"allowed-tools":62,"compatible-with":63},[58,51,33],"saas","Jeremy Longshore \u003Cjeremy@intentsolutions.io>","1.0.0","Optimize Adobe API costs across Firefly Services (generative credits),\nPDF Services (document transactions), and Photoshop\u002FLightroom APIs.\nUse when analyzing Adobe billing, reducing API costs,\nor implementing usage monitoring and budget alerts.\nTrigger with phrases like \"adobe cost\", \"adobe billing\", \"adobe credits\",\n\"reduce adobe costs\", \"adobe pricing\", \"adobe budget\".\n","Read, Grep","claude-code","main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fadobe-cost-tuning",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":8,"skillName":5,"commands":74,"prompt":84,"zipAvailable":85},[75,78,81],{"tool":76,"command":77},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill adobe-cost-tuning",{"tool":79,"command":80},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill adobe-cost-tuning",{"tool":82,"command":83},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill adobe-cost-tuning","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fadobe-cost-tuning\u002FSKILL.md",true,[],[88,100,110,119,125,132],{"skillNo":89,"name":90,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":96,"publishedAt":52},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[93],{"categoryNo":94,"categoryName":95,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[97,98,99],"model","model hierarchy","model hierarchy skill",{"skillNo":101,"name":102,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":103,"categories":104,"keywords":106,"publishedAt":52},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[105],{"categoryNo":94,"categoryName":95,"taxonomyType":21,"taxonomyTypeDesc":22},[107,108,109],"MCP","zoom","zoom mcp",{"skillNo":111,"name":112,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":113,"categories":114,"keywords":115,"publishedAt":52},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[116,117,118,108],"sdk","zoom apps sdk","apps",{"skillNo":120,"name":121,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":122,"categories":123,"keywords":124,"publishedAt":52},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[121],{"skillNo":126,"name":127,"nameZh":6,"description":6,"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":131,"publishedAt":52},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[130],{"categoryNo":94,"categoryName":95,"taxonomyType":21,"taxonomyTypeDesc":22},[127],{"skillNo":133,"name":134,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":135,"categories":136,"keywords":137,"publishedAt":52},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[134]]