[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6F7EX02PRXX1KGWC67DP2JV":3,"skill-same:01M6F7EX02PRXX1KGWC67DP2JV":82},{"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":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":59,"commitSha":60,"skillDirectory":61,"forksCount":62,"repositoryHtmlUrl":63,"repositoryHomepageUrl":64,"ownerHtmlUrl":65,"ownerBlogUrl":6,"ownerDescription":66,"updatedAt":67,"install":68,"resources":81},"01M6F7EX02PRXX1KGWC67DP2JV","assemblyai-performance-tuning",null,"Optimize AssemblyAI API performance with caching, parallel processing, and model selection.\nUse when experiencing slow transcriptions, implementing caching strategies,\nor optimizing throughput for batch transcription workloads.\nTrigger with phrases like \"assemblyai performance\", \"optimize assemblyai\",\n\"assemblyai latency\", \"assemblyai caching\", \"assemblyai slow\", \"assemblyai batch\".","ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",67,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fassemblyai-performance-tuning\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"assemblyai performance tuning","assemblyai","performance tuning","tuning","performance","edit","processing","io","strategies","caching","optimize","selection","write","read","model","text","api","batch","code","model selection","2026-11-10 10:12:30",false,"---\nname: assemblyai-performance-tuning\ndescription: |\n  Optimize AssemblyAI API performance with caching, parallel processing, and model selection.\n  Use when experiencing slow transcriptions, implementing caching strategies,\n  or optimizing throughput for batch transcription workloads.\n  Trigger with phrases like \"assemblyai performance\", \"optimize assemblyai\",\n  \"assemblyai latency\", \"assemblyai caching\", \"assemblyai slow\", \"assemblyai batch\".\nallowed-tools: Read, Write, Edit\nversion: 1.0.0\nlicense: MIT\nauthor: Jeremy Longshore \u003Cjeremy@intentsolutions.io>\ntags: [saas, ai, speech-to-text, assemblyai, transcription, performance]\ncompatible-with: claude-code\n---\n\n# AssemblyAI Performance Tuning\n\n## Overview\nOptimize AssemblyAI transcription performance through model selection, parallel processing, caching, and webhook-based architectures.\n\n## Prerequisites\n- `assemblyai` package installed\n- Understanding of async patterns\n- Redis or in-memory cache available (optional)\n\n## Latency Benchmarks (Actual)\n\n### Async Transcription\n| Audio Duration | Approx. Processing Time | Notes |\n|----------------|------------------------|-------|\n| 30 seconds | ~10-15 seconds | Includes queue time |\n| 5 minutes | ~30-60 seconds | Scales sub-linearly |\n| 1 hour | ~3-5 minutes | Depends on queue load |\n| 10 hours | ~15-30 minutes | Max async duration |\n\n### Streaming\n| Metric | Value |\n|--------|-------|\n| First partial transcript | ~300ms (P50) |\n| Final transcript latency | ~500ms (P50) |\n| End-of-turn detection | Automatic with endpointing |\n\n### Model Speed vs. Accuracy\n| Model | Speed | Accuracy | Price\u002Fhr |\n|-------|-------|----------|----------|\n| `nano` | Fastest | Good | $0.12 |\n| `best` (Universal-3) | Standard | Highest | $0.37 |\n| `nova-3` (streaming) | Real-time | High | $0.47 |\n| `nova-3-pro` (streaming) | Real-time | Highest | $0.47 |\n\n## Instructions\n\n### Step 1: Choose the Right Model\n\n```typescript\nimport { AssemblyAI } from 'assemblyai';\n\nconst client = new AssemblyAI({\n  apiKey: process.env.ASSEMBLYAI_API_KEY!,\n});\n\n\u002F\u002F For highest accuracy (default)\nconst accurate = await client.transcripts.transcribe({\n  audio: audioUrl,\n  speech_model: 'best',\n});\n\n\u002F\u002F For fastest processing and lowest cost\nconst fast = await client.transcripts.transcribe({\n  audio: audioUrl,\n  speech_model: 'nano',\n});\n```\n\n### Step 2: Parallel Batch Processing\n\n```typescript\nimport PQueue from 'p-queue';\n\nconst queue = new PQueue({ concurrency: 10 });\n\nasync function batchTranscribe(audioUrls: string[]) {\n  const results = await Promise.all(\n    audioUrls.map(url =>\n      queue.add(() =>\n        client.transcripts.transcribe({ audio: url, speech_model: 'nano' })\n      )\n    )\n  );\n\n  return results.filter(t => t.status === 'completed');\n}\n\n\u002F\u002F Process 100 files with 10 concurrent jobs\nconst urls = Array.from({ length: 100 }, (_, i) => `https:\u002F\u002Fstorage.example.com\u002Faudio-${i}.mp3`);\nconst transcripts = await batchTranscribe(urls);\nconsole.log(`Completed: ${transcripts.length}\u002F${urls.length}`);\n```\n\n### Step 3: Use Webhooks Instead of Polling\n\n```typescript\n\u002F\u002F SLOW: transcribe() polls every 3 seconds until done\nconst slow = await client.transcripts.transcribe({ audio: audioUrl });\n\n\u002F\u002F FAST: submit() returns immediately, webhook notifies on completion\nconst fast = await client.transcripts.submit({\n  audio: audioUrl,\n  webhook_url: 'https:\u002F\u002Fyour-app.com\u002Fwebhooks\u002Fassemblyai',\n});\n\u002F\u002F Your webhook handler processes the result — no polling overhead\n```\n\n### Step 4: Cache Transcript Results\n\n```typescript\nimport { LRUCache } from 'lru-cache';\nimport type { Transcript } from 'assemblyai';\n\nconst transcriptCache = new LRUCache\u003Cstring, Transcript>({\n  max: 500,\n  ttl: 60 * 60 * 1000, \u002F\u002F 1 hour\n});\n\nasync function getCachedTranscript(transcriptId: string): Promise\u003CTranscript> {\n  const cached = transcriptCache.get(transcriptId);\n  if (cached) return cached;\n\n  const transcript = await client.transcripts.get(transcriptId);\n  if (transcript.status === 'completed') {\n    transcriptCache.set(transcriptId, transcript);\n  }\n  return transcript;\n}\n```\n\n### Step 5: Redis Cache for Distributed Systems\n\n```typescript\nimport Redis from 'ioredis';\n\nconst redis = new Redis(process.env.REDIS_URL!);\n\nasync function getCachedTranscriptRedis(transcriptId: string): Promise\u003CTranscript> {\n  const cached = await redis.get(`transcript:${transcriptId}`);\n  if (cached) return JSON.parse(cached);\n\n  const transcript = await client.transcripts.get(transcriptId);\n  if (transcript.status === 'completed') {\n    await redis.setex(\n      `transcript:${transcriptId}`,\n      3600, \u002F\u002F 1 hour TTL\n      JSON.stringify(transcript)\n    );\n  }\n  return transcript;\n}\n```\n\n### Step 6: Minimize Feature Overhead\n\n```typescript\n\u002F\u002F Only enable features you actually need — each adds processing time\n\n\u002F\u002F Minimal (fastest)\nconst minimal = await client.transcripts.transcribe({\n  audio: audioUrl,\n  speech_model: 'nano',\n  punctuate: true,\n  format_text: true,\n});\n\n\u002F\u002F Full intelligence (slower, more expensive)\nconst full = await client.transcripts.transcribe({\n  audio: audioUrl,\n  speech_model: 'best',\n  speaker_labels: true,\n  sentiment_analysis: true,\n  entity_detection: true,\n  auto_highlights: true,\n  content_safety: true,\n  iab_categories: true,\n  summarization: true,\n  summary_type: 'bullets',\n});\n```\n\n### Step 7: Performance Monitoring\n\n```typescript\nasync function timedTranscribe(audioUrl: string, options: Record\u003Cstring, any> = {}) {\n  const start = Date.now();\n  const transcript = await client.transcripts.transcribe({\n    audio: audioUrl,\n    ...options,\n  });\n  const durationMs = Date.now() - start;\n\n  const stats = {\n    transcriptId: transcript.id,\n    status: transcript.status,\n    audioDuration: transcript.audio_duration,\n    processingTimeMs: durationMs,\n    ratio: transcript.audio_duration\n      ? (durationMs \u002F 1000 \u002F transcript.audio_duration).toFixed(2)\n      : 'N\u002FA',\n    wordCount: transcript.words?.length ?? 0,\n    model: options.speech_model ?? 'best',\n  };\n\n  console.log('Transcription stats:', stats);\n  return { transcript, stats };\n}\n```\n\n## Output\n- Optimal model selection based on speed\u002Faccuracy\u002Fcost trade-offs\n- Parallel batch processing with concurrency control\n- Webhook-based architecture (eliminates polling overhead)\n- In-memory and Redis caching for transcript retrieval\n- Performance monitoring with processing time ratios\n\n## Error Handling\n| Issue | Cause | Solution |\n|-------|-------|----------|\n| Slow transcription | Large file + best model | Use `nano` model or split audio |\n| Queue backlog | Too many concurrent submissions | Limit concurrency with p-queue |\n| Cache stale data | Transcript re-processed | Set appropriate TTL, invalidate on webhook |\n| Polling overhead | Using `transcribe()` for many files | Switch to `submit()` + webhooks |\n\n## Resources\n- [AssemblyAI Speech Models](https:\u002F\u002Fwww.assemblyai.com\u002Fdocs\u002Fspeech-to-text\u002Fspeech-recognition)\n- [AssemblyAI Processing FAQ](https:\u002F\u002Fwww.assemblyai.com\u002Fdocs\u002Fconcepts\u002Ffaq)\n- [LRU Cache](https:\u002F\u002Fgithub.com\u002Fisaacs\u002Fnode-lru-cache)\n- [p-queue](https:\u002F\u002Fgithub.com\u002Fsindresorhus\u002Fp-queue)\n\n## Next Steps\nFor cost optimization, see `assemblyai-cost-tuning`.\n\n","# AssemblyAI Performance Tuning\n\n## Overview\nOptimize AssemblyAI transcription performance through model selection, parallel processing, caching, and webhook-based architectures.\n\n## Prerequisites\n- `assemblyai` package installed\n- Understanding of async patterns\n- Redis or in-memory cache available (optional)\n\n## Latency Benchmarks (Actual)\n\n### Async Transcription\n| Audio Duration | Approx. Processing Time | Notes |\n|----------------|------------------------|-------|\n| 30 seconds | ~10-15 seconds | Includes queue time |\n| 5 minutes | ~30-60 seconds | Scales sub-linearly |\n| 1 hour | ~3-5 minutes | Depends on queue load |\n| 10 hours | ~15-30 minutes | Max async duration |\n\n### Streaming\n| Metric | Value |\n|--------|-------|\n| First partial transcript | ~300ms (P50) |\n| Final transcript latency | ~500ms (P50) |\n| End-of-turn detection | Automatic with endpointing |\n\n### Model Speed vs. Accuracy\n| Model | Speed | Accuracy | Price\u002Fhr |\n|-------|-------|----------|----------|\n| `nano` | Fastest | Good | $0.12 |\n| `best` (Universal-3) | Standard | Highest | $0.37 |\n| `nova-3` (streaming) | Real-time | High | $0.47 |\n| `nova-3-pro` (streaming) | Real-time | Highest | $0.47 |\n\n## Instructions\n\n### Step 1: Choose the Right Model\n\n```typescript\nimport { AssemblyAI } from 'assemblyai';\n\nconst client = new AssemblyAI({\n  apiKey: process.env.ASSEMBLYAI_API_KEY!,\n});\n\n\u002F\u002F For highest accuracy (default)\nconst accurate = await client.transcripts.transcribe({\n  audio: audioUrl,\n  speech_model: 'best',\n});\n\n\u002F\u002F For fastest processing and lowest cost\nconst fast = await client.transcripts.transcribe({\n  audio: audioUrl,\n  speech_model: 'nano',\n});\n```\n\n### Step 2: Parallel Batch Processing\n\n```typescript\nimport PQueue from 'p-queue';\n\nconst queue = new PQueue({ concurrency: 10 });\n\nasync function batchTranscribe(audioUrls: string[]) {\n  const results = await Promise.all(\n    audioUrls.map(url =>\n      queue.add(() =>\n        client.transcripts.transcribe({ audio: url, speech_model: 'nano' })\n      )\n    )\n  );\n\n  return results.filter(t => t.status === 'completed');\n}\n\n\u002F\u002F Process 100 files with 10 concurrent jobs\nconst urls = Array.from({ length: 100 }, (_, i) => `https:\u002F\u002Fstorage.example.com\u002Faudio-${i}.mp3`);\nconst transcripts = await batchTranscribe(urls);\nconsole.log(`Completed: ${transcripts.length}\u002F${urls.length}`);\n```\n\n### Step 3: Use Webhooks Instead of Polling\n\n```typescript\n\u002F\u002F SLOW: transcribe() polls every 3 seconds until done\nconst slow = await client.transcripts.transcribe({ audio: audioUrl });\n\n\u002F\u002F FAST: submit() returns immediately, webhook notifies on completion\nconst fast = await client.transcripts.submit({\n  audio: audioUrl,\n  webhook_url: 'https:\u002F\u002Fyour-app.com\u002Fwebhooks\u002Fassemblyai',\n});\n\u002F\u002F Your webhook handler processes the result — no polling overhead\n```\n\n### Step 4: Cache Transcript Results\n\n```typescript\nimport { LRUCache } from 'lru-cache';\nimport type { Transcript } from 'assemblyai';\n\nconst transcriptCache = new LRUCache\u003Cstring, Transcript>({\n  max: 500,\n  ttl: 60 * 60 * 1000, \u002F\u002F 1 hour\n});\n\nasync function getCachedTranscript(transcriptId: string): Promise\u003CTranscript> {\n  const cached = transcriptCache.get(transcriptId);\n  if (cached) return cached;\n\n  const transcript = await client.transcripts.get(transcriptId);\n  if (transcript.status === 'completed') {\n    transcriptCache.set(transcriptId, transcript);\n  }\n  return transcript;\n}\n```\n\n### Step 5: Redis Cache for Distributed Systems\n\n```typescript\nimport Redis from 'ioredis';\n\nconst redis = new Redis(process.env.REDIS_URL!);\n\nasync function getCachedTranscriptRedis(transcriptId: string): Promise\u003CTranscript> {\n  const cached = await redis.get(`transcript:${transcriptId}`);\n  if (cached) return JSON.parse(cached);\n\n  const transcript = await client.transcripts.get(transcriptId);\n  if (transcript.status === 'completed') {\n    await redis.setex(\n      `transcript:${transcriptId}`,\n      3600, \u002F\u002F 1 hour TTL\n      JSON.stringify(transcript)\n    );\n  }\n  return transcript;\n}\n```\n\n### Step 6: Minimize Feature Overhead\n\n```typescript\n\u002F\u002F Only enable features you actually need — each adds processing time\n\n\u002F\u002F Minimal (fastest)\nconst minimal = await client.transcripts.transcribe({\n  audio: audioUrl,\n  speech_model: 'nano',\n  punctuate: true,\n  format_text: true,\n});\n\n\u002F\u002F Full intelligence (slower, more expensive)\nconst full = await client.transcripts.transcribe({\n  audio: audioUrl,\n  speech_model: 'best',\n  speaker_labels: true,\n  sentiment_analysis: true,\n  entity_detection: true,\n  auto_highlights: true,\n  content_safety: true,\n  iab_categories: true,\n  summarization: true,\n  summary_type: 'bullets',\n});\n```\n\n### Step 7: Performance Monitoring\n\n```typescript\nasync function timedTranscribe(audioUrl: string, options: Record\u003Cstring, any> = {}) {\n  const start = Date.now();\n  const transcript = await client.transcripts.transcribe({\n    audio: audioUrl,\n    ...options,\n  });\n  const durationMs = Date.now() - start;\n\n  const stats = {\n    transcriptId: transcript.id,\n    status: transcript.status,\n    audioDuration: transcript.audio_duration,\n    processingTimeMs: durationMs,\n    ratio: transcript.audio_duration\n      ? (durationMs \u002F 1000 \u002F transcript.audio_duration).toFixed(2)\n      : 'N\u002FA',\n    wordCount: transcript.words?.length ?? 0,\n    model: options.speech_model ?? 'best',\n  };\n\n  console.log('Transcription stats:', stats);\n  return { transcript, stats };\n}\n```\n\n## Output\n- Optimal model selection based on speed\u002Faccuracy\u002Fcost trade-offs\n- Parallel batch processing with concurrency control\n- Webhook-based architecture (eliminates polling overhead)\n- In-memory and Redis caching for transcript retrieval\n- Performance monitoring with processing time ratios\n\n## Error Handling\n| Issue | Cause | Solution |\n|-------|-------|----------|\n| Slow transcription | Large file + best model | Use `nano` model or split audio |\n| Queue backlog | Too many concurrent submissions | Limit concurrency with p-queue |\n| Cache stale data | Transcript re-processed | Set appropriate TTL, invalidate on webhook |\n| Polling overhead | Using `transcribe()` for many files | Switch to `submit()` + webhooks |\n\n## Resources\n- [AssemblyAI Speech Models](https:\u002F\u002Fwww.assemblyai.com\u002Fdocs\u002Fspeech-to-text\u002Fspeech-recognition)\n- [AssemblyAI Processing FAQ](https:\u002F\u002Fwww.assemblyai.com\u002Fdocs\u002Fconcepts\u002Ffaq)\n- [LRU Cache](https:\u002F\u002Fgithub.com\u002Fisaacs\u002Fnode-lru-cache)\n- [p-queue](https:\u002F\u002Fgithub.com\u002Fsindresorhus\u002Fp-queue)\n\n## Next Steps\nFor cost optimization, see `assemblyai-cost-tuning`.\n\n",{"name":5,"tags":49,"author":54,"license":15,"version":55,"description":56,"allowed-tools":57,"compatible-with":58},[50,51,52,25,53,28],"saas","ai","speech-to-text","transcription","Jeremy Longshore \u003Cjeremy@intentsolutions.io>","1.0.0","Optimize AssemblyAI API performance with caching, parallel processing, and model selection.\nUse when experiencing slow transcriptions, implementing caching strategies,\nor optimizing throughput for batch transcription workloads.\nTrigger with phrases like \"assemblyai performance\", \"optimize assemblyai\",\n\"assemblyai latency\", \"assemblyai caching\", \"assemblyai slow\", \"assemblyai batch\".\n","Read, Write, Edit","claude-code","main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fassemblyai-performance-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":69,"prompt":79,"zipAvailable":80},[70,73,76],{"tool":71,"command":72},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill assemblyai-performance-tuning",{"tool":74,"command":75},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill assemblyai-performance-tuning",{"tool":77,"command":78},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill assemblyai-performance-tuning","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fassemblyai-performance-tuning\u002FSKILL.md",true,[],[83,96,106,115,121,128],{"skillNo":84,"name":85,"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":86,"categories":87,"keywords":93,"publishedAt":44},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[88],{"categoryNo":89,"categoryName":90,"taxonomyType":91,"taxonomyTypeDesc":92},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[38,94,95],"model hierarchy","model hierarchy skill",{"skillNo":97,"name":98,"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":99,"categories":100,"keywords":102,"publishedAt":44},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[101],{"categoryNo":89,"categoryName":90,"taxonomyType":91,"taxonomyTypeDesc":92},[103,104,105],"MCP","zoom","zoom mcp",{"skillNo":107,"name":108,"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":109,"categories":110,"keywords":111,"publishedAt":44},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[112,113,114,104],"sdk","zoom apps sdk","apps",{"skillNo":116,"name":117,"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":118,"categories":119,"keywords":120,"publishedAt":44},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[117],{"skillNo":122,"name":123,"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":124,"categories":125,"keywords":127,"publishedAt":44},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[126],{"categoryNo":89,"categoryName":90,"taxonomyType":91,"taxonomyTypeDesc":92},[123],{"skillNo":129,"name":130,"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":131,"categories":132,"keywords":133,"publishedAt":44},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[130]]