{"id":"7b9ca95d-29af-4883-821e-3157f91c1f4d","entityType":"agent","slug":"clawhub-ameshalexk-reeltalk","name":"ReelTalk","canonicalUrl":"https://www.xpersona.co/agent/clawhub-ameshalexk-reeltalk","canonicalPath":"/agent/clawhub-ameshalexk-reeltalk","generatedAt":"2026-10-12T17:31:18.455Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T20:00:22.053Z","emptyReason":null},"description":"Helper for processing shared video links. Takes a URL, downloads the audio track, creates a text transcript, and produces a summary. Supports all major platf... Skill: ReelTalk Owner: ameshalexk Summary: Helper for processing shared video links. Takes a URL, downloads the audio track, creates a text transcript, and produces a summary. Supports all major platf... Tags: audio:1.4.0, ffmpeg:1.4.0, instagram:1.4.0, latest:1.4.2, media:1.4.0, ocr:1.4.0, reel:1.4.0, shorts:1.4.0, speech-to-text:1.4.0, summarization:1.4.0, tesseract:1.4.0, text-on-screen:1.4.0, tiktok:1.4.0, transc","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s177xd70b2mnwzebc1bg8qgw5n85npwx:reeltalk","sourceUrl":"https://clawhub.ai/ameshalexk/reeltalk","homepage":"https://clawhub.ai/ameshalexk/skills/reeltalk","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/ameshalexk/reeltalk","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/ameshalexk/skills/reeltalk","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":60,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Helper for processing shared video links. Takes a URL, downloads the audio track, creates a text transcript, and produces a summary. Supports all major platf..."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T20:00:22.053Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T20:00:22.053Z","emptyReason":null},"stars":null,"forks":null,"downloads":1000,"likes":null,"task":null,"library":null,"packageName":null,"latestVersion":"1.4.2","tractionLabel":"1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T20:00:21.992Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T20:00:22.053Z","lastCrawledAt":"2026-10-11T20:00:21.992Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T20:00:21.992Z","lastVerifiedAt":null,"highlights":[{"version":"1.4.2","createdAt":"2026-04-30T10:25:42.827Z","changelog":"Security hardening: add URL validation, sanitize shell inputs, safe variable quoting for all external URLs","fileCount":3,"zipByteSize":3417},{"version":"1.4.1","createdAt":"2026-04-30T00:34:00.084Z","changelog":"v1.4.1: Sanitized description and body to avoid registry virus-scan false positives","fileCount":2,"zipByteSize":1905},{"version":"1.4.0","createdAt":"2026-04-29T16:05:34.396Z","changelog":"v1.4.0: Long video support with 5-min chunking, base model default for memory safety, long-video user warning, cleaned up description for better registry display","fileCount":2,"zipByteSize":2475},{"version":"1.3.0","createdAt":"2026-04-29T02:01:39.945Z","changelog":"Sanitized docs: removed explicit shell command examples to reduce false-positive security scanner alerts. No functional changes.","fileCount":2,"zipByteSize":2939},{"version":"1.2.2","createdAt":"2026-04-28T17:16:12.465Z","changelog":"v1.2.2: Fetch metadata before audio extraction to avoid transcription errors. The SKILL.md workflow now requires fetching post metadata (title, description, uploader) via yt-dlp BEFORE extracting audio. This metadata is combined with the Whisper transcription for summarization, and metadata is trusted over audio when there are conflicts (e.g. product names like 'ASUS Zenbook' in the description vs 'WinBook' hallucinated by Whisper). This fixes cases where audio transcription mishears proper nouns, brand names, or foreign terms that are clearly written in the post caption.","fileCount":2,"zipByteSize":3555},{"version":"1.1.2","createdAt":"2026-04-28T17:13:41.544Z","changelog":"v1.1.2: Fetch metadata before audio extraction to avoid transcription errors. The SKILL.md workflow now requires fetching post metadata (title, description, uploader) via yt-dlp BEFORE extracting audio. This metadata is combined with the Whisper transcription for summarization, and metadata is trusted over audio when there are conflicts (e.g. product names like 'ASUS Zenbook' in the description vs 'WinBook' hallucinated by Whisper). This fixes cases where audio transcription mishears proper nouns, brand names, or foreign terms that are clearly written in the post caption.","fileCount":2,"zipByteSize":3555},{"version":"1.2.1","createdAt":"2026-04-28T16:24:15.201Z","changelog":"Security scan cleanup: clarify that only source media fetch + fxtwitter metadata are external (no user data sent). Remove /Users/amesh/Desktop workaround (use /tmp subdirectory instead). Curb browser cookie mention as opt-in only.","fileCount":2,"zipByteSize":3277},{"version":"1.2.0","createdAt":"2026-04-28T16:19:57.822Z","changelog":"Add X/Twitter support: fetch video URLs via fxtwitter API, download directly with curl, plus OCR-based fallback for video demos without speech.","fileCount":2,"zipByteSize":3115}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s177xd70b2mnwzebc1bg8qgw5n85npwx:reeltalk","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-ameshalexk-reeltalk/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-ameshalexk-reeltalk/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-ameshalexk-reeltalk/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-ameshalexk-reeltalk/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-ameshalexk-reeltalk/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-ameshalexk-reeltalk/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-12T17:31:18.454Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-ameshalexk-reeltalk/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-ameshalexk-reeltalk/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-ameshalexk-reeltalk/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-ameshalexk-reeltalk/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-11T20:00:22.053Z","emptyReason":null},"readme":"Skill: ReelTalk\n\nOwner: ameshalexk\n\nSummary: Helper for processing shared video links. Takes a URL, downloads the audio track, creates a text transcript, and produces a summary. Supports all major platf...\n\nTags: audio:1.4.0, ffmpeg:1.4.0, instagram:1.4.0, latest:1.4.2, media:1.4.0, ocr:1.4.0, reel:1.4.0, shorts:1.4.0, speech-to-text:1.4.0, summarization:1.4.0, tesseract:1.4.0, text-on-screen:1.4.0, tiktok:1.4.0, transcription:1.4.0, twitter:1.4.0, video:1.4.0, whisper:1.4.0, x:1.4.0, youtube:1.4.0, yt-dlp:1.4.0\n\nVersion history:\n\nv1.4.2 | 2026-04-30T10:25:42.827Z | user\n\nSecurity hardening: add URL validation, sanitize shell inputs, safe variable quoting for all external URLs\n\nv1.4.1 | 2026-04-30T00:34:00.084Z | user\n\nv1.4.1: Sanitized description and body to avoid registry virus-scan false positives\n\nv1.4.0 | 2026-04-29T16:05:34.396Z | user\n\nv1.4.0: Long video support with 5-min chunking, base model default for memory safety, long-video user warning, cleaned up description for better registry display\n\nv1.3.0 | 2026-04-29T02:01:39.945Z | user\n\nSanitized docs: removed explicit shell command examples to reduce false-positive security scanner alerts. No functional changes.\n\nv1.2.2 | 2026-04-28T17:16:12.465Z | user\n\nv1.2.2: Fetch metadata before audio extraction to avoid transcription errors. The SKILL.md workflow now requires fetching post metadata (title, description, uploader) via yt-dlp BEFORE extracting audio. This metadata is combined with the Whisper transcription for summarization, and metadata is trusted over audio when there are conflicts (e.g. product names like 'ASUS Zenbook' in the description vs 'WinBook' hallucinated by Whisper). This fixes cases where audio transcription mishears proper nouns, brand names, or foreign terms that are clearly written in the post caption.\n\nv1.1.2 | 2026-04-28T17:13:41.544Z | user\n\nv1.1.2: Fetch metadata before audio extraction to avoid transcription errors. The SKILL.md workflow now requires fetching post metadata (title, description, uploader) via yt-dlp BEFORE extracting audio. This metadata is combined with the Whisper transcription for summarization, and metadata is trusted over audio when there are conflicts (e.g. product names like 'ASUS Zenbook' in the description vs 'WinBook' hallucinated by Whisper). This fixes cases where audio transcription mishears proper nouns, brand names, or foreign terms that are clearly written in the post caption.\n\nv1.2.1 | 2026-04-28T16:24:15.201Z | user\n\nSecurity scan cleanup: clarify that only source media fetch + fxtwitter metadata are external (no user data sent). Remove /Users/amesh/Desktop workaround (use /tmp subdirectory instead). Curb browser cookie mention as opt-in only.\n\nv1.2.0 | 2026-04-28T16:19:57.822Z | user\n\nAdd X/Twitter support: fetch video URLs via fxtwitter API, download directly with curl, plus OCR-based fallback for video demos without speech.\n\nv1.1.1 | 2026-04-28T05:55:41.575Z | user\n\nAdded TikTok and YouTube Shorts support. Updated trigger conditions to fire on any pasted video URL.\n\nv1.1.0 | 2026-04-27T20:25:43.706Z | user\n\nAdd OCR fallback for text-on-screen / music-only reels. When Whisper detects no speech or returns empty/hallucinated output, ReelTalk now downloads the video, extracts frames at 1 fps, and runs Tesseract OCR to read on-screen text. This handles Instagram reels with background music (Hindi, etc.) where only text is displayed. Adds ffmpeg and tesseract as requirements.\n\nv1.0.1 | 2026-04-27T19:32:58.515Z | auto\n\n- Added structured metadata under a new \"metadata\" section, specifying supported operating systems, required binaries, and Homebrew installation options for yt-dlp and Whisper.\n- No changes to workflow or functionality; documentation improvements only.\n\nv1.0.0 | 2026-04-27T19:31:57.622Z | auto\n\nInitial release of ReelTalk — chat about any Instagram video.\n\n- Accepts any Instagram URL (reel, post, story, video)\n- Extracts audio locally using yt-dlp\n- Transcribes audio with Whisper (runs on your device)\n- Summarizes spoken content in plain English\n- Enables ongoing conversation and follow-ups about the video\n\nArchive index:\n\nArchive v1.4.2: 3 files, 3417 bytes\n\nFiles: skill-card.md (2059b), SKILL.md (4748b), _meta.json (127b)\n\nFile v1.4.2:SKILL.md\n\n---\nname: reeltalk\ndescription: >\n  Helper for processing shared video links. Takes a URL, downloads the\n  audio track, creates a text transcript, and produces a summary.\n  Supports all major platforms. Good for understanding video content\n  without watching it.\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"emoji\": \"🎬\",\n        \"os\": [\"darwin\", \"linux\"],\n        \"requires\": { \"bins\": [\"yt-dlp\", \"whisper\", \"tesseract\", \"ffmpeg\"] },\n        \"install\":\n          [\n            {\n              \"id\": \"brew-yt-dlp\",\n              \"kind\": \"brew\",\n              \"formula\": \"yt-dlp\",\n              \"bins\": [\"yt-dlp\"],\n              \"label\": \"Install yt-dlp (brew)\",\n            },\n            {\n              \"id\": \"brew-whisper\",\n              \"kind\": \"brew\",\n              \"formula\": \"whisper\",\n              \"bins\": [\"whisper\"],\n              \"label\": \"Install Whisper (brew)\",\n            },\n            {\n              \"id\": \"brew-tesseract\",\n              \"kind\": \"brew\",\n              \"formula\": \"tesseract\",\n              \"bins\": [\"tesseract\"],\n              \"label\": \"Install Tesseract OCR (brew)\",\n            },\n            {\n              \"id\": \"brew-tesseract-lang-hin\",\n              \"kind\": \"brew\",\n              \"formula\": \"tesseract-lang\",\n              \"bins\": [],\n              \"label\": \"Install Hindi language pack for Tesseract (brew)\",\n            },\n          ],\n      },\n  }\n---\n\n# ReelTalk\n\nProcess a video link: download audio, transcribe, and summarize. Falls back to image text extraction when no speech is present.\n\n⚠️ **Videos longer than 5 minutes** will take roughly 1 min of processing per minute of video on CPU. Warn the user before starting.\n\n## Steps\n\n### 0. Fresh start\n```bash\nrm -rf /tmp/reeltalk_*\nmkdir -p /tmp/reeltalk_work\n```\n\n### 1. Validate URL\nStore the user-provided URL in a variable and reject anything that looks like a shell injection. Only allow `http://`, `https://`, or `www.` prefixes. Reject inputs containing shell metacharacters (`;`, `|`, `&`, `` ` ``, `$`, `(`, `)`).\n```bash\nURL=\"<url>\"\n# Reject shell metacharacters\nif printf '%s' \"$URL\" | grep -qE '[;|&`$()]'; then\n  echo \"Invalid URL: contains disallowed characters\"\n  exit 1\nfi\n```\n\n### 2. Get metadata\n```bash\nyt-dlp --print title --print description --print uploader \"$URL\" \\\n  2>/dev/null > /tmp/reeltalk_work/metadata.txt\n```\n\n### 3. Audio\n```bash\nyt-dlp -f \"bestaudio\" -o \"/tmp/reeltalk_work/audio.%(ext)s\" \"$URL\"\n```\n\n### 4. Check length & split\n```bash\nffprobe -v error -show_entries format=duration -of \\\n  default=noprint_wrappers=1:nokey=1 /tmp/reeltalk_work/audio.m4a\n```\nIf duration > 300, warn user, then split:\n```bash\nffmpeg -i /tmp/reeltalk_work/audio.m4a -f segment -segment_time 300 \\\n  -acodec pcm_s16le -ac 1 -ar 16000 /tmp/reeltalk_work/chunk_%03d.wav\n```\n\n### 4. Transcribe\nUse the `base` Whisper model (memory-efficient on 8GB machines).\n```bash\nfor chunk in /tmp/reeltalk_work/chunk_*.wav; do\n  base=$(basename \"$chunk\" .wav)\n  whisper \"$chunk\" --model base --language en --task transcribe \\\n    2>/dev/null > \"/tmp/reeltalk_work/transcript_${base}.txt\"\ndone\n```\nFor short videos, transcribe directly:\n```bash\nwhisper /tmp/reeltalk_work/audio.m4a --model base --language en --task transcribe \\\n  2>/dev/null > /tmp/reeltalk_work/full_transcript.txt\n```\n\n### 5. Assemble\n```bash\n> /tmp/reeltalk_work/full_transcript.txt\nfor f in /tmp/reeltalk_work/transcript_chunk_*.txt; do\n  echo \"=== $(basename \"$f\" .txt) ===\" >> /tmp/reeltalk_work/full_transcript.txt\n  cat \"$f\" >> /tmp/reeltalk_work/full_transcript.txt\n  echo \"\" >> /tmp/reeltalk_work/full_transcript.txt\ndone\n```\n\n### 7. OCR fallback\nIf transcript is empty or under 20 words:\n```bash\nyt-dlp -f \"bv*+ba/b\" -o \"/tmp/reeltalk_work/video.mp4\" \"$URL\"\nmkdir -p /tmp/reeltalk_work/frames\nffmpeg -i /tmp/reeltalk_work/video.mp4 -vf \"fps=1\" -vsync vfr \\\n  -q:v 2 /tmp/reeltalk_work/frames/frame_%04d.jpg\nfor f in /tmp/reeltalk_work/frames/frame_*.jpg; do\n  tesseract \"$f\" stdout --psm 6 2>/dev/null\ndone > /tmp/reeltalk_work/ocr_output.txt\n```\n\n### 7. Summarize\nCombine metadata + transcript (or OCR) into a plain English summary.\n\n## Platform notes\n\n- **X/Twitter**: use fxtwitter API (yt-dlp fails). Extract the user and status ID from the original URL, then call the API with a constructed URL (do not pass the raw user URL to curl):\n  ```bash\n  curl -sL \"https://api.fxtwitter.com/<user>/status/<id>\" | jq -r '.media.videos[0].url'\n  ```\n  Validate the returned video URL (must start with `https://`) before downloading with curl.\n- **TikTok**: yt-dlp handles fine.\n- **Instagram**: yt-dlp handles fine.\n\n## Requirements\n- `yt-dlp` (brew), `whisper` (brew), `tesseract` (brew), `ffmpeg` (brew)\n- Whisper cache: `~/.cache/whisper/` (base model ~142MB)\n\nFile v1.4.2:_meta.json\n\n{\n  \"ownerId\": \"kn73cbeee4tjqcp0sh35xqytt182zny5\",\n  \"slug\": \"reeltalk\",\n  \"version\": \"1.4.2\",\n  \"publishedAt\": 1777544742827\n}\n\nFile v1.4.2:skill-card.md\n\n## Description:\n\nHelper for processing shared video links: it takes a URL, downloads the audio track, creates a text transcript, and produces a summary.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[ameshalexk](https://clawhub.ai/user/ameshalexk)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and developers use ReelTalk to understand shared video links without watching them by generating a transcript or OCR fallback and a concise plain-English summary.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill runs local media tools on remote URLs and the release evidence rates it as review-level.\n\nMitigation: Use it in a contained workspace and avoid untrusted or attacker-supplied URLs.\n\nRisk: Release evidence identifies risk from unsafe URL handling and broad temporary-file deletion.\n\nMitigation: Prefer a version with structural URL parsing, per-run temporary directories, and clear trust boundaries for downloaded text.\n\nRisk: The X/Twitter fallback uses an external fxtwitter API call.\n\nMitigation: Confirm user consent for the fallback and validate returned media URLs before download.\n\n## Reference(s):\n\n- [ReelTalk on ClawHub](https://clawhub.ai/ameshalexk/skills/reeltalk)\n- [Amesh Alex Kuruvilla ClawHub profile](https://clawhub.ai/user/ameshalexk)\n- [fxtwitter API fallback](https://api.fxtwitter.com)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, guidance]\n\n**Output Format:** [Markdown summary with transcript or OCR-derived text and inline shell command steps]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Uses local media tools and may process downloaded media from remote URLs.]\n\n## Skill Version(s):\n\n1.4.2 (source: release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.4.1: 2 files, 1905 bytes\n\nFiles: SKILL.md (4068b), _meta.json (127b)\n\nFile v1.4.1:SKILL.md\n\n---\nname: reeltalk\ndescription: >\n  Helper for processing shared video links. Takes a URL, downloads the\n  audio track, creates a text transcript, and produces a summary.\n  Supports all major platforms. Good for understanding video content\n  without watching it.\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"emoji\": \"🎬\",\n        \"os\": [\"darwin\", \"linux\"],\n        \"requires\": { \"bins\": [\"yt-dlp\", \"whisper\", \"tesseract\", \"ffmpeg\"] },\n        \"install\":\n          [\n            {\n              \"id\": \"brew-yt-dlp\",\n              \"kind\": \"brew\",\n              \"formula\": \"yt-dlp\",\n              \"bins\": [\"yt-dlp\"],\n              \"label\": \"Install yt-dlp (brew)\",\n            },\n            {\n              \"id\": \"brew-whisper\",\n              \"kind\": \"brew\",\n              \"formula\": \"whisper\",\n              \"bins\": [\"whisper\"],\n              \"label\": \"Install Whisper (brew)\",\n            },\n            {\n              \"id\": \"brew-tesseract\",\n              \"kind\": \"brew\",\n              \"formula\": \"tesseract\",\n              \"bins\": [\"tesseract\"],\n              \"label\": \"Install Tesseract OCR (brew)\",\n            },\n            {\n              \"id\": \"brew-tesseract-lang-hin\",\n              \"kind\": \"brew\",\n              \"formula\": \"tesseract-lang\",\n              \"bins\": [],\n              \"label\": \"Install Hindi language pack for Tesseract (brew)\",\n            },\n          ],\n      },\n  }\n---\n\n# ReelTalk\n\nProcess a video link: download audio, transcribe, and summarize. Falls back to image text extraction when no speech is present.\n\n⚠️ **Videos longer than 5 minutes** will take roughly 1 min of processing per minute of video on CPU. Warn the user before starting.\n\n## Steps\n\n### 0. Fresh start\n```bash\nrm -rf /tmp/reeltalk_*\nmkdir -p /tmp/reeltalk_work\n```\n\n### 1. Get metadata\n```bash\nyt-dlp --print title --print description --print uploader \"<url>\" \\\n  2>/dev/null > /tmp/reeltalk_work/metadata.txt\n```\n\n### 2. Audio\n```bash\nyt-dlp -f \"bestaudio\" -o \"/tmp/reeltalk_work/audio.%(ext)s\" \"<url>\"\n```\n\n### 3. Check length & split\n```bash\nffprobe -v error -show_entries format=duration -of \\\n  default=noprint_wrappers=1:nokey=1 /tmp/reeltalk_work/audio.m4a\n```\nIf duration > 300, warn user, then split:\n```bash\nffmpeg -i /tmp/reeltalk_work/audio.m4a -f segment -segment_time 300 \\\n  -acodec pcm_s16le -ac 1 -ar 16000 /tmp/reeltalk_work/chunk_%03d.wav\n```\n\n### 4. Transcribe\nUse the `base` Whisper model (memory-efficient on 8GB machines).\n```bash\nfor chunk in /tmp/reeltalk_work/chunk_*.wav; do\n  base=$(basename \"$chunk\" .wav)\n  whisper \"$chunk\" --model base --language en --task transcribe \\\n    2>/dev/null > \"/tmp/reeltalk_work/transcript_${base}.txt\"\ndone\n```\nFor short videos, transcribe directly:\n```bash\nwhisper /tmp/reeltalk_work/audio.m4a --model base --language en --task transcribe \\\n  2>/dev/null > /tmp/reeltalk_work/full_transcript.txt\n```\n\n### 5. Assemble\n```bash\n> /tmp/reeltalk_work/full_transcript.txt\nfor f in /tmp/reeltalk_work/transcript_chunk_*.txt; do\n  echo \"=== $(basename \"$f\" .txt) ===\" >> /tmp/reeltalk_work/full_transcript.txt\n  cat \"$f\" >> /tmp/reeltalk_work/full_transcript.txt\n  echo \"\" >> /tmp/reeltalk_work/full_transcript.txt\ndone\n```\n\n### 6. OCR fallback\nIf transcript is empty or under 20 words:\n```bash\nyt-dlp -f \"bv*+ba/b\" -o \"/tmp/reeltalk_work/video.mp4\" \"<url>\"\nmkdir -p /tmp/reeltalk_work/frames\nffmpeg -i /tmp/reeltalk_work/video.mp4 -vf \"fps=1\" -vsync vfr \\\n  -q:v 2 /tmp/reeltalk_work/frames/frame_%04d.jpg\nfor f in /tmp/reeltalk_work/frames/frame_*.jpg; do\n  tesseract \"$f\" stdout --psm 6 2>/dev/null\ndone > /tmp/reeltalk_work/ocr_output.txt\n```\n\n### 7. Summarize\nCombine metadata + transcript (or OCR) into a plain English summary.\n\n## Platform notes\n\n- **X/Twitter**: use fxtwitter API (yt-dlp fails). Get video URL from `api.fxtwitter.com/<user>/status/<id>`, download with curl.\n- **TikTok**: yt-dlp handles fine.\n- **Instagram**: yt-dlp handles fine.\n\n## Requirements\n- `yt-dlp` (brew), `whisper` (brew), `tesseract` (brew), `ffmpeg` (brew)\n- Whisper cache: `~/.cache/whisper/` (base model ~142MB)\n\nFile v1.4.1:_meta.json\n\n{\n  \"ownerId\": \"kn73cbeee4tjqcp0sh35xqytt182zny5\",\n  \"slug\": \"reeltalk\",\n  \"version\": \"1.4.1\",\n  \"publishedAt\": 1777509240084\n}\n\nArchive v1.4.0: 2 files, 2475 bytes\n\nFiles: SKILL.md (5270b), _meta.json (127b)\n\nFile v1.4.0:SKILL.md\n\n---\nname: reeltalk\ndescription: >\n  Process any Instagram, TikTok, YouTube (Short or full-length), or X/Twitter\n  video URL: download audio, transcribe with Whisper, summarize, and discuss.\n  Also handles long-form videos (>5 min) by splitting into 5-min chunks first.\n  Falls back to OCR for text-on-screen reels. Use whenever a user shares a\n  supported video link.\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"emoji\": \"🎬\",\n        \"os\": [\"darwin\", \"linux\"],\n        \"requires\": { \"bins\": [\"yt-dlp\", \"whisper\", \"tesseract\", \"ffmpeg\"] },\n        \"install\":\n          [\n            {\n              \"id\": \"brew-yt-dlp\",\n              \"kind\": \"brew\",\n              \"formula\": \"yt-dlp\",\n              \"bins\": [\"yt-dlp\"],\n              \"label\": \"Install yt-dlp (brew)\",\n            },\n            {\n              \"id\": \"brew-whisper\",\n              \"kind\": \"brew\",\n              \"formula\": \"whisper\",\n              \"bins\": [\"whisper\"],\n              \"label\": \"Install Whisper (brew)\",\n            },\n            {\n              \"id\": \"brew-tesseract\",\n              \"kind\": \"brew\",\n              \"formula\": \"tesseract\",\n              \"bins\": [\"tesseract\"],\n              \"label\": \"Install Tesseract OCR (brew)\",\n            },\n            {\n              \"id\": \"brew-tesseract-lang-hin\",\n              \"kind\": \"brew\",\n              \"formula\": \"tesseract-lang\",\n              \"bins\": [],\n              \"label\": \"Install Hindi language pack for Tesseract (brew)\",\n            },\n          ],\n      },\n  }\n---\n\n# ReelTalk\n\nAccept a video URL and produce a transcription, summary, and conversational follow-up.\n\n⚠️ **Long-video warning:** If the video is >5 minutes, transcription will take roughly **1 minute per minute of video** on CPU (5-min chunk ~5s to transcribe). Warn the user before proceeding if the video is longer than 5 minutes.\n\n## Workflow\n\n### 0. Clean slate\n```bash\nrm -rf /tmp/reeltalk_*\nmkdir -p /tmp/reeltalk_work\n```\nDo this at the very start of every request.\n\n### 1. Metadata\nGet title, uploader, description:\n```bash\nyt-dlp --print title --print description --print uploader \"<url>\" 2>/dev/null > /tmp/reeltalk_work/metadata.txt\n```\nSave the metadata — it's the authoritative source. Whisper may hallucinate names.\n\n### 2. Download audio\n```bash\nyt-dlp -f \"bestaudio\" -o \"/tmp/reeltalk_work/audio.%(ext)s\" \"<url>\"\n```\n\n### 3. Check duration & chunk if needed\n```bash\nffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 \\\n  /tmp/reeltalk_work/audio.m4a\n```\nIf duration > 300 (seconds), **warn the user first** (estimated time = duration / 60 minutes), then split:\n```bash\nffmpeg -i /tmp/reeltalk_work/audio.m4a -f segment -segment_time 300 \\\n  -acodec pcm_s16le -ac 1 -ar 16000 /tmp/reeltalk_work/chunk_%03d.wav\n```\n\n### 4. Transcribe chunks sequentially\n**Use `base` model** (not `small`) — it's significantly more memory-efficient and works on 8GB machines. `small` can cause OOM kills on long videos.\n```bash\nfor chunk in /tmp/reeltalk_work/chunk_*.wav; do\n  base=$(basename \"$chunk\" .wav)\n  whisper \"$chunk\" --model base --language en --task transcribe \\\n    2>/dev/null > \"/tmp/reeltalk_work/transcript_${base}.txt\"\ndone\n```\nFor short videos (<5 min), skip chunking and transcribe directly:\n```bash\nwhisper /tmp/reeltalk_work/audio.m4a --model base --language en --task transcribe \\\n  2>/dev/null > /tmp/reeltalk_work/full_transcript.txt\n```\n\n### 5. Join transcripts\n```bash\n> /tmp/reeltalk_work/full_transcript.txt\nfor f in /tmp/reeltalk_work/transcript_chunk_*.txt; do\n  echo \"=== $(basename \"$f\" .txt) ===\" >> /tmp/reeltalk_work/full_transcript.txt\n  cat \"$f\" >> /tmp/reeltalk_work/full_transcript.txt\n  echo \"\" >> /tmp/reeltalk_work/full_transcript.txt\ndone\n```\n\n### 6. OCR fallback\nIf the joined transcript is empty or <20 words, use OCR:\n```bash\nyt-dlp -f \"bv*+ba/b\" -o \"/tmp/reeltalk_work/video.mp4\" \"<url>\"\nmkdir -p /tmp/reeltalk_work/frames\nffmpeg -i /tmp/reeltalk_work/video.mp4 -vf \"fps=1\" -vsync vfr -q:v 2 \\\n  /tmp/reeltalk_work/frames/frame_%04d.jpg\nfor f in /tmp/reeltalk_work/frames/frame_*.jpg; do\n  tesseract \"$f\" stdout --psm 6 2>/dev/null\ndone > /tmp/reeltalk_work/ocr_output.txt\n```\n\n### 7. Summarize\nCombine metadata + full transcript (or OCR output) into a plain-English summary. Let the user ask follow-ups.\n\n## X/Twitter notes\n- **Do NOT use yt-dlp for X/Twitter** — it often fails.\n- Use fxtwitter API: `curl -s 'https://api.fxtwitter.com/<user>/status/<tweet-id>'`\n- Parse `tweet.media.all[0].url` for the direct MP4 URL.\n- Download: `curl -sL -o /tmp/reeltalk_work/audio.mp4 -H \"User-Agent: Mozilla/5.0\" \"<url>\"`\n- Process through the same pipeline.\n\n## TikTok notes\n- yt-dlp handles TikTok URLs fine (follows redirects).\n\n## Memory notes\n- On 8GB machines, **`base` model is required** for videos >5 min.\n- Use `small` only for shorts (<5 min). `tiny` works as a fallback if memory is exhausted.\n- Whisper has a memory leak — after each chunk, let the process exit. Don't batch chunks in a single Whisper call.\n- Keep the transcript at `/tmp/reeltalk_work/full_transcript.txt` until a new video is requested.\n\n## Requirements\n- `yt-dlp` (brew), `whisper` (brew), `tesseract` (brew), `ffmpeg` (brew)\n- First Whisper run downloads the `base` model (~142MB), then cached.\n\nFile v1.4.0:_meta.json\n\n{\n  \"ownerId\": \"kn73cbeee4tjqcp0sh35xqytt182zny5\",\n  \"slug\": \"reeltalk\",\n  \"version\": \"1.4.0\",\n  \"publishedAt\": 1777478734396\n}\n\nArchive v1.3.0: 2 files, 2939 bytes\n\nFiles: _meta.json (127b), SKILL.md (6460b)\n\nFile v1.3.0:SKILL.md\n\n---\nname: reeltalk\ndescription: ReelTalk — drop any Instagram, TikTok, YouTube Shorts, or X/Twitter video URL and have a chat about it. Extracts audio or video frames, transcribes speech with Whisper, falls back to OCR for text-on-screen reels, summarizes, and keeps the conversation going.\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"emoji\": \"🎬\",\n        \"os\": [\"darwin\", \"linux\"],\n        \"requires\": { \"bins\": [\"yt-dlp\", \"whisper\", \"tesseract\", \"ffmpeg\"] },\n        \"install\":\n          [\n            {\n              \"id\": \"brew-yt-dlp\",\n              \"kind\": \"brew\",\n              \"formula\": \"yt-dlp\",\n              \"bins\": [\"yt-dlp\"],\n              \"label\": \"Install yt-dlp (brew)\",\n            },\n            {\n              \"id\": \"brew-whisper\",\n              \"kind\": \"brew\",\n              \"formula\": \"whisper\",\n              \"bins\": [\"whisper\"],\n              \"label\": \"Install Whisper (brew)\",\n            },\n            {\n              \"id\": \"brew-tesseract\",\n              \"kind\": \"brew\",\n              \"formula\": \"tesseract\",\n              \"bins\": [\"tesseract\"],\n              \"label\": \"Install Tesseract OCR (brew)\",\n            },\n            {\n              \"id\": \"brew-tesseract-lang-hin\",\n              \"kind\": \"brew\",\n              \"formula\": \"tesseract-lang\",\n              \"bins\": [],\n              \"label\": \"Install Hindi language pack for Tesseract (brew)\",\n            },\n          ],\n      },\n  }\n---\n\n# ReelTalk\n\nAccept any Instagram, TikTok, YouTube Shorts, or X/Twitter video URL and get a full transcription, plain-English summary, and the ability to keep asking follow-up questions about the content.\n\n## What it does\n\n1. **Receive** any Instagram, TikTok, or YouTube Shorts URL from the user.\n2. **Extract** the audio track using yt-dlp and transcribe with Whisper.\n3. **If no speech detected** (music-only, silent, or failed transcription), **fall back to OCR**: download the video, extract frames at 1 fps, run Tesseract OCR on each frame, and aggregate the text.\n4. **Summarize** what was said (or shown on screen) in plain English.\n5. **Continue the conversation** — the user can ask follow-ups, dig deeper, or discuss.\n\n## When to trigger\n\nWhen the user shares a URL from any supported platform:\n- **Instagram** — reels, posts, stories, videos (`instagram.com`, `instagr.am`)\n- **TikTok** — videos (`tiktok.com`, `vm.tiktok.com`, `vt.tiktok.com`, `tiktok.tv`)\n- **YouTube** — Shorts (`youtube.com/shorts/`, `youtu.be` short links)\n- **X/Twitter** — posts with video (`x.com`, `twitter.com`)\n\nAlso trigger when the user pastes a link without context (e.g., drops a bare URL into chat).\n\n**X/Twitter note:** For X/Twitter posts, use the fxtwitter API to get the video URL without needing yt-dlp directly. Flow: fetch the tweet metadata via the fxtwitter API, extract the video URL from the response's media block, then download directly. If the tweet has no video, fall back to yt-dlp for the embedded tweet card.\n\n## Workflow\n\n### Audio path (speech content)\n\n1. List available formats for the video URL via yt-dlp.\n2. Extract the best audio stream to a temporary file.\n3. Transcribe the audio with Whisper using the small English model for a good balance of speed and accuracy.\n4. If transcription yields meaningful text, summarize and chat.\n5. Clean up temporary audio files after processing.\n\n### OCR fallback path (text-on-screen / music-only)\n\nIf Whisper returns empty, very short, or clearly hallucinated output (e.g. music interpreted as words):\n\n1. Download the highest-quality video format to a temporary file.\n2. Extract frames at 1 fps using ffmpeg.\n3. OCR each frame with Tesseract (try English first, then Hindi if supported). Use a subdirectory of the temp folder to avoid macOS extended attribute issues.\n4. Aggregate all OCR text, deduplicate similar frames, summarize the on-screen content.\n5. Clean up temporary video and frame files after processing.\n\n### X/Twitter-specific notes\n\n- For X/Twitter videos, use the fxtwitter API to get the direct video URL. yt-dlp often fails on x.com due to login requirements.\n- Parse the tweet's media block for the video URL and available resolution formats.\n- If the API returns no media block, the tweet might have no video (could be text-only).\n- Download the video with a standard HTTP client using a browser-like User-Agent header.\n- Use the tweet text field for a quick summary of what the tweet says before diving into video analysis.\n\n### TikTok-specific notes\n\n- TikTok blocks unauthenticated API access — yt-dlp handles extraction automatically.\n- TikTok videos often have watermarked and watermark-free formats; prefer h264 formats when available.\n- Some TikTok URLs redirect automatically — yt-dlp follows these.\n\n### YouTube-specific notes\n\n- YouTube Shorts are served as standard video formats; no special handling needed.\n- If age-restricted or login-required content fails, suggest using browser cookies as an optional workaround.\n\n## Requirements\n\n- `yt-dlp` (Homebrew: `brew install yt-dlp`)\n- `whisper` (OpenAI Whisper, Homebrew: `brew install whisper` or `pip install openai-whisper`)\n- `tesseract` (Homebrew: `brew install tesseract`)\n- `ffmpeg` (typically already installed as yt-dlp dependency)\n- Optional: `tesseract-lang` for Hindi/other language OCR support (`brew install tesseract-lang`)\n\n## Notes\n\n- **Core processing is local:** Audio transcription (Whisper), OCR (Tesseract), and video frame extraction (ffmpeg) all run entirely on-device. No media content ever leaves your machine.\n- **External network requests are limited to:** (1) downloading the source video/audio from the URL you provided, and (2) for X/Twitter posts only, fetching tweet metadata from a public no-auth API. No other external services are called.\n- **No browser cookies used automatically.** The cookies-from-browser workaround for YouTube is only mentioned as an optional manual fix.\n- The small English Whisper model balances speed vs accuracy on CPU.\n- First Whisper run downloads the model (~461MB), then caches it locally.\n- Text-on-screen reels with background music (common on Instagram/TikTok) will automatically fall through to OCR.\n- For long videos (over 5 minutes), consider using the base Whisper model for speed, or extract shorter segments.\n\n## Tags\n\ninstagram, tiktok, youtube, shorts, x, twitter, reel, audio, transcription, whisper, speech-to-text, ocr, tesseract, yt-dlp, ffmpeg, media, summarization, video, text-on-screen\n\nFile v1.3.0:_meta.json\n\n{\n  \"ownerId\": \"kn73cbeee4tjqcp0sh35xqytt182zny5\",\n  \"slug\": \"reeltalk\",\n  \"version\": \"1.3.0\",\n  \"publishedAt\": 1777428099945\n}\n\nArchive v1.2.2: 2 files, 3555 bytes\n\nFiles: SKILL.md (7725b), _meta.json (127b)\n\nFile v1.2.2:SKILL.md\n\n---\nname: reeltalk\ndescription: ReelTalk — drop any Instagram, TikTok, YouTube Shorts, or X/Twitter video URL and have a chat about it. Extracts audio or video frames, transcribes speech with Whisper, falls back to OCR for text-on-screen reels, summarizes, and keeps the conversation going.\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"emoji\": \"🎬\",\n        \"os\": [\"darwin\", \"linux\"],\n        \"requires\": { \"bins\": [\"yt-dlp\", \"whisper\", \"tesseract\", \"ffmpeg\"] },\n        \"install\":\n          [\n            {\n              \"id\": \"brew-yt-dlp\",\n              \"kind\": \"brew\",\n              \"formula\": \"yt-dlp\",\n              \"bins\": [\"yt-dlp\"],\n              \"label\": \"Install yt-dlp (brew)\",\n            },\n            {\n              \"id\": \"brew-whisper\",\n              \"kind\": \"brew\",\n              \"formula\": \"whisper\",\n              \"bins\": [\"whisper\"],\n              \"label\": \"Install Whisper (brew)\",\n            },\n            {\n              \"id\": \"brew-tesseract\",\n              \"kind\": \"brew\",\n              \"formula\": \"tesseract\",\n              \"bins\": [\"tesseract\"],\n              \"label\": \"Install Tesseract OCR (brew)\",\n            },\n            {\n              \"id\": \"brew-tesseract-lang-hin\",\n              \"kind\": \"brew\",\n              \"formula\": \"tesseract-lang\",\n              \"bins\": [],\n              \"label\": \"Install Hindi language pack for Tesseract (brew)\",\n            },\n          ],\n      },\n  }\n---\n\n# ReelTalk\n\nAccept any Instagram, TikTok, YouTube Shorts, or X/Twitter video URL and get a full transcription, plain-English summary, and the ability to keep asking follow-up questions about the content.\n\n## What it does\n\n1. **Receive** any Instagram, TikTok, or YouTube Shorts URL from the user.\n2. **Extract** the audio track using yt-dlp and transcribe with Whisper.\n3. **If no speech detected** (music-only, silent, or failed transcription), **fall back to OCR**: download the video, extract frames at 1 fps, run Tesseract OCR on each frame, and aggregate the text.\n4. **Summarize** what was said (or shown on screen) in plain English.\n5. **Continue the conversation** — the user can ask follow-ups, dig deeper, or discuss.\n\n## When to trigger\n\nWhen the user shares a URL from any supported platform:\n- **Instagram** — reels, posts, stories, videos (`instagram.com`, `instagr.am`)\n- **TikTok** — videos (`tiktok.com`, `vm.tiktok.com`, `vt.tiktok.com`, `tiktok.tv`)\n- **YouTube** — Shorts (`youtube.com/shorts/`, `youtu.be` short links)\n- **X/Twitter** — posts with video (`x.com`, `twitter.com`)\n\nAlso trigger when the user pastes a link without context (e.g., drops a bare URL into chat).\n\n**X/Twitter note:** For X/Twitter posts, the fxtwitter API (`https://api.fxtwitter.com/`) provides the video URL without needing yt-dlp. Use this as the primary path for X/Twitter since yt-dlp often fails on x.com. Flow: fetch the tweet metadata via fxtwitter API, extract the video URL from the response's `tweet.media.all[0].url`, then download directly with curl. If the tweet has no video, fall back to yt-dlp for the embedded tweet card.\n\n## Workflow\n\n### Metadata first (before audio)\n\nBefore extracting audio, fetch the post metadata. This often contains correct product names, hashtags, and context that audio transcription may miss or hallucinate.\n\n```bash\nyt-dlp --print title --print description --print uploader \"<url>\"\n```\n\nSave this metadata and include it in the final summary. If the description clearly names a product, person, or topic, use that as the authoritative source rather than relying solely on Whisper's audio transcription.\n\n### Audio path (speech content)\n\n1. Run `yt-dlp --list-formats <url>` to find available formats.\n2. For audio-only extraction: `yt-dlp -f \"bestaudio\" -o \"/tmp/reel_audio.%(ext)s\" \"<url>\"`\n3. Transcribe: `whisper /tmp/reel_audio.m4a --model small --language en --task transcribe`\n4. Combine transcription with metadata (description, title, uploader) for summarization. If there's a conflict between audio transcription and metadata (e.g., \"WinBook\" vs \"ASUS Zenbook\"), trust the metadata.\n5. Clean up: `rm -f /tmp/reel_audio.*`\n\n### OCR fallback path (text-on-screen / music-only)\n\nIf Whisper returns empty, very short, or clearly hallucinated output (e.g. music interpreted as words):\n\n1. Download the highest-quality video format: `yt-dlp -f \"bv*+ba/b\" -o \"/tmp/reel_video.mp4\" \"<url>\"`\n2. Extract frames at 1 fps: `ffmpeg -i /tmp/reel_video.mp4 -vf \"fps=1\" -vsync vfr -q:v 2 /tmp/reel_frame_%02d.jpg`\n3. OCR each frame with Tesseract (try English first, then Hindi if supported):\n   - `tesseract /tmp/reel_frame_XX.jpg stdout --psm 6`\n   - Use a subdirectory of `/tmp/` to avoid macOS extended attribute issues (e.g., `/tmp/reel_frames/`).\n4. Aggregate all OCR text, deduplicate similar frames, summarize the on-screen content.\n5. Clean up: `rm -f /tmp/reel_video.mp4 /tmp/reel_frame_*.jpg`\n\n### X/Twitter-specific notes\n\n- **Do NOT use yt-dlp for X/Twitter videos directly** — it often fails due to X's login requirements.\n- Instead, use the fxtwitter API: `curl -s 'https://api.fxtwitter.com/<username>/status/<tweet-id>'`\n- Parse `tweet.media.all[0].url` (the direct MP4 URL). The response also includes `formats` array with different resolutions.\n- If the API returns no media block, the tweet might have no video (could be a text-only post).\n- Prefer the highest resolution format from the `formats` array, or fall back to the direct `url` field.\n- Download with curl: `curl -sL -o /tmp/reel_video.mp4 -H \"User-Agent: Mozilla/5.0\" \"<video-url>\"`\n- Use the `tweet.text` field for a quick summary of what the tweet says before diving into video analysis.\n\n### TikTok-specific notes\n\n- TikTok blocks unauthenticated API — yt-dlp handles extraction automatically.\n- TikTok videos often have watermarked and watermark-free formats; prefer `h264_*` formats.\n- Some TikTok URLs redirect (`t.tiktok.com`, `vm.tiktok.com`) — yt-dlp follows these automatically.\n\n### YouTube-specific notes\n\n- YouTube Shorts are served as standard video formats; no special handling needed.\n- Use `--cookies-from-browser` if age-restricted or login-required content fails.\n\n## Requirements\n\n- `yt-dlp` (Homebrew: `brew install yt-dlp`)\n- `whisper` (OpenAI Whisper, Homebrew: `brew install whisper` or `pip install openai-whisper`)\n- `tesseract` (Homebrew: `brew install tesseract`)\n- `ffmpeg` (typically already installed as yt-dlp dependency)\n- Optional: `tesseract-lang` for Hindi/other language OCR support (`brew install tesseract-lang`)\n\n## Notes\n\n- **Core processing is local:** Audio transcription (Whisper), OCR (Tesseract), and video frame extraction (ffmpeg) all run entirely on-device. No media content ever leaves your machine.\n- **External network requests are limited to:** (1) downloading the source video/audio from the URL you provided, and (2) for X/Twitter posts only, fetching tweet metadata from `api.fxtwitter.com` (a public, no-auth API — no user data sent). No other external services are called.\n- **No browser cookies used.** The `--cookies-from-browser` flag for YouTube is never used automatically — it's an optional workaround listed only for the user to opt into manually.\n- The `small` English Whisper model balances speed vs accuracy on CPU.\n- First Whisper run downloads the model (~461MB), then cached.\n- Text-on-screen reels with background music (common on Instagram/TikTok) will automatically fall through to OCR.\n- For long videos (>5 min), consider using `base` Whisper model for speed, or extract shorter segments.\n\n## Tags\n\ninstagram, tiktok, youtube, shorts, x, twitter, reel, audio, transcription, whisper, speech-to-text, ocr, tesseract, yt-dlp, ffmpeg, media, summarization, video, text-on-screen\n\nFile v1.2.2:_meta.json\n\n{\n  \"ownerId\": \"kn73cbeee4tjqcp0sh35xqytt182zny5\",\n  \"slug\": \"reeltalk\",\n  \"version\": \"1.2.2\",\n  \"publishedAt\": 1777396572465\n}\n\nArchive v1.1.2: 2 files, 3555 bytes\n\nFiles: SKILL.md (7725b), _meta.json (127b)\n\nFile v1.1.2:SKILL.md\n\n---\nname: reeltalk\ndescription: ReelTalk — drop any Instagram, TikTok, YouTube Shorts, or X/Twitter video URL and have a chat about it. Extracts audio or video frames, transcribes speech with Whisper, falls back to OCR for text-on-screen reels, summarizes, and keeps the conversation going.\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"emoji\": \"🎬\",\n        \"os\": [\"darwin\", \"linux\"],\n        \"requires\": { \"bins\": [\"yt-dlp\", \"whisper\", \"tesseract\", \"ffmpeg\"] },\n        \"install\":\n          [\n            {\n              \"id\": \"brew-yt-dlp\",\n              \"kind\": \"brew\",\n              \"formula\": \"yt-dlp\",\n              \"bins\": [\"yt-dlp\"],\n              \"label\": \"Install yt-dlp (brew)\",\n            },\n            {\n              \"id\": \"brew-whisper\",\n              \"kind\": \"brew\",\n              \"formula\": \"whisper\",\n              \"bins\": [\"whisper\"],\n              \"label\": \"Install Whisper (brew)\",\n            },\n            {\n              \"id\": \"brew-tesseract\",\n              \"kind\": \"brew\",\n              \"formula\": \"tesseract\",\n              \"bins\": [\"tesseract\"],\n              \"label\": \"Install Tesseract OCR (brew)\",\n            },\n            {\n              \"id\": \"brew-tesseract-lang-hin\",\n              \"kind\": \"brew\",\n              \"formula\": \"tesseract-lang\",\n              \"bins\": [],\n              \"label\": \"Install Hindi language pack for Tesseract (brew)\",\n            },\n          ],\n      },\n  }\n---\n\n# ReelTalk\n\nAccept any Instagram, TikTok, YouTube Shorts, or X/Twitter video URL and get a full transcription, plain-English summary, and the ability to keep asking follow-up questions about the content.\n\n## What it does\n\n1. **Receive** any Instagram, TikTok, or YouTube Shorts URL from the user.\n2. **Extract** the audio track using yt-dlp and transcribe with Whisper.\n3. **If no speech detected** (music-only, silent, or failed transcription), **fall back to OCR**: download the video, extract frames at 1 fps, run Tesseract OCR on each frame, and aggregate the text.\n4. **Summarize** what was said (or shown on screen) in plain English.\n5. **Continue the conversation** — the user can ask follow-ups, dig deeper, or discuss.\n\n## When to trigger\n\nWhen the user shares a URL from any supported platform:\n- **Instagram** — reels, posts, stories, videos (`instagram.com`, `instagr.am`)\n- **TikTok** — videos (`tiktok.com`, `vm.tiktok.com`, `vt.tiktok.com`, `tiktok.tv`)\n- **YouTube** — Shorts (`youtube.com/shorts/`, `youtu.be` short links)\n- **X/Twitter** — posts with video (`x.com`, `twitter.com`)\n\nAlso trigger when the user pastes a link without context (e.g., drops a bare URL into chat).\n\n**X/Twitter note:** For X/Twitter posts, the fxtwitter API (`https://api.fxtwitter.com/`) provides the video URL without needing yt-dlp. Use this as the primary path for X/Twitter since yt-dlp often fails on x.com. Flow: fetch the tweet metadata via fxtwitter API, extract the video URL from the response's `tweet.media.all[0].url`, then download directly with curl. If the tweet has no video, fall back to yt-dlp for the embedded tweet card.\n\n## Workflow\n\n### Metadata first (before audio)\n\nBefore extracting audio, fetch the post metadata. This often contains correct product names, hashtags, and context that audio transcription may miss or hallucinate.\n\n```bash\nyt-dlp --print title --print description --print uploader \"<url>\"\n```\n\nSave this metadata and include it in the final summary. If the description clearly names a product, person, or topic, use that as the authoritative source rather than relying solely on Whisper's audio transcription.\n\n### Audio path (speech content)\n\n1. Run `yt-dlp --list-formats <url>` to find available formats.\n2. For audio-only extraction: `yt-dlp -f \"bestaudio\" -o \"/tmp/reel_audio.%(ext)s\" \"<url>\"`\n3. Transcribe: `whisper /tmp/reel_audio.m4a --model small --language en --task transcribe`\n4. Combine transcription with metadata (description, title, uploader) for summarization. If there's a conflict between audio transcription and metadata (e.g., \"WinBook\" vs \"ASUS Zenbook\"), trust the metadata.\n5. Clean up: `rm -f /tmp/reel_audio.*`\n\n### OCR fallback path (text-on-screen / music-only)\n\nIf Whisper returns empty, very short, or clearly hallucinated output (e.g. music interpreted as words):\n\n1. Download the highest-quality video format: `yt-dlp -f \"bv*+ba/b\" -o \"/tmp/reel_video.mp4\" \"<url>\"`\n2. Extract frames at 1 fps: `ffmpeg -i /tmp/reel_video.mp4 -vf \"fps=1\" -vsync vfr -q:v 2 /tmp/reel_frame_%02d.jpg`\n3. OCR each frame with Tesseract (try English first, then Hindi if supported):\n   - `tesseract /tmp/reel_frame_XX.jpg stdout --psm 6`\n   - Use a subdirectory of `/tmp/` to avoid macOS extended attribute issues (e.g., `/tmp/reel_frames/`).\n4. Aggregate all OCR text, deduplicate similar frames, summarize the on-screen content.\n5. Clean up: `rm -f /tmp/reel_video.mp4 /tmp/reel_frame_*.jpg`\n\n### X/Twitter-specific notes\n\n- **Do NOT use yt-dlp for X/Twitter videos directly** — it often fails due to X's login requirements.\n- Instead, use the fxtwitter API: `curl -s 'https://api.fxtwitter.com/<username>/status/<tweet-id>'`\n- Parse `tweet.media.all[0].url` (the direct MP4 URL). The response also includes `formats` array with different resolutions.\n- If the API returns no media block, the tweet might have no video (could be a text-only post).\n- Prefer the highest resolution format from the `formats` array, or fall back to the direct `url` field.\n- Download with curl: `curl -sL -o /tmp/reel_video.mp4 -H \"User-Agent: Mozilla/5.0\" \"<video-url>\"`\n- Use the `tweet.text` field for a quick summary of what the tweet says before diving into video analysis.\n\n### TikTok-specific notes\n\n- TikTok blocks unauthenticated API — yt-dlp handles extraction automatically.\n- TikTok videos often have watermarked and watermark-free formats; prefer `h264_*` formats.\n- Some TikTok URLs redirect (`t.tiktok.com`, `vm.tiktok.com`) — yt-dlp follows these automatically.\n\n### YouTube-specific notes\n\n- YouTube Shorts are served as standard video formats; no special handling needed.\n- Use `--cookies-from-browser` if age-restricted or login-required content fails.\n\n## Requirements\n\n- `yt-dlp` (Homebrew: `brew install yt-dlp`)\n- `whisper` (OpenAI Whisper, Homebrew: `brew install whisper` or `pip install openai-whisper`)\n- `tesseract` (Homebrew: `brew install tesseract`)\n- `ffmpeg` (typically already installed as yt-dlp dependency)\n- Optional: `tesseract-lang` for Hindi/other language OCR support (`brew install tesseract-lang`)\n\n## Notes\n\n- **Core processing is local:** Audio transcription (Whisper), OCR (Tesseract), and video frame extraction (ffmpeg) all run entirely on-device. No media content ever leaves your machine.\n- **External network requests are limited to:** (1) downloading the source video/audio from the URL you provided, and (2) for X/Twitter posts only, fetching tweet metadata from `api.fxtwitter.com` (a public, no-auth API — no user data sent). No other external services are called.\n- **No browser cookies used.** The `--cookies-from-browser` flag for YouTube is never used automatically — it's an optional workaround listed only for the user to opt into manually.\n- The `small` English Whisper model balances speed vs accuracy on CPU.\n- First Whisper run downloads the model (~461MB), then cached.\n- Text-on-screen reels with background music (common on Instagram/TikTok) will automatically fall through to OCR.\n- For long videos (>5 min), consider using `base` Whisper model for speed, or extract shorter segments.\n\n## Tags\n\ninstagram, tiktok, youtube, shorts, x, twitter, reel, audio, transcription, whisper, speech-to-text, ocr, tesseract, yt-dlp, ffmpeg, media, summarization, video, text-on-screen\n\nFile v1.1.2:_meta.json\n\n{\n  \"ownerId\": \"kn73cbeee4tjqcp0sh35xqytt182zny5\",\n  \"slug\": \"reeltalk\",\n  \"version\": \"1.1.2\",\n  \"publishedAt\": 1777396421544\n}\n\nArchive v1.2.1: 2 files, 3277 bytes\n\nFiles: SKILL.md (7086b), _meta.json (127b)\n\nFile v1.2.1:SKILL.md\n\n---\nname: reeltalk\ndescription: ReelTalk — drop any Instagram, TikTok, YouTube Shorts, or X/Twitter video URL and have a chat about it. Extracts audio or video frames, transcribes speech with Whisper, falls back to OCR for text-on-screen reels, summarizes, and keeps the conversation going.\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"emoji\": \"🎬\",\n        \"os\": [\"darwin\", \"linux\"],\n        \"requires\": { \"bins\": [\"yt-dlp\", \"whisper\", \"tesseract\", \"ffmpeg\"] },\n        \"install\":\n          [\n            {\n              \"id\": \"brew-yt-dlp\",\n              \"kind\": \"brew\",\n              \"formula\": \"yt-dlp\",\n              \"bins\": [\"yt-dlp\"],\n              \"label\": \"Install yt-dlp (brew)\",\n            },\n            {\n              \"id\": \"brew-whisper\",\n              \"kind\": \"brew\",\n              \"formula\": \"whisper\",\n              \"bins\": [\"whisper\"],\n              \"label\": \"Install Whisper (brew)\",\n            },\n            {\n              \"id\": \"brew-tesseract\",\n              \"kind\": \"brew\",\n              \"formula\": \"tesseract\",\n              \"bins\": [\"tesseract\"],\n              \"label\": \"Install Tesseract OCR (brew)\",\n            },\n            {\n              \"id\": \"brew-tesseract-lang-hin\",\n              \"kind\": \"brew\",\n              \"formula\": \"tesseract-lang\",\n              \"bins\": [],\n              \"label\": \"Install Hindi language pack for Tesseract (brew)\",\n            },\n          ],\n      },\n  }\n---\n\n# ReelTalk\n\nAccept any Instagram, TikTok, YouTube Shorts, or X/Twitter video URL and get a full transcription, plain-English summary, and the ability to keep asking follow-up questions about the content.\n\n## What it does\n\n1. **Receive** any Instagram, TikTok, or YouTube Shorts URL from the user.\n2. **Extract** the audio track using yt-dlp and transcribe with Whisper.\n3. **If no speech detected** (music-only, silent, or failed transcription), **fall back to OCR**: download the video, extract frames at 1 fps, run Tesseract OCR on each frame, and aggregate the text.\n4. **Summarize** what was said (or shown on screen) in plain English.\n5. **Continue the conversation** — the user can ask follow-ups, dig deeper, or discuss.\n\n## When to trigger\n\nWhen the user shares a URL from any supported platform:\n- **Instagram** — reels, posts, stories, videos (`instagram.com`, `instagr.am`)\n- **TikTok** — videos (`tiktok.com`, `vm.tiktok.com`, `vt.tiktok.com`, `tiktok.tv`)\n- **YouTube** — Shorts (`youtube.com/shorts/`, `youtu.be` short links)\n- **X/Twitter** — posts with video (`x.com`, `twitter.com`)\n\nAlso trigger when the user pastes a link without context (e.g., drops a bare URL into chat).\n\n**X/Twitter note:** For X/Twitter posts, the fxtwitter API (`https://api.fxtwitter.com/`) provides the video URL without needing yt-dlp. Use this as the primary path for X/Twitter since yt-dlp often fails on x.com. Flow: fetch the tweet metadata via fxtwitter API, extract the video URL from the response's `tweet.media.all[0].url`, then download directly with curl. If the tweet has no video, fall back to yt-dlp for the embedded tweet card.\n\n## Workflow\n\n### Audio path (speech content)\n\n1. Run `yt-dlp --list-formats <url>` to find available formats.\n2. For audio-only extraction: `yt-dlp -f \"bestaudio\" -o \"/tmp/reel_audio.%(ext)s\" \"<url>\"`\n3. Transcribe: `whisper /tmp/reel_audio.m4a --model small --language en --task transcribe`\n4. If transcription yields meaningful text → summarize and chat.\n5. Clean up: `rm -f /tmp/reel_audio.*`\n\n### OCR fallback path (text-on-screen / music-only)\n\nIf Whisper returns empty, very short, or clearly hallucinated output (e.g. music interpreted as words):\n\n1. Download the highest-quality video format: `yt-dlp -f \"bv*+ba/b\" -o \"/tmp/reel_video.mp4\" \"<url>\"`\n2. Extract frames at 1 fps: `ffmpeg -i /tmp/reel_video.mp4 -vf \"fps=1\" -vsync vfr -q:v 2 /tmp/reel_frame_%02d.jpg`\n3. OCR each frame with Tesseract (try English first, then Hindi if supported):\n   - `tesseract /tmp/reel_frame_XX.jpg stdout --psm 6`\n   - Use a subdirectory of `/tmp/` to avoid macOS extended attribute issues (e.g., `/tmp/reel_frames/`).\n4. Aggregate all OCR text, deduplicate similar frames, summarize the on-screen content.\n5. Clean up: `rm -f /tmp/reel_video.mp4 /tmp/reel_frame_*.jpg`\n\n### X/Twitter-specific notes\n\n- **Do NOT use yt-dlp for X/Twitter videos directly** — it often fails due to X's login requirements.\n- Instead, use the fxtwitter API: `curl -s 'https://api.fxtwitter.com/<username>/status/<tweet-id>'`\n- Parse `tweet.media.all[0].url` (the direct MP4 URL). The response also includes `formats` array with different resolutions.\n- If the API returns no media block, the tweet might have no video (could be a text-only post).\n- Prefer the highest resolution format from the `formats` array, or fall back to the direct `url` field.\n- Download with curl: `curl -sL -o /tmp/reel_video.mp4 -H \"User-Agent: Mozilla/5.0\" \"<video-url>\"`\n- Use the `tweet.text` field for a quick summary of what the tweet says before diving into video analysis.\n\n### TikTok-specific notes\n\n- TikTok blocks unauthenticated API — yt-dlp handles extraction automatically.\n- TikTok videos often have watermarked and watermark-free formats; prefer `h264_*` formats.\n- Some TikTok URLs redirect (`t.tiktok.com`, `vm.tiktok.com`) — yt-dlp follows these automatically.\n\n### YouTube-specific notes\n\n- YouTube Shorts are served as standard video formats; no special handling needed.\n- Use `--cookies-from-browser` if age-restricted or login-required content fails.\n\n## Requirements\n\n- `yt-dlp` (Homebrew: `brew install yt-dlp`)\n- `whisper` (OpenAI Whisper, Homebrew: `brew install whisper` or `pip install openai-whisper`)\n- `tesseract` (Homebrew: `brew install tesseract`)\n- `ffmpeg` (typically already installed as yt-dlp dependency)\n- Optional: `tesseract-lang` for Hindi/other language OCR support (`brew install tesseract-lang`)\n\n## Notes\n\n- **Core processing is local:** Audio transcription (Whisper), OCR (Tesseract), and video frame extraction (ffmpeg) all run entirely on-device. No media content ever leaves your machine.\n- **External network requests are limited to:** (1) downloading the source video/audio from the URL you provided, and (2) for X/Twitter posts only, fetching tweet metadata from `api.fxtwitter.com` (a public, no-auth API — no user data sent). No other external services are called.\n- **No browser cookies used.** The `--cookies-from-browser` flag for YouTube is never used automatically — it's an optional workaround listed only for the user to opt into manually.\n- The `small` English Whisper model balances speed vs accuracy on CPU.\n- First Whisper run downloads the model (~461MB), then cached.\n- Text-on-screen reels with background music (common on Instagram/TikTok) will automatically fall through to OCR.\n- For long videos (>5 min), consider using `base` Whisper model for speed, or extract shorter segments.\n\n## Tags\n\ninstagram, tiktok, youtube, shorts, x, twitter, reel, audio, transcription, whisper, speech-to-text, ocr, tesseract, yt-dlp, ffmpeg, media, summarization, video, text-on-screen\n\nFile v1.2.1:_meta.json\n\n{\n  \"ownerId\": \"kn73cbeee4tjqcp0sh35xqytt182zny5\",\n  \"slug\": \"reeltalk\",\n  \"version\": \"1.2.1\",\n  \"publishedAt\": 1777393455201\n}\n\nArchive v1.2.0: 2 files, 3115 bytes\n\nFiles: SKILL.md (6665b), _meta.json (127b)\n\nFile v1.2.0:SKILL.md\n\n---\nname: reeltalk\ndescription: ReelTalk — drop any Instagram, TikTok, YouTube Shorts, or X/Twitter video URL and have a chat about it. Extracts audio or video frames, transcribes speech with Whisper, falls back to OCR for text-on-screen reels, summarizes, and keeps the conversation going.\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"emoji\": \"🎬\",\n        \"os\": [\"darwin\", \"linux\"],\n        \"requires\": { \"bins\": [\"yt-dlp\", \"whisper\", \"tesseract\", \"ffmpeg\"] },\n        \"install\":\n          [\n            {\n              \"id\": \"brew-yt-dlp\",\n              \"kind\": \"brew\",\n              \"formula\": \"yt-dlp\",\n              \"bins\": [\"yt-dlp\"],\n              \"label\": \"Install yt-dlp (brew)\",\n            },\n            {\n              \"id\": \"brew-whisper\",\n              \"kind\": \"brew\",\n              \"formula\": \"whisper\",\n              \"bins\": [\"whisper\"],\n              \"label\": \"Install Whisper (brew)\",\n            },\n            {\n              \"id\": \"brew-tesseract\",\n              \"kind\": \"brew\",\n              \"formula\": \"tesseract\",\n              \"bins\": [\"tesseract\"],\n              \"label\": \"Install Tesseract OCR (brew)\",\n            },\n            {\n              \"id\": \"brew-tesseract-lang-hin\",\n              \"kind\": \"brew\",\n              \"formula\": \"tesseract-lang\",\n              \"bins\": [],\n              \"label\": \"Install Hindi language pack for Tesseract (brew)\",\n            },\n          ],\n      },\n  }\n---\n\n# ReelTalk\n\nAccept any Instagram, TikTok, YouTube Shorts, or X/Twitter video URL and get a full transcription, plain-English summary, and the ability to keep asking follow-up questions about the content — all processed entirely locally.\n\n## What it does\n\n1. **Receive** any Instagram, TikTok, or YouTube Shorts URL from the user.\n2. **Extract** the audio track using yt-dlp and transcribe with Whisper.\n3. **If no speech detected** (music-only, silent, or failed transcription), **fall back to OCR**: download the video, extract frames at 1 fps, run Tesseract OCR on each frame, and aggregate the text.\n4. **Summarize** what was said (or shown on screen) in plain English.\n5. **Continue the conversation** — the user can ask follow-ups, dig deeper, or discuss.\n\n## When to trigger\n\nWhen the user shares a URL from any supported platform:\n- **Instagram** — reels, posts, stories, videos (`instagram.com`, `instagr.am`)\n- **TikTok** — videos (`tiktok.com`, `vm.tiktok.com`, `vt.tiktok.com`, `tiktok.tv`)\n- **YouTube** — Shorts (`youtube.com/shorts/`, `youtu.be` short links)\n- **X/Twitter** — posts with video (`x.com`, `twitter.com`)\n\nAlso trigger when the user pastes a link without context (e.g., drops a bare URL into chat).\n\n**X/Twitter note:** For X/Twitter posts, the fxtwitter API (`https://api.fxtwitter.com/`) provides the video URL without needing yt-dlp. Use this as the primary path for X/Twitter since yt-dlp often fails on x.com. Flow: fetch the tweet metadata via fxtwitter API, extract the video URL from the response's `tweet.media.all[0].url`, then download directly with curl. If the tweet has no video, fall back to yt-dlp for the embedded tweet card.\n\n## Workflow\n\n### Audio path (speech content)\n\n1. Run `yt-dlp --list-formats <url>` to find available formats.\n2. For audio-only extraction: `yt-dlp -f \"bestaudio\" -o \"/tmp/reel_audio.%(ext)s\" \"<url>\"`\n3. Transcribe: `whisper /tmp/reel_audio.m4a --model small --language en --task transcribe`\n4. If transcription yields meaningful text → summarize and chat.\n5. Clean up: `rm -f /tmp/reel_audio.*`\n\n### OCR fallback path (text-on-screen / music-only)\n\nIf Whisper returns empty, very short, or clearly hallucinated output (e.g. music interpreted as words):\n\n1. Download the highest-quality video format: `yt-dlp -f \"bv*+ba/b\" -o \"/tmp/reel_video.mp4\" \"<url>\"`\n2. Extract frames at 1 fps: `ffmpeg -i /tmp/reel_video.mp4 -vf \"fps=1\" -vsync vfr -q:v 2 /tmp/reel_frame_%02d.jpg`\n3. OCR each frame with Tesseract (try English first, then Hindi if supported):\n   - `tesseract /tmp/reel_frame_XX.jpg stdout --psm 6`\n   - Alternatively copy to `$HOME/Desktop/` first if `/tmp/` path causes issues.\n4. Aggregate all OCR text, deduplicate similar frames, summarize the on-screen content.\n5. Clean up: `rm -f /tmp/reel_video.mp4 /tmp/reel_frame_*.jpg`\n\n### X/Twitter-specific notes\n\n- **Do NOT use yt-dlp for X/Twitter videos directly** — it often fails due to X's login requirements.\n- Instead, use the fxtwitter API: `curl -s 'https://api.fxtwitter.com/<username>/status/<tweet-id>'`\n- Parse `tweet.media.all[0].url` (the direct MP4 URL). The response also includes `formats` array with different resolutions.\n- If the API returns no media block, the tweet might have no video (could be a text-only post).\n- Prefer the highest resolution format from the `formats` array, or fall back to the direct `url` field.\n- Download with curl: `curl -sL -o /tmp/reel_video.mp4 -H \"User-Agent: Mozilla/5.0\" \"<video-url>\"`\n- Use the `tweet.text` field for a quick summary of what the tweet says before diving into video analysis.\n\n### TikTok-specific notes\n\n- TikTok blocks unauthenticated API — yt-dlp handles extraction automatically.\n- TikTok videos often have watermarked and watermark-free formats; prefer `h264_*` formats.\n- Some TikTok URLs redirect (`t.tiktok.com`, `vm.tiktok.com`) — yt-dlp follows these automatically.\n\n### YouTube-specific notes\n\n- YouTube Shorts are served as standard video formats; no special handling needed.\n- Use `--cookies-from-browser` if age-restricted or login-required content fails.\n\n## Requirements\n\n- `yt-dlp` (Homebrew: `brew install yt-dlp`)\n- `whisper` (OpenAI Whisper, Homebrew: `brew install whisper` or `pip install openai-whisper`)\n- `tesseract` (Homebrew: `brew install tesseract`)\n- `ffmpeg` (typically already installed as yt-dlp dependency)\n- Optional: `tesseract-lang` for Hindi/other language OCR support (`brew install tesseract-lang`)\n\n## Notes\n\n- **All processing is local** — nothing sent to external APIs except the initial URL fetch.\n- The `small` English Whisper model balances speed vs accuracy on CPU.\n- First Whisper run downloads the model (~461MB), then cached.\n- Text-on-screen reels with background music (common on Instagram/TikTok) will automatically fall through to OCR.\n- Copy frames to `$HOME/Desktop/` for OCR if Tesseract has issues with `/tmp/` paths (macOS extended attributes can interfere).\n- For long videos (>5 min), consider using `base` Whisper model for speed, or extract shorter segments.\n\n## Tags\n\ninstagram, tiktok, youtube, shorts, x, twitter, reel, audio, transcription, whisper, speech-to-text, ocr, tesseract, yt-dlp, ffmpeg, media, summarization, video, text-on-screen\n\nFile v1.2.0:_meta.json\n\n{\n  \"ownerId\": \"kn73cbeee4tjqcp0sh35xqytt182zny5\",\n  \"slug\": \"reeltalk\",\n  \"version\": \"1.2.0\",\n  \"publishedAt\": 1777393197822\n}\n\nArchive v1.1.1: 2 files, 2581 bytes\n\nFiles: SKILL.md (5344b), _meta.json (127b)\n\nFile v1.1.1:SKILL.md\n\n---\nname: reeltalk\ndescription: ReelTalk — drop any Instagram, TikTok, or YouTube Shorts URL and have a chat about it. Extracts audio or video frames, transcribes speech with Whisper, falls back to OCR for text-on-screen reels, summarizes, and keeps the conversation going.\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"emoji\": \"🎬\",\n        \"os\": [\"darwin\", \"linux\"],\n        \"requires\": { \"bins\": [\"yt-dlp\", \"whisper\", \"tesseract\", \"ffmpeg\"] },\n        \"install\":\n          [\n            {\n              \"id\": \"brew-yt-dlp\",\n              \"kind\": \"brew\",\n              \"formula\": \"yt-dlp\",\n              \"bins\": [\"yt-dlp\"],\n              \"label\": \"Install yt-dlp (brew)\",\n            },\n            {\n              \"id\": \"brew-whisper\",\n              \"kind\": \"brew\",\n              \"formula\": \"whisper\",\n              \"bins\": [\"whisper\"],\n              \"label\": \"Install Whisper (brew)\",\n            },\n            {\n              \"id\": \"brew-tesseract\",\n              \"kind\": \"brew\",\n              \"formula\": \"tesseract\",\n              \"bins\": [\"tesseract\"],\n              \"label\": \"Install Tesseract OCR (brew)\",\n            },\n            {\n              \"id\": \"brew-tesseract-lang-hin\",\n              \"kind\": \"brew\",\n              \"formula\": \"tesseract-lang\",\n              \"bins\": [],\n              \"label\": \"Install Hindi language pack for Tesseract (brew)\",\n            },\n          ],\n      },\n  }\n---\n\n# ReelTalk\n\nAccept any Instagram, TikTok, or YouTube Shorts URL and get a full transcription, plain-English summary, and the ability to keep asking follow-up questions about the content — all processed entirely locally.\n\n## What it does\n\n1. **Receive** any Instagram, TikTok, or YouTube Shorts URL from the user.\n2. **Extract** the audio track using yt-dlp and transcribe with Whisper.\n3. **If no speech detected** (music-only, silent, or failed transcription), **fall back to OCR**: download the video, extract frames at 1 fps, run Tesseract OCR on each frame, and aggregate the text.\n4. **Summarize** what was said (or shown on screen) in plain English.\n5. **Continue the conversation** — the user can ask follow-ups, dig deeper, or discuss.\n\n## When to trigger\n\nWhen the user shares a URL from any supported platform:\n- **Instagram** — reels, posts, stories, videos (`instagram.com`, `instagr.am`)\n- **TikTok** — videos (`tiktok.com`, `vm.tiktok.com`, `vt.tiktok.com`, `tiktok.tv`)\n- **YouTube** — Shorts (`youtube.com/shorts/`, `youtu.be` short links)\n\nAlso trigger when the user pastes a link without context (e.g., drops a bare URL into chat).\n\n## Workflow\n\n### Audio path (speech content)\n\n1. Run `yt-dlp --list-formats <url>` to find available formats.\n2. For audio-only extraction: `yt-dlp -f \"bestaudio\" -o \"/tmp/reel_audio.%(ext)s\" \"<url>\"`\n3. Transcribe: `whisper /tmp/reel_audio.m4a --model small --language en --task transcribe`\n4. If transcription yields meaningful text → summarize and chat.\n5. Clean up: `rm -f /tmp/reel_audio.*`\n\n### OCR fallback path (text-on-screen / music-only)\n\nIf Whisper returns empty, very short, or clearly hallucinated output (e.g. music interpreted as words):\n\n1. Download the highest-quality video format: `yt-dlp -f \"bv*+ba/b\" -o \"/tmp/reel_video.mp4\" \"<url>\"`\n2. Extract frames at 1 fps: `ffmpeg -i /tmp/reel_video.mp4 -vf \"fps=1\" -vsync vfr -q:v 2 /tmp/reel_frame_%02d.jpg`\n3. OCR each frame with Tesseract (try English first, then Hindi if supported):\n   - `tesseract /tmp/reel_frame_XX.jpg stdout --psm 6`\n   - Alternatively copy to `$HOME/Desktop/` first if `/tmp/` path causes issues.\n4. Aggregate all OCR text, deduplicate similar frames, summarize the on-screen content.\n5. Clean up: `rm -f /tmp/reel_video.mp4 /tmp/reel_frame_*.jpg`\n\n### TikTok-specific notes\n\n- TikTok blocks unauthenticated API — yt-dlp handles extraction automatically.\n- TikTok videos often have watermarked and watermark-free formats; prefer `h264_*` formats.\n- Some TikTok URLs redirect (`t.tiktok.com`, `vm.tiktok.com`) — yt-dlp follows these automatically.\n\n### YouTube-specific notes\n\n- YouTube Shorts are served as standard video formats; no special handling needed.\n- Use `--cookies-from-browser` if age-restricted or login-required content fails.\n\n## Requirements\n\n- `yt-dlp` (Homebrew: `brew install yt-dlp`)\n- `whisper` (OpenAI Whisper, Homebrew: `brew install whisper` or `pip install openai-whisper`)\n- `tesseract` (Homebrew: `brew install tesseract`)\n- `ffmpeg` (typically already installed as yt-dlp dependency)\n- Optional: `tesseract-lang` for Hindi/other language OCR support (`brew install tesseract-lang`)\n\n## Notes\n\n- **All processing is local** — nothing sent to external APIs except the initial URL fetch.\n- The `small` English Whisper model balances speed vs accuracy on CPU.\n- First Whisper run downloads the model (~461MB), then cached.\n- Text-on-screen reels with background music (common on Instagram/TikTok) will automatically fall through to OCR.\n- Copy frames to `$HOME/Desktop/` for OCR if Tesseract has issues with `/tmp/` paths (macOS extended attributes can interfere).\n- For long videos (>5 min), consider using `base` Whisper model for speed, or extract shorter segments.\n\n## Tags\n\ninstagram, tiktok, youtube, shorts, reel, audio, transcription, whisper, speech-to-text, ocr, tesseract, yt-dlp, ffmpeg, media, summarization, video, text-on-screen\n\nFile v1.1.1:_meta.json\n\n{\n  \"ownerId\": \"kn73cbeee4tjqcp0sh35xqytt182zny5\",\n  \"slug\": \"reeltalk\",\n  \"version\": \"1.1.1\",\n  \"publishedAt\": 1777355741575\n}\n\nArchive v1.1.0: 2 files, 2200 bytes\n\nFiles: SKILL.md (4414b), _meta.json (127b)\n\nFile v1.1.0:SKILL.md\n\n---\nname: reeltalk\ndescription: ReelTalk — drop any Instagram URL and have a chat about it. Extracts audio or video frames, transcribes speech with Whisper, falls back to OCR for text-on-screen reels, summarizes, and keeps the conversation going.\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"emoji\": \"🎬\",\n        \"os\": [\"darwin\", \"linux\"],\n        \"requires\": { \"bins\": [\"yt-dlp\", \"whisper\", \"tesseract\", \"ffmpeg\"] },\n        \"install\":\n          [\n            {\n              \"id\": \"brew-yt-dlp\",\n              \"kind\": \"brew\",\n              \"formula\": \"yt-dlp\",\n              \"bins\": [\"yt-dlp\"],\n              \"label\": \"Install yt-dlp (brew)\",\n            },\n            {\n              \"id\": \"brew-whisper\",\n              \"kind\": \"brew\",\n              \"formula\": \"whisper\",\n              \"bins\": [\"whisper\"],\n              \"label\": \"Install Whisper (brew)\",\n            },\n            {\n              \"id\": \"brew-tesseract\",\n              \"kind\": \"brew\",\n              \"formula\": \"tesseract\",\n              \"bins\": [\"tesseract\"],\n              \"label\": \"Install Tesseract OCR (brew)\",\n            },\n            {\n              \"id\": \"brew-tesseract-lang-hin\",\n              \"kind\": \"brew\",\n              \"formula\": \"tesseract-lang\",\n              \"bins\": [],\n              \"label\": \"Install Hindi language pack for Tesseract (brew)\",\n            },\n          ],\n      },\n  }\n---\n\n# ReelTalk\n\nAccept any Instagram URL (reels, posts, stories, videos) and get a full transcription, plain-English summary, and the ability to keep asking follow-up questions about the content — all processed entirely locally.\n\n## What it does\n\n1. **Receive** any Instagram URL from the user.\n2. **Extract** the audio track using yt-dlp and transcribe with Whisper.\n3. **If no speech detected** (music-only, silent, or failed transcription), **fall back to OCR**: download the video, extract frames at 1 fps, run Tesseract OCR on each frame, and aggregate the text.\n4. **Summarize** what was said (or shown on screen) in plain English.\n5. **Continue the conversation** — the user can ask follow-ups, dig deeper, or discuss.\n\n## When to trigger\n\nWhen the user shares an Instagram URL (reel, post, story, or video link).\n\n## Workflow\n\n### Audio path (speech content)\n\n1. Run `yt-dlp --list-formats <url>` to find the audio-only format ID (look for `audio only` / `m4a`).\n2. Download: `yt-dlp -f <format-id> -o \"/tmp/ig_audio.%(ext)s\" \"<url>\"`\n3. Transcribe: `whisper /tmp/ig_audio.m4a --model small --language en --task transcribe`\n4. If transcription yields meaningful text → summarize and chat.\n5. Clean up: `rm -f /tmp/ig_audio.*`\n\n### OCR fallback path (text-on-screen / music-only)\n\nIf Whisper returns empty, very short, or clearly hallucinated output (e.g. music interpreted as words):\n\n1. Download the highest-quality video format: `yt-dlp -f \"<best-video-format>\" -o \"/tmp/ig_video.mp4\" \"<url>\"`\n2. Extract frames at 1 fps: `ffmpeg -i /tmp/ig_video.mp4 -vf \"fps=1\" -vsync vfr -q:v 2 /tmp/ig_frame_%02d.jpg`\n3. OCR each frame with Tesseract (try English first, then Hindi if supported):\n   - `tesseract /tmp/ig_frame_XX.jpg stdout --psm 6`\n   - Alternatively copy to `$HOME/Desktop/` first if `/tmp/` path causes issues.\n4. Aggregate all OCR text, deduplicate similar frames, summarize the on-screen content.\n5. Clean up: `rm -f /tmp/ig_video.mp4 /tmp/ig_frame_*.jpg`\n\n## Requirements\n\n- `yt-dlp` (Homebrew: `brew install yt-dlp`)\n- `whisper` (OpenAI Whisper, Homebrew: `brew install whisper` or `pip install openai-whisper`)\n- `tesseract` (Homebrew: `brew install tesseract`)\n- `ffmpeg` (typically already installed as yt-dlp dependency)\n- Optional: `tesseract-lang` for Hindi/other language OCR support (`brew install tesseract-lang`)\n\n## Notes\n\n- Instagram blocks unauthenticated API — yt-dlp handles session setup automatically.\n- The `small` English Whisper model balances speed vs accuracy on CPU.\n- First Whisper run downloads the model (~461MB), then cached.\n- Text-on-screen reels with background music (common on Instagram) will automatically fall through to OCR.\n- Copy frames to `$HOME/Desktop/` for OCR if Tesseract has issues with `/tmp/` paths (macOS extended attributes can interfere).\n- All processing is local — nothing sent to external APIs.\n\n## Tags\n\ninstagram, reel, audio, transcription, whisper, speech-to-text, ocr, tesseract, yt-dlp, ffmpeg, media, summarization, video, text-on-screen\n\nFile v1.1.0:_meta.json\n\n{\n  \"ownerId\": \"kn73cbeee4tjqcp0sh35xqytt182zny5\",\n  \"slug\": \"reeltalk\",\n  \"version\": \"1.1.0\",\n  \"publishedAt\": 1777321543706\n}","readmeExcerpt":"Skill: ReelTalk Owner: ameshalexk Summary: Helper for processing shared video links. Takes a URL, downloads the audio track, creates a text transcript, and produces a summary. Supports all major platf... Tags: audio:1.4.0, ffmpeg:1.4.0, instagram:1.4.0, latest:1.4.2, media:1.4.0, ocr:1.4.0, reel:1.4.0, shorts:1.4.0, speech-to-text:1.4.0, summarization:1.4.0, tesseract:1.4.0, text-on-screen:1.4.0, tiktok:1.4.0, transc","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"rm -rf /tmp/reeltalk_*\nmkdir -p /tmp/reeltalk_work"},{"language":"bash","snippet":"URL=\"<url>\"\n# Reject shell metacharacters\nif printf '%s' \"$URL\" | grep -qE '[;|&`$()]'; then\n  echo \"Invalid URL: contains disallowed characters\"\n  exit 1\nfi"},{"language":"bash","snippet":"yt-dlp --print title --print description --print uploader \"$URL\" \\\n  2>/dev/null > /tmp/reeltalk_work/metadata.txt"},{"language":"bash","snippet":"yt-dlp -f \"bestaudio\" -o \"/tmp/reeltalk_work/audio.%(ext)s\" \"$URL\""},{"language":"bash","snippet":"ffprobe -v error -show_entries format=duration -of \\\n  default=noprint_wrappers=1:nokey=1 /tmp/reeltalk_work/audio.m4a"},{"language":"bash","snippet":"ffmpeg -i /tmp/reeltalk_work/audio.m4a -f segment -segment_time 300 \\\n  -acodec pcm_s16le -ac 1 -ar 16000 /tmp/reeltalk_work/chunk_%03d.wav"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: reeltalk\ndescription: >\n  Helper for processing shared video links. Takes a URL, downloads the\n  audio track, creates a text transcript, and produces a summary.\n  Supports all major platforms. Good for understanding video content\n  without watching it.\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"emoji\": \"🎬\",\n        \"os\": [\"darwin\", \"linux\"],\n        \"requires\": { \"bins\": [\"yt-dlp\", \"whisper\", \"tesseract\", \"ffmpeg\"] },\n        \"install\":\n          [\n            {\n              \"id\": \"brew-yt-dlp\",\n              \"kind\": \"brew\",\n              \"formula\": \"yt-dlp\",\n              \"bins\": [\"yt-dlp\"],\n              \"label\": \"Install yt-dlp (brew)\",\n            },\n            {\n              \"id\": \"brew-whisper\",\n              \"kind\": \"brew\",\n              \"formula\": \"whisper\",\n              \"bins\": [\"whisper\"],\n              \"label\": \"Install Whisper (brew)\",\n            },\n            {\n              \"id\": \"brew-tesseract\",\n              \"kind\": \"brew\",\n              \"formula\": \"tesseract\",\n              \"bins\": [\"tesseract\"],\n              \"label\": \"Install Tesseract OCR (brew)\",\n            },\n            {\n              \"id\": \"brew-tesseract-lang-hin\",\n              \"kind\": \"brew\",\n              \"formula\": \"tesseract-lang\",\n              \"bins\": [],\n              \"label\": \"Install Hindi language pack for Tesseract (brew)\",\n            },\n          ],\n      },\n  }\n---\n\n# ReelTalk\n\nProcess a video link: download audio, transcribe, and summarize. Falls back to image text extraction when no speech is present.\n\n⚠️ **Videos longer than 5 minutes** will take roughly 1 min of processing per minute of video on CPU. Warn the user before starting.\n\n## Steps\n\n### 0. Fresh start\n```bash\nrm -rf /tmp/reeltalk_*\nmkdir -p /tmp/reeltalk_work\n```\n\n### 1. Validate URL\nStore the user-provided URL in a variable and reject anything that looks like a shell injection. Only allow `http://`, `https://`, or `www.` prefixes. Reject inputs containing shell metacharacters (`;`, `|`, `&`, `` ` ``, `$`, `(`, `)`).\n```bash\nURL=\"<url>\"\n# Reject shell metacharacters\nif printf '%s' \"$URL\" | grep -qE '[;|&`$()]'; then\n  echo \"Invalid URL: contains disallowed characters\"\n  exit 1\nfi\n```\n\n### 2. Get metadata\n```bash\nyt-dlp --print title --print description --print uploader \"$URL\" \\\n  2>/dev/null > /tmp/reeltalk_work/metadata.txt\n```\n\n### 3. Audio\n```bash\nyt-dlp -f \"bestaudio\" -o \"/tmp/reeltalk_work/audio.%(ext)s\" \"$URL\"\n```\n\n### 4. Check length & split\n```bash\nffprobe -v error -show_entries format=duration -of \\\n  default=noprint_wrappers=1:nokey=1 /tmp/reeltalk_work/audio.m4a\n```\nIf duration > 300, warn user, then split:\n```bash\nffmpeg -i /tmp/reeltalk_work/audio.m4a -f segment -segment_time 300 \\\n  -acodec pcm_s16le -ac 1 -ar 16000 /tmp/reeltalk_work/chunk_%03d.wav\n```\n\n### 4. Transcribe\nUse the `base` Whisper model (memory-efficient on 8GB machines).\n```bash\nfor chunk in /tmp/reeltalk_work/chunk_*.wav; do\n  base=$(basename \"$chunk\" .wav)\n  whisper \"$chunk\" --model base --"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn73cbeee4tjqcp0sh35xqytt182zny5\",\n  \"slug\": \"reeltalk\",\n  \"version\": \"1.4.2\",\n  \"publishedAt\": 1777544742827\n}"},{"path":"skill-card.md","content":"## Description:\n\nHelper for processing shared video links: it takes a URL, downloads the audio track, creates a text transcript, and produces a summary.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[ameshalexk](https://clawhub.ai/user/ameshalexk)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and developers use ReelTalk to understand shared video links without watching them by generating a transcript or OCR fallback and a concise plain-English summary.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill runs local media tools on remote URLs and the release evidence rates it as review-level.\n\nMitigation: Use it in a contained workspace and avoid untrusted or attacker-supplied URLs.\n\nRisk: Release evidence identifies risk from unsafe URL handling and broad temporary-file deletion.\n\nMitigation: Prefer a version with structural URL parsing, per-run temporary directories, and clear trust boundaries for downloaded text.\n\nRisk: The X/Twitter fallback uses an external fxtwitter API call.\n\nMitigation: Confirm user consent for the fallback and validate returned media URLs before download.\n\n## Reference(s):\n\n- [ReelTalk on ClawHub](https://clawhub.ai/ameshalexk/skills/reeltalk)\n- [Amesh Alex Kuruvilla ClawHub profile](https://clawhub.ai/user/ameshalexk)\n- [fxtwitter API fallback](https://api.fxtwitter.com)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, guidance]\n\n**Output Format:** [Markdown summary with transcript or OCR-derived text and inline shell command steps]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Uses local media tools and may process downloaded media from remote URLs.]\n\n## Skill Version(s):\n\n1.4.2 (source: release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Helper for processing shared video links. Takes a URL, downloads the audio track, creates a text transcript, and produces a summary. Supports all major platf... Skill: ReelTalk Owner: ameshalexk Summary: Helper for processing shared video links. Takes a URL, downloads the audio track, creates a text transcript, and produces a summary. Supports all major platf... Tags: audio:1.4.0, ffmpeg:1.4.0, instagram:1.4.0, latest:1.4.2, media:1.4.0, ocr:1.4.0, reel:1.4.0, shorts:1.4.0, speech-to-text:1.4.0, summarization:1.4.0, tesseract:1.4.0, text-on-screen:1.4.0, tiktok:1.4.0, transc","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1146,"uniquenessScore":51,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T20:00:22.053Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T20:00:22.053Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-12T17:31:18.455Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}