{"id":"b6c9b93b-f425-4789-9ddd-2d8202320546","entityType":"agent","slug":"clawhub-athola-nm-scry-gif-generation","name":"gif-generation","canonicalUrl":"https://www.xpersona.co/agent/clawhub-athola-nm-scry-gif-generation","canonicalPath":"/agent/clawhub-athola-nm-scry-gif-generation","generatedAt":"2026-10-10T11:54:21.561Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-10T08:54:40.517Z","emptyReason":null},"description":"Converts webm/mp4 video files to optimized GIFs via ffmpeg with configurable quality settings Skill: gif-generation Owner: athola Summary: Converts webm/mp4 video files to optimized GIFs via ffmpeg with configurable quality settings Tags: latest:1.9.19 Version history: v1.9.19 | 2026-08-26T13:22:50.940Z | user Release v1.9.19 v1.9.17 | 2026-07-30T05:42:41.567Z | user Release v1.9.17 v1.9.16 | 2026-07-14T19:59:32.146Z | user Release v1.9.16 v1.9.14 | 2026-06-30T18:06:58.045Z | user Release v1.9.14 v1.9.13 | 20","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.5K downloads reported by the source. Last updated 10/10/2026.","installCommand":"clawhub skill install s17emme0e2m3cpf7k2jvp3a84984b8z9:nm-scry-gif-generation","sourceUrl":"https://clawhub.ai/athola/nm-scry-gif-generation","homepage":"https://clawhub.ai/athola/skills/nm-scry-gif-generation","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/athola/nm-scry-gif-generation","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/athola/skills/nm-scry-gif-generation","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":64,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Converts webm/mp4 video files to optimized GIFs via ffmpeg with configurable quality settings Skill: gif-generation Owner: athola Summary: Converts webm/mp4 vid"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-10T08:54:40.517Z","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-10T08:54:40.517Z","emptyReason":null},"stars":null,"forks":null,"downloads":1544,"packageName":null,"latestVersion":"1.9.19","tractionLabel":"1.5K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T08:54:40.517Z","emptyReason":null},"lastUpdatedAt":"2026-10-10T08:54:40.517Z","lastCrawledAt":"2026-10-10T08:54:40.517Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-11T08:54:40.517Z","lastVerifiedAt":null,"highlights":[{"version":"1.9.19","createdAt":"2026-08-26T13:22:50.940Z","changelog":"Release v1.9.19","fileCount":3,"zipByteSize":3747},{"version":"1.9.17","createdAt":"2026-07-30T05:42:41.567Z","changelog":"Release v1.9.17","fileCount":3,"zipByteSize":3741},{"version":"1.9.16","createdAt":"2026-07-14T19:59:32.146Z","changelog":"Release v1.9.16","fileCount":3,"zipByteSize":3721},{"version":"1.9.14","createdAt":"2026-06-30T18:06:58.045Z","changelog":"Release v1.9.14","fileCount":3,"zipByteSize":3768},{"version":"1.9.13","createdAt":"2026-06-27T16:24:49.846Z","changelog":"Release v1.9.13","fileCount":3,"zipByteSize":3853},{"version":"1.9.12","createdAt":"2026-06-19T03:20:35.622Z","changelog":"Release v1.9.12","fileCount":3,"zipByteSize":3865},{"version":"1.0.2","createdAt":"2026-05-09T02:20:35.235Z","changelog":"Release v1.9.5","fileCount":3,"zipByteSize":3712},{"version":"1.0.1","createdAt":"2026-05-06T14:22:06.845Z","changelog":"Release v1.9.4","fileCount":2,"zipByteSize":2655}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17emme0e2m3cpf7k2jvp3a84984b8z9:nm-scry-gif-generation","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-athola-nm-scry-gif-generation/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-scry-gif-generation/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-scry-gif-generation/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-scry-gif-generation/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-scry-gif-generation/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-scry-gif-generation/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-10T11:54:21.560Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-scry-gif-generation/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-scry-gif-generation/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-scry-gif-generation/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-scry-gif-generation/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-10T08:54:40.517Z","emptyReason":null},"readme":"Skill: gif-generation\n\nOwner: athola\n\nSummary: Converts webm/mp4 video files to optimized GIFs via ffmpeg with configurable quality settings\n\nTags: latest:1.9.19\n\nVersion history:\n\nv1.9.19 | 2026-08-26T13:22:50.940Z | user\n\nRelease v1.9.19\n\nv1.9.17 | 2026-07-30T05:42:41.567Z | user\n\nRelease v1.9.17\n\nv1.9.16 | 2026-07-14T19:59:32.146Z | user\n\nRelease v1.9.16\n\nv1.9.14 | 2026-06-30T18:06:58.045Z | user\n\nRelease v1.9.14\n\nv1.9.13 | 2026-06-27T16:24:49.846Z | user\n\nRelease v1.9.13\n\nv1.9.12 | 2026-06-19T03:20:35.622Z | user\n\nRelease v1.9.12\n\nv1.0.2 | 2026-05-09T02:20:35.235Z | user\n\nRelease v1.9.5\n\nv1.0.1 | 2026-05-06T14:22:06.845Z | user\n\nRelease v1.9.4\n\nv1.0.0 | 2026-04-20T15:01:52.905Z | auto\n\n- Initial release of the gif-generation skill for post-processing video files (webm/mp4) into optimized GIFs.\n- Supports configurable quality settings, including palette generation and dithering for improved output.\n- Includes step-by-step process: input validation, ffmpeg check, conversion execution, and output verification.\n- Provides troubleshooting tips and common conversion presets for different use cases.\n- Detailed documentation covers optimization options and best practices for balancing size and quality.\n\nArchive index:\n\nArchive v1.9.19: 3 files, 3747 bytes\n\nFiles: skill-card.md (1795b), SKILL.md (6867b), _meta.json (142b)\n\nFile v1.9.19:SKILL.md\n\n---\nname: gif-generation\ndescription: |\n  Converts webm/mp4 video files to optimized GIFs via ffmpeg with configurable quality settings\nversion: 1.9.8\ntriggers:\n  - gif\n  - ffmpeg\n  - video\n  - conversion\n  - optimization\n  - post-processing recordings into shareable GIFs\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/scry\", \"emoji\": \"\\ud83e\\udd9e\"}}\nsource: claude-night-market\nsource_plugin: scry\n---\n\n> **Night Market Skill** — ported from [claude-night-market/scry](https://github.com/athola/claude-night-market/tree/master/plugins/scry). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n## Table of Contents\n\n- [Overview](#overview)\n- [Required TodoWrite Items](#required-todowrite-items)\n- [Process](#process)\n- [Step 1: Validate Input File](#step-1:-validate-input-file)\n- [Step 2: Check ffmpeg Installation](#step-2:-check-ffmpeg-installation)\n- [Step 3: Execute Conversion](#step-3:-execute-conversion)\n- [Basic Conversion (Fast, Larger File)](#basic-conversion-(fast,-larger-file))\n- [High Quality with Palette Generation (Recommended)](#high-quality-with-palette-generation-(recommended))\n- [Maximum Quality with Dithering](#maximum-quality-with-dithering)\n- [Optimization Options](#optimization-options)\n- [Common Presets](#common-presets)\n- [Step 4: Verify Output](#step-4:-verify-output)\n- [Exit Criteria](#exit-criteria)\n- [Troubleshooting](#troubleshooting)\n- [Large Output File](#large-output-file)\n- [Color Banding](#color-banding)\n- [Slow Conversion](#slow-conversion)\n\n\n# GIF Generation Skill\n\nPost-process video files (webm/mp4) and generate optimized GIF output with configurable quality settings.\n\n\n## When To Use\n\n- Converting recordings to animated GIF format\n- Creating lightweight demo animations\n\n## When NOT To Use\n\n- High-quality video output - use full recording tools\n- Static image generation without animation needs\n\n## Overview\n\nThis skill handles the conversion of video recordings (typically from browser automation) to GIF format. It provides multiple quality presets and optimization options to balance file size with visual quality.\n\n## Required TodoWrite Items\n\n```\n- Validate input video file exists\n- Check ffmpeg installation\n- Execute GIF conversion\n- Verify output and report results\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n## Process\n\n### Step 1: Validate Input File\n\nConfirm the source video file exists and is a supported format:\n\n```bash\n# Check file exists and get info\nif [[ -f \"$INPUT_FILE\" ]]; then\n    file \"$INPUT_FILE\"\n    ffprobe -v quiet -show_format -show_streams \"$INPUT_FILE\" 2>/dev/null | head -20\nelse\n    echo \"Error: Input file not found: $INPUT_FILE\"\n    exit 1\nfi\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\nSupported input formats: `.webm`, `.mp4`, `.mov`, `.avi`\n\n### Step 2: Check ffmpeg Installation\n\nVerify ffmpeg is available:\n\n```bash\nif ! command -v ffmpeg &> /dev/null; then\n    echo \"Error: ffmpeg is not installed\"\n    echo \"Install with: sudo apt install ffmpeg (Linux) or brew install ffmpeg (macOS)\"\n    exit 1\nfi\nffmpeg -version | head -1\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Step 3: Execute Conversion\n\nChoose the appropriate conversion command based on quality requirements:\n\n#### Basic Conversion (Fast, Larger File)\n\n```bash\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1\" output.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n#### High Quality with Palette Generation (Recommended)\n\n```bash\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" output.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n#### Maximum Quality with Dithering\n\n```bash\nffmpeg -i input.webm -vf \"fps=15,scale=1024:-1:flags=lanczos,split[s0][s1];[s0]palettegen=max_colors=256:stats_mode=single[p];[s1][p]paletteuse=dither=bayer:bayer_scale=5\" output.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Optimization Options\n\n| Option | Description | Recommended Value |\n|--------|-------------|-------------------|\n| `fps` | Frames per second | 10-15 for smooth, 5-8 for smaller files |\n| `scale` | Width in pixels (-1 maintains aspect ratio) | 800 for web, 480 for thumbnails |\n| `flags=lanczos` | High-quality scaling algorithm | Always use for best quality |\n| `palettegen` | Generate optimized color palette | Use for quality-critical output |\n| `dither` | Dithering algorithm | `bayer` for patterns, `floyd_steinberg` for smooth |\n\n### Common Presets\n\n```bash\n# Thumbnail (small, fast loading)\nffmpeg -i input.webm -vf \"fps=8,scale=480:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" thumbnail.gif\n\n# Documentation (balanced)\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" docs.gif\n\n# High-fidelity demo\nffmpeg -i input.webm -vf \"fps=15,scale=1024:-1:flags=lanczos,split[s0][s1];[s0]palettegen=max_colors=256[p];[s1][p]paletteuse\" demo.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Step 4: Verify Output\n\nConfirm successful conversion and report metrics:\n\n```bash\nif [[ -f \"$OUTPUT_FILE\" ]]; then\n    echo \"GIF generated successfully: $OUTPUT_FILE\"\n\n    # Report file size\n    SIZE=$(du -h \"$OUTPUT_FILE\" | cut -f1)\n    echo \"File size: $SIZE\"\n\n    # Get dimensions and frame count\n    ffprobe -v quiet -select_streams v:0 -show_entries stream=width,height,nb_frames -of csv=p=0 \"$OUTPUT_FILE\"\nelse\n    echo \"Error: GIF generation failed\"\n    exit 1\nfi\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n## Exit Criteria\n\n- [ ] Input file validated as existing video format\n- [ ] ffmpeg confirmed available\n- [ ] GIF file created at specified output path\n- [ ] Output file size reported to user\n- [ ] No ffmpeg errors during conversion\n\n## Troubleshooting\n\n### Large Output File\n\nReduce quality settings:\n```bash\n# Lower fps and resolution\nffmpeg -i input.webm -vf \"fps=8,scale=640:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" smaller.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Color Banding\n\nUse dithering:\n```bash\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse=dither=floyd_steinberg\" smooth.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Slow Conversion\n\nUse basic conversion without palette generation for speed:\n```bash\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1\" quick.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\nFile v1.9.19:_meta.json\n\n{\n  \"ownerId\": \"kn7d107jg9jv602h9ytsegydq184a42s\",\n  \"slug\": \"nm-scry-gif-generation\",\n  \"version\": \"1.9.19\",\n  \"publishedAt\": 1787750570940\n}\n\nFile v1.9.19:skill-card.md\n\n## Description:\n\nConverts webm/mp4 video files to optimized GIFs via ffmpeg with configurable quality settings.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[athola](https://clawhub.ai/user/athola)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and engineers use this skill to convert screen recordings or other supported video files into shareable GIFs with configurable size and quality settings.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill may propose installing ffmpeg as a system package dependency.\n\nMitigation: Treat any ffmpeg installation command as a separate user-approved system package action.\n\nRisk: GIF conversion writes an output file path selected during the workflow.\n\nMitigation: Review the output path before running conversions and verify the generated file after completion.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/athola/skills/nm-scry-gif-generation)\n- [OpenClaw homepage](https://github.com/athola/claude-night-market/tree/master/plugins/scry)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, guidance]\n\n**Output Format:** [Markdown with inline bash commands and conversion presets]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Produces guidance for validating input videos, checking ffmpeg, running GIF conversions, and verifying output files.]\n\n## Skill Version(s):\n\n1.9.19 (source: server release evidence; artifact frontmatter lists 1.9.8)\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.9.17: 3 files, 3741 bytes\n\nFiles: skill-card.md (1827b), SKILL.md (6867b), _meta.json (142b)\n\nFile v1.9.17:SKILL.md\n\n---\nname: gif-generation\ndescription: |\n  Converts webm/mp4 video files to optimized GIFs via ffmpeg with configurable quality settings\nversion: 1.9.8\ntriggers:\n  - gif\n  - ffmpeg\n  - video\n  - conversion\n  - optimization\n  - post-processing recordings into shareable GIFs\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/scry\", \"emoji\": \"\\ud83e\\udd9e\"}}\nsource: claude-night-market\nsource_plugin: scry\n---\n\n> **Night Market Skill** — ported from [claude-night-market/scry](https://github.com/athola/claude-night-market/tree/master/plugins/scry). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n## Table of Contents\n\n- [Overview](#overview)\n- [Required TodoWrite Items](#required-todowrite-items)\n- [Process](#process)\n- [Step 1: Validate Input File](#step-1:-validate-input-file)\n- [Step 2: Check ffmpeg Installation](#step-2:-check-ffmpeg-installation)\n- [Step 3: Execute Conversion](#step-3:-execute-conversion)\n- [Basic Conversion (Fast, Larger File)](#basic-conversion-(fast,-larger-file))\n- [High Quality with Palette Generation (Recommended)](#high-quality-with-palette-generation-(recommended))\n- [Maximum Quality with Dithering](#maximum-quality-with-dithering)\n- [Optimization Options](#optimization-options)\n- [Common Presets](#common-presets)\n- [Step 4: Verify Output](#step-4:-verify-output)\n- [Exit Criteria](#exit-criteria)\n- [Troubleshooting](#troubleshooting)\n- [Large Output File](#large-output-file)\n- [Color Banding](#color-banding)\n- [Slow Conversion](#slow-conversion)\n\n\n# GIF Generation Skill\n\nPost-process video files (webm/mp4) and generate optimized GIF output with configurable quality settings.\n\n\n## When To Use\n\n- Converting recordings to animated GIF format\n- Creating lightweight demo animations\n\n## When NOT To Use\n\n- High-quality video output - use full recording tools\n- Static image generation without animation needs\n\n## Overview\n\nThis skill handles the conversion of video recordings (typically from browser automation) to GIF format. It provides multiple quality presets and optimization options to balance file size with visual quality.\n\n## Required TodoWrite Items\n\n```\n- Validate input video file exists\n- Check ffmpeg installation\n- Execute GIF conversion\n- Verify output and report results\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n## Process\n\n### Step 1: Validate Input File\n\nConfirm the source video file exists and is a supported format:\n\n```bash\n# Check file exists and get info\nif [[ -f \"$INPUT_FILE\" ]]; then\n    file \"$INPUT_FILE\"\n    ffprobe -v quiet -show_format -show_streams \"$INPUT_FILE\" 2>/dev/null | head -20\nelse\n    echo \"Error: Input file not found: $INPUT_FILE\"\n    exit 1\nfi\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\nSupported input formats: `.webm`, `.mp4`, `.mov`, `.avi`\n\n### Step 2: Check ffmpeg Installation\n\nVerify ffmpeg is available:\n\n```bash\nif ! command -v ffmpeg &> /dev/null; then\n    echo \"Error: ffmpeg is not installed\"\n    echo \"Install with: sudo apt install ffmpeg (Linux) or brew install ffmpeg (macOS)\"\n    exit 1\nfi\nffmpeg -version | head -1\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Step 3: Execute Conversion\n\nChoose the appropriate conversion command based on quality requirements:\n\n#### Basic Conversion (Fast, Larger File)\n\n```bash\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1\" output.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n#### High Quality with Palette Generation (Recommended)\n\n```bash\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" output.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n#### Maximum Quality with Dithering\n\n```bash\nffmpeg -i input.webm -vf \"fps=15,scale=1024:-1:flags=lanczos,split[s0][s1];[s0]palettegen=max_colors=256:stats_mode=single[p];[s1][p]paletteuse=dither=bayer:bayer_scale=5\" output.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Optimization Options\n\n| Option | Description | Recommended Value |\n|--------|-------------|-------------------|\n| `fps` | Frames per second | 10-15 for smooth, 5-8 for smaller files |\n| `scale` | Width in pixels (-1 maintains aspect ratio) | 800 for web, 480 for thumbnails |\n| `flags=lanczos` | High-quality scaling algorithm | Always use for best quality |\n| `palettegen` | Generate optimized color palette | Use for quality-critical output |\n| `dither` | Dithering algorithm | `bayer` for patterns, `floyd_steinberg` for smooth |\n\n### Common Presets\n\n```bash\n# Thumbnail (small, fast loading)\nffmpeg -i input.webm -vf \"fps=8,scale=480:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" thumbnail.gif\n\n# Documentation (balanced)\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" docs.gif\n\n# High-fidelity demo\nffmpeg -i input.webm -vf \"fps=15,scale=1024:-1:flags=lanczos,split[s0][s1];[s0]palettegen=max_colors=256[p];[s1][p]paletteuse\" demo.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Step 4: Verify Output\n\nConfirm successful conversion and report metrics:\n\n```bash\nif [[ -f \"$OUTPUT_FILE\" ]]; then\n    echo \"GIF generated successfully: $OUTPUT_FILE\"\n\n    # Report file size\n    SIZE=$(du -h \"$OUTPUT_FILE\" | cut -f1)\n    echo \"File size: $SIZE\"\n\n    # Get dimensions and frame count\n    ffprobe -v quiet -select_streams v:0 -show_entries stream=width,height,nb_frames -of csv=p=0 \"$OUTPUT_FILE\"\nelse\n    echo \"Error: GIF generation failed\"\n    exit 1\nfi\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n## Exit Criteria\n\n- [ ] Input file validated as existing video format\n- [ ] ffmpeg confirmed available\n- [ ] GIF file created at specified output path\n- [ ] Output file size reported to user\n- [ ] No ffmpeg errors during conversion\n\n## Troubleshooting\n\n### Large Output File\n\nReduce quality settings:\n```bash\n# Lower fps and resolution\nffmpeg -i input.webm -vf \"fps=8,scale=640:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" smaller.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Color Banding\n\nUse dithering:\n```bash\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse=dither=floyd_steinberg\" smooth.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Slow Conversion\n\nUse basic conversion without palette generation for speed:\n```bash\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1\" quick.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\nFile v1.9.17:_meta.json\n\n{\n  \"ownerId\": \"kn7d107jg9jv602h9ytsegydq184a42s\",\n  \"slug\": \"nm-scry-gif-generation\",\n  \"version\": \"1.9.17\",\n  \"publishedAt\": 1785390161567\n}\n\nFile v1.9.17:skill-card.md\n\n## Description: <br>\nConverts webm/mp4 video files to optimized GIFs via ffmpeg with configurable quality settings. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[athola](https://clawhub.ai/user/athola) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and content creators use this skill to convert local webm, mp4, mov, or avi recordings into optimized animated GIFs for demos and documentation. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Generic trigger words may activate the skill for broader video or optimization requests. <br>\nMitigation: Confirm that the user intends GIF conversion before applying the workflow. <br>\nRisk: Conversion commands operate on local input and output file paths. <br>\nMitigation: Validate the source video path and confirm the destination GIF path before running ffmpeg. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/athola/skills/nm-scry-gif-generation) <br>\n- [Project homepage from metadata](https://github.com/athola/claude-night-market/tree/master/plugins/scry) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Guidance, Shell commands, Configuration] <br>\n**Output Format:** [Markdown with inline bash code blocks] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Produces ffmpeg command guidance and verification steps for generating GIF files.] <br>\n\n## Skill Version(s): <br>\n1.9.17 (source: evidence.release.version) <br>\n\n## Ethical Considerations: <br>\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. <br>\n\nArchive v1.9.16: 3 files, 3721 bytes\n\nFiles: skill-card.md (1832b), SKILL.md (6867b), _meta.json (142b)\n\nFile v1.9.16:SKILL.md\n\n---\nname: gif-generation\ndescription: |\n  Converts webm/mp4 video files to optimized GIFs via ffmpeg with configurable quality settings\nversion: 1.9.8\ntriggers:\n  - gif\n  - ffmpeg\n  - video\n  - conversion\n  - optimization\n  - post-processing recordings into shareable GIFs\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/scry\", \"emoji\": \"\\ud83e\\udd9e\"}}\nsource: claude-night-market\nsource_plugin: scry\n---\n\n> **Night Market Skill** — ported from [claude-night-market/scry](https://github.com/athola/claude-night-market/tree/master/plugins/scry). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n## Table of Contents\n\n- [Overview](#overview)\n- [Required TodoWrite Items](#required-todowrite-items)\n- [Process](#process)\n- [Step 1: Validate Input File](#step-1:-validate-input-file)\n- [Step 2: Check ffmpeg Installation](#step-2:-check-ffmpeg-installation)\n- [Step 3: Execute Conversion](#step-3:-execute-conversion)\n- [Basic Conversion (Fast, Larger File)](#basic-conversion-(fast,-larger-file))\n- [High Quality with Palette Generation (Recommended)](#high-quality-with-palette-generation-(recommended))\n- [Maximum Quality with Dithering](#maximum-quality-with-dithering)\n- [Optimization Options](#optimization-options)\n- [Common Presets](#common-presets)\n- [Step 4: Verify Output](#step-4:-verify-output)\n- [Exit Criteria](#exit-criteria)\n- [Troubleshooting](#troubleshooting)\n- [Large Output File](#large-output-file)\n- [Color Banding](#color-banding)\n- [Slow Conversion](#slow-conversion)\n\n\n# GIF Generation Skill\n\nPost-process video files (webm/mp4) and generate optimized GIF output with configurable quality settings.\n\n\n## When To Use\n\n- Converting recordings to animated GIF format\n- Creating lightweight demo animations\n\n## When NOT To Use\n\n- High-quality video output - use full recording tools\n- Static image generation without animation needs\n\n## Overview\n\nThis skill handles the conversion of video recordings (typically from browser automation) to GIF format. It provides multiple quality presets and optimization options to balance file size with visual quality.\n\n## Required TodoWrite Items\n\n```\n- Validate input video file exists\n- Check ffmpeg installation\n- Execute GIF conversion\n- Verify output and report results\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n## Process\n\n### Step 1: Validate Input File\n\nConfirm the source video file exists and is a supported format:\n\n```bash\n# Check file exists and get info\nif [[ -f \"$INPUT_FILE\" ]]; then\n    file \"$INPUT_FILE\"\n    ffprobe -v quiet -show_format -show_streams \"$INPUT_FILE\" 2>/dev/null | head -20\nelse\n    echo \"Error: Input file not found: $INPUT_FILE\"\n    exit 1\nfi\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\nSupported input formats: `.webm`, `.mp4`, `.mov`, `.avi`\n\n### Step 2: Check ffmpeg Installation\n\nVerify ffmpeg is available:\n\n```bash\nif ! command -v ffmpeg &> /dev/null; then\n    echo \"Error: ffmpeg is not installed\"\n    echo \"Install with: sudo apt install ffmpeg (Linux) or brew install ffmpeg (macOS)\"\n    exit 1\nfi\nffmpeg -version | head -1\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Step 3: Execute Conversion\n\nChoose the appropriate conversion command based on quality requirements:\n\n#### Basic Conversion (Fast, Larger File)\n\n```bash\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1\" output.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n#### High Quality with Palette Generation (Recommended)\n\n```bash\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" output.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n#### Maximum Quality with Dithering\n\n```bash\nffmpeg -i input.webm -vf \"fps=15,scale=1024:-1:flags=lanczos,split[s0][s1];[s0]palettegen=max_colors=256:stats_mode=single[p];[s1][p]paletteuse=dither=bayer:bayer_scale=5\" output.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Optimization Options\n\n| Option | Description | Recommended Value |\n|--------|-------------|-------------------|\n| `fps` | Frames per second | 10-15 for smooth, 5-8 for smaller files |\n| `scale` | Width in pixels (-1 maintains aspect ratio) | 800 for web, 480 for thumbnails |\n| `flags=lanczos` | High-quality scaling algorithm | Always use for best quality |\n| `palettegen` | Generate optimized color palette | Use for quality-critical output |\n| `dither` | Dithering algorithm | `bayer` for patterns, `floyd_steinberg` for smooth |\n\n### Common Presets\n\n```bash\n# Thumbnail (small, fast loading)\nffmpeg -i input.webm -vf \"fps=8,scale=480:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" thumbnail.gif\n\n# Documentation (balanced)\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" docs.gif\n\n# High-fidelity demo\nffmpeg -i input.webm -vf \"fps=15,scale=1024:-1:flags=lanczos,split[s0][s1];[s0]palettegen=max_colors=256[p];[s1][p]paletteuse\" demo.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Step 4: Verify Output\n\nConfirm successful conversion and report metrics:\n\n```bash\nif [[ -f \"$OUTPUT_FILE\" ]]; then\n    echo \"GIF generated successfully: $OUTPUT_FILE\"\n\n    # Report file size\n    SIZE=$(du -h \"$OUTPUT_FILE\" | cut -f1)\n    echo \"File size: $SIZE\"\n\n    # Get dimensions and frame count\n    ffprobe -v quiet -select_streams v:0 -show_entries stream=width,height,nb_frames -of csv=p=0 \"$OUTPUT_FILE\"\nelse\n    echo \"Error: GIF generation failed\"\n    exit 1\nfi\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n## Exit Criteria\n\n- [ ] Input file validated as existing video format\n- [ ] ffmpeg confirmed available\n- [ ] GIF file created at specified output path\n- [ ] Output file size reported to user\n- [ ] No ffmpeg errors during conversion\n\n## Troubleshooting\n\n### Large Output File\n\nReduce quality settings:\n```bash\n# Lower fps and resolution\nffmpeg -i input.webm -vf \"fps=8,scale=640:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" smaller.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Color Banding\n\nUse dithering:\n```bash\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse=dither=floyd_steinberg\" smooth.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Slow Conversion\n\nUse basic conversion without palette generation for speed:\n```bash\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1\" quick.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\nFile v1.9.16:_meta.json\n\n{\n  \"ownerId\": \"kn7d107jg9jv602h9ytsegydq184a42s\",\n  \"slug\": \"nm-scry-gif-generation\",\n  \"version\": \"1.9.16\",\n  \"publishedAt\": 1784059172146\n}\n\nFile v1.9.16:skill-card.md\n\n## Description: <br>\nConverts webm/mp4 video files to optimized GIFs via ffmpeg with configurable quality settings. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[athola](https://clawhub.ai/user/athola) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and content creators use this skill to convert local recordings into optimized GIFs with ffmpeg presets, quality options, and output verification steps. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Broad trigger words can cause the skill to be considered for general video or conversion tasks. <br>\nMitigation: Confirm the task is GIF conversion and review the ffmpeg command before running it. <br>\nRisk: The generated ffmpeg commands operate on local input and output paths. <br>\nMitigation: Verify the source video path and destination GIF path before execution. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/athola/skills/nm-scry-gif-generation) <br>\n- [OpenClaw homepage](https://github.com/athola/claude-night-market/tree/master/plugins/scry) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Shell commands, Configuration, Guidance] <br>\n**Output Format:** [Markdown with bash command examples] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Produces ffmpeg command variants and verification steps for user-selected local video files.] <br>\n\n## Skill Version(s): <br>\n1.9.16 (source: server release metadata) <br>\n\n## Ethical Considerations: <br>\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. <br>\n\nArchive v1.9.14: 3 files, 3768 bytes\n\nFiles: skill-card.md (1938b), SKILL.md (6867b), _meta.json (142b)\n\nFile v1.9.14:SKILL.md\n\n---\nname: gif-generation\ndescription: |\n  Converts webm/mp4 video files to optimized GIFs via ffmpeg with configurable quality settings\nversion: 1.9.8\ntriggers:\n  - gif\n  - ffmpeg\n  - video\n  - conversion\n  - optimization\n  - post-processing recordings into shareable GIFs\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/scry\", \"emoji\": \"\\ud83e\\udd9e\"}}\nsource: claude-night-market\nsource_plugin: scry\n---\n\n> **Night Market Skill** — ported from [claude-night-market/scry](https://github.com/athola/claude-night-market/tree/master/plugins/scry). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n## Table of Contents\n\n- [Overview](#overview)\n- [Required TodoWrite Items](#required-todowrite-items)\n- [Process](#process)\n- [Step 1: Validate Input File](#step-1:-validate-input-file)\n- [Step 2: Check ffmpeg Installation](#step-2:-check-ffmpeg-installation)\n- [Step 3: Execute Conversion](#step-3:-execute-conversion)\n- [Basic Conversion (Fast, Larger File)](#basic-conversion-(fast,-larger-file))\n- [High Quality with Palette Generation (Recommended)](#high-quality-with-palette-generation-(recommended))\n- [Maximum Quality with Dithering](#maximum-quality-with-dithering)\n- [Optimization Options](#optimization-options)\n- [Common Presets](#common-presets)\n- [Step 4: Verify Output](#step-4:-verify-output)\n- [Exit Criteria](#exit-criteria)\n- [Troubleshooting](#troubleshooting)\n- [Large Output File](#large-output-file)\n- [Color Banding](#color-banding)\n- [Slow Conversion](#slow-conversion)\n\n\n# GIF Generation Skill\n\nPost-process video files (webm/mp4) and generate optimized GIF output with configurable quality settings.\n\n\n## When To Use\n\n- Converting recordings to animated GIF format\n- Creating lightweight demo animations\n\n## When NOT To Use\n\n- High-quality video output - use full recording tools\n- Static image generation without animation needs\n\n## Overview\n\nThis skill handles the conversion of video recordings (typically from browser automation) to GIF format. It provides multiple quality presets and optimization options to balance file size with visual quality.\n\n## Required TodoWrite Items\n\n```\n- Validate input video file exists\n- Check ffmpeg installation\n- Execute GIF conversion\n- Verify output and report results\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n## Process\n\n### Step 1: Validate Input File\n\nConfirm the source video file exists and is a supported format:\n\n```bash\n# Check file exists and get info\nif [[ -f \"$INPUT_FILE\" ]]; then\n    file \"$INPUT_FILE\"\n    ffprobe -v quiet -show_format -show_streams \"$INPUT_FILE\" 2>/dev/null | head -20\nelse\n    echo \"Error: Input file not found: $INPUT_FILE\"\n    exit 1\nfi\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\nSupported input formats: `.webm`, `.mp4`, `.mov`, `.avi`\n\n### Step 2: Check ffmpeg Installation\n\nVerify ffmpeg is available:\n\n```bash\nif ! command -v ffmpeg &> /dev/null; then\n    echo \"Error: ffmpeg is not installed\"\n    echo \"Install with: sudo apt install ffmpeg (Linux) or brew install ffmpeg (macOS)\"\n    exit 1\nfi\nffmpeg -version | head -1\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Step 3: Execute Conversion\n\nChoose the appropriate conversion command based on quality requirements:\n\n#### Basic Conversion (Fast, Larger File)\n\n```bash\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1\" output.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n#### High Quality with Palette Generation (Recommended)\n\n```bash\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" output.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n#### Maximum Quality with Dithering\n\n```bash\nffmpeg -i input.webm -vf \"fps=15,scale=1024:-1:flags=lanczos,split[s0][s1];[s0]palettegen=max_colors=256:stats_mode=single[p];[s1][p]paletteuse=dither=bayer:bayer_scale=5\" output.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Optimization Options\n\n| Option | Description | Recommended Value |\n|--------|-------------|-------------------|\n| `fps` | Frames per second | 10-15 for smooth, 5-8 for smaller files |\n| `scale` | Width in pixels (-1 maintains aspect ratio) | 800 for web, 480 for thumbnails |\n| `flags=lanczos` | High-quality scaling algorithm | Always use for best quality |\n| `palettegen` | Generate optimized color palette | Use for quality-critical output |\n| `dither` | Dithering algorithm | `bayer` for patterns, `floyd_steinberg` for smooth |\n\n### Common Presets\n\n```bash\n# Thumbnail (small, fast loading)\nffmpeg -i input.webm -vf \"fps=8,scale=480:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" thumbnail.gif\n\n# Documentation (balanced)\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" docs.gif\n\n# High-fidelity demo\nffmpeg -i input.webm -vf \"fps=15,scale=1024:-1:flags=lanczos,split[s0][s1];[s0]palettegen=max_colors=256[p];[s1][p]paletteuse\" demo.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Step 4: Verify Output\n\nConfirm successful conversion and report metrics:\n\n```bash\nif [[ -f \"$OUTPUT_FILE\" ]]; then\n    echo \"GIF generated successfully: $OUTPUT_FILE\"\n\n    # Report file size\n    SIZE=$(du -h \"$OUTPUT_FILE\" | cut -f1)\n    echo \"File size: $SIZE\"\n\n    # Get dimensions and frame count\n    ffprobe -v quiet -select_streams v:0 -show_entries stream=width,height,nb_frames -of csv=p=0 \"$OUTPUT_FILE\"\nelse\n    echo \"Error: GIF generation failed\"\n    exit 1\nfi\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n## Exit Criteria\n\n- [ ] Input file validated as existing video format\n- [ ] ffmpeg confirmed available\n- [ ] GIF file created at specified output path\n- [ ] Output file size reported to user\n- [ ] No ffmpeg errors during conversion\n\n## Troubleshooting\n\n### Large Output File\n\nReduce quality settings:\n```bash\n# Lower fps and resolution\nffmpeg -i input.webm -vf \"fps=8,scale=640:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" smaller.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Color Banding\n\nUse dithering:\n```bash\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse=dither=floyd_steinberg\" smooth.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Slow Conversion\n\nUse basic conversion without palette generation for speed:\n```bash\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1\" quick.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\nFile v1.9.14:_meta.json\n\n{\n  \"ownerId\": \"kn7d107jg9jv602h9ytsegydq184a42s\",\n  \"slug\": \"nm-scry-gif-generation\",\n  \"version\": \"1.9.14\",\n  \"publishedAt\": 1782842818045\n}\n\nFile v1.9.14:skill-card.md\n\n## Description: <br>\nConverts webm/mp4 video files to optimized GIFs via ffmpeg with configurable quality settings. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[athola](https://clawhub.ai/user/athola) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and agent users use this skill to convert local webm, mp4, mov, or avi recordings into shareable animated GIFs with configurable size and quality settings. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Broad video, conversion, optimization, or ffmpeg triggers may activate this skill for requests that are not specifically GIF generation. <br>\nMitigation: Confirm the intended source video and output GIF filename before allowing conversion commands to run. <br>\nRisk: ffmpeg commands operate on local files and can overwrite or create outputs at paths chosen by the agent or user. <br>\nMitigation: Use explicit, reviewed output paths and verify the generated GIF before sharing it. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/athola/skills/nm-scry-gif-generation) <br>\n- [Clawdis homepage](https://github.com/athola/claude-night-market/tree/master/plugins/scry) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, shell commands, guidance] <br>\n**Output Format:** [Markdown with inline bash command blocks] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Guidance expects local video input paths and user-confirmed GIF output paths.] <br>\n\n## Skill Version(s): <br>\n1.9.14 (source: server release metadata) <br>\n\n## Ethical Considerations: <br>\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. <br>\n\nArchive v1.9.13: 3 files, 3853 bytes\n\nFiles: skill-card.md (2103b), SKILL.md (6867b), _meta.json (142b)\n\nFile v1.9.13:SKILL.md\n\n---\nname: gif-generation\ndescription: |\n  Converts webm/mp4 video files to optimized GIFs via ffmpeg with configurable quality settings\nversion: 1.9.8\ntriggers:\n  - gif\n  - ffmpeg\n  - video\n  - conversion\n  - optimization\n  - post-processing recordings into shareable GIFs\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/scry\", \"emoji\": \"\\ud83e\\udd9e\"}}\nsource: claude-night-market\nsource_plugin: scry\n---\n\n> **Night Market Skill** — ported from [claude-night-market/scry](https://github.com/athola/claude-night-market/tree/master/plugins/scry). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n## Table of Contents\n\n- [Overview](#overview)\n- [Required TodoWrite Items](#required-todowrite-items)\n- [Process](#process)\n- [Step 1: Validate Input File](#step-1:-validate-input-file)\n- [Step 2: Check ffmpeg Installation](#step-2:-check-ffmpeg-installation)\n- [Step 3: Execute Conversion](#step-3:-execute-conversion)\n- [Basic Conversion (Fast, Larger File)](#basic-conversion-(fast,-larger-file))\n- [High Quality with Palette Generation (Recommended)](#high-quality-with-palette-generation-(recommended))\n- [Maximum Quality with Dithering](#maximum-quality-with-dithering)\n- [Optimization Options](#optimization-options)\n- [Common Presets](#common-presets)\n- [Step 4: Verify Output](#step-4:-verify-output)\n- [Exit Criteria](#exit-criteria)\n- [Troubleshooting](#troubleshooting)\n- [Large Output File](#large-output-file)\n- [Color Banding](#color-banding)\n- [Slow Conversion](#slow-conversion)\n\n\n# GIF Generation Skill\n\nPost-process video files (webm/mp4) and generate optimized GIF output with configurable quality settings.\n\n\n## When To Use\n\n- Converting recordings to animated GIF format\n- Creating lightweight demo animations\n\n## When NOT To Use\n\n- High-quality video output - use full recording tools\n- Static image generation without animation needs\n\n## Overview\n\nThis skill handles the conversion of video recordings (typically from browser automation) to GIF format. It provides multiple quality presets and optimization options to balance file size with visual quality.\n\n## Required TodoWrite Items\n\n```\n- Validate input video file exists\n- Check ffmpeg installation\n- Execute GIF conversion\n- Verify output and report results\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n## Process\n\n### Step 1: Validate Input File\n\nConfirm the source video file exists and is a supported format:\n\n```bash\n# Check file exists and get info\nif [[ -f \"$INPUT_FILE\" ]]; then\n    file \"$INPUT_FILE\"\n    ffprobe -v quiet -show_format -show_streams \"$INPUT_FILE\" 2>/dev/null | head -20\nelse\n    echo \"Error: Input file not found: $INPUT_FILE\"\n    exit 1\nfi\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\nSupported input formats: `.webm`, `.mp4`, `.mov`, `.avi`\n\n### Step 2: Check ffmpeg Installation\n\nVerify ffmpeg is available:\n\n```bash\nif ! command -v ffmpeg &> /dev/null; then\n    echo \"Error: ffmpeg is not installed\"\n    echo \"Install with: sudo apt install ffmpeg (Linux) or brew install ffmpeg (macOS)\"\n    exit 1\nfi\nffmpeg -version | head -1\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Step 3: Execute Conversion\n\nChoose the appropriate conversion command based on quality requirements:\n\n#### Basic Conversion (Fast, Larger File)\n\n```bash\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1\" output.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n#### High Quality with Palette Generation (Recommended)\n\n```bash\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" output.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n#### Maximum Quality with Dithering\n\n```bash\nffmpeg -i input.webm -vf \"fps=15,scale=1024:-1:flags=lanczos,split[s0][s1];[s0]palettegen=max_colors=256:stats_mode=single[p];[s1][p]paletteuse=dither=bayer:bayer_scale=5\" output.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Optimization Options\n\n| Option | Description | Recommended Value |\n|--------|-------------|-------------------|\n| `fps` | Frames per second | 10-15 for smooth, 5-8 for smaller files |\n| `scale` | Width in pixels (-1 maintains aspect ratio) | 800 for web, 480 for thumbnails |\n| `flags=lanczos` | High-quality scaling algorithm | Always use for best quality |\n| `palettegen` | Generate optimized color palette | Use for quality-critical output |\n| `dither` | Dithering algorithm | `bayer` for patterns, `floyd_steinberg` for smooth |\n\n### Common Presets\n\n```bash\n# Thumbnail (small, fast loading)\nffmpeg -i input.webm -vf \"fps=8,scale=480:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" thumbnail.gif\n\n# Documentation (balanced)\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" docs.gif\n\n# High-fidelity demo\nffmpeg -i input.webm -vf \"fps=15,scale=1024:-1:flags=lanczos,split[s0][s1];[s0]palettegen=max_colors=256[p];[s1][p]paletteuse\" demo.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Step 4: Verify Output\n\nConfirm successful conversion and report metrics:\n\n```bash\nif [[ -f \"$OUTPUT_FILE\" ]]; then\n    echo \"GIF generated successfully: $OUTPUT_FILE\"\n\n    # Report file size\n    SIZE=$(du -h \"$OUTPUT_FILE\" | cut -f1)\n    echo \"File size: $SIZE\"\n\n    # Get dimensions and frame count\n    ffprobe -v quiet -select_streams v:0 -show_entries stream=width,height,nb_frames -of csv=p=0 \"$OUTPUT_FILE\"\nelse\n    echo \"Error: GIF generation failed\"\n    exit 1\nfi\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n## Exit Criteria\n\n- [ ] Input file validated as existing video format\n- [ ] ffmpeg confirmed available\n- [ ] GIF file created at specified output path\n- [ ] Output file size reported to user\n- [ ] No ffmpeg errors during conversion\n\n## Troubleshooting\n\n### Large Output File\n\nReduce quality settings:\n```bash\n# Lower fps and resolution\nffmpeg -i input.webm -vf \"fps=8,scale=640:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" smaller.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Color Banding\n\nUse dithering:\n```bash\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse=dither=floyd_steinberg\" smooth.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Slow Conversion\n\nUse basic conversion without palette generation for speed:\n```bash\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1\" quick.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\nFile v1.9.13:_meta.json\n\n{\n  \"ownerId\": \"kn7d107jg9jv602h9ytsegydq184a42s\",\n  \"slug\": \"nm-scry-gif-generation\",\n  \"version\": \"1.9.13\",\n  \"publishedAt\": 1782577489846\n}\n\nFile v1.9.13:skill-card.md\n\n## Description: <br>\nConverts webm/mp4 video files to optimized GIFs via ffmpeg with configurable quality settings. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[athola](https://clawhub.ai/user/athola) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and engineers use this skill to turn local webm, mp4, mov, or avi recordings into shareable GIFs with ffmpeg. It helps select quality, frame rate, scale, palette, and dithering settings and verify the generated output. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Generic prompts mentioning video, GIFs, optimization, or ffmpeg may activate the skill. <br>\nMitigation: Confirm the source video path, output GIF path, and selected conversion settings before allowing any ffmpeg command to run. <br>\nRisk: ffmpeg conversion commands process local files and can overwrite or create outputs at user-provided paths. <br>\nMitigation: Validate that the input file exists, review the output filename, and verify the generated GIF before relying on the result. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/athola/skills/nm-scry-gif-generation) <br>\n- [OpenClaw homepage metadata](https://github.com/athola/claude-night-market/tree/master/plugins/scry) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, shell commands, guidance] <br>\n**Output Format:** [Markdown guidance with inline bash commands] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Produces local ffmpeg command suggestions, validation steps, troubleshooting guidance, and output verification instructions.] <br>\n\n## Skill Version(s): <br>\n1.9.13 (source: server release metadata; artifact frontmatter states 1.9.8) <br>\n\n## Ethical Considerations: <br>\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. <br>\n\nArchive v1.9.12: 3 files, 3865 bytes\n\nFiles: skill-card.md (2144b), SKILL.md (6867b), _meta.json (142b)\n\nFile v1.9.12:SKILL.md\n\n---\nname: gif-generation\ndescription: |\n  Converts webm/mp4 video files to optimized GIFs via ffmpeg with configurable quality settings\nversion: 1.9.8\ntriggers:\n  - gif\n  - ffmpeg\n  - video\n  - conversion\n  - optimization\n  - post-processing recordings into shareable GIFs\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/scry\", \"emoji\": \"\\ud83e\\udd9e\"}}\nsource: claude-night-market\nsource_plugin: scry\n---\n\n> **Night Market Skill** — ported from [claude-night-market/scry](https://github.com/athola/claude-night-market/tree/master/plugins/scry). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n## Table of Contents\n\n- [Overview](#overview)\n- [Required TodoWrite Items](#required-todowrite-items)\n- [Process](#process)\n- [Step 1: Validate Input File](#step-1:-validate-input-file)\n- [Step 2: Check ffmpeg Installation](#step-2:-check-ffmpeg-installation)\n- [Step 3: Execute Conversion](#step-3:-execute-conversion)\n- [Basic Conversion (Fast, Larger File)](#basic-conversion-(fast,-larger-file))\n- [High Quality with Palette Generation (Recommended)](#high-quality-with-palette-generation-(recommended))\n- [Maximum Quality with Dithering](#maximum-quality-with-dithering)\n- [Optimization Options](#optimization-options)\n- [Common Presets](#common-presets)\n- [Step 4: Verify Output](#step-4:-verify-output)\n- [Exit Criteria](#exit-criteria)\n- [Troubleshooting](#troubleshooting)\n- [Large Output File](#large-output-file)\n- [Color Banding](#color-banding)\n- [Slow Conversion](#slow-conversion)\n\n\n# GIF Generation Skill\n\nPost-process video files (webm/mp4) and generate optimized GIF output with configurable quality settings.\n\n\n## When To Use\n\n- Converting recordings to animated GIF format\n- Creating lightweight demo animations\n\n## When NOT To Use\n\n- High-quality video output - use full recording tools\n- Static image generation without animation needs\n\n## Overview\n\nThis skill handles the conversion of video recordings (typically from browser automation) to GIF format. It provides multiple quality presets and optimization options to balance file size with visual quality.\n\n## Required TodoWrite Items\n\n```\n- Validate input video file exists\n- Check ffmpeg installation\n- Execute GIF conversion\n- Verify output and report results\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n## Process\n\n### Step 1: Validate Input File\n\nConfirm the source video file exists and is a supported format:\n\n```bash\n# Check file exists and get info\nif [[ -f \"$INPUT_FILE\" ]]; then\n    file \"$INPUT_FILE\"\n    ffprobe -v quiet -show_format -show_streams \"$INPUT_FILE\" 2>/dev/null | head -20\nelse\n    echo \"Error: Input file not found: $INPUT_FILE\"\n    exit 1\nfi\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\nSupported input formats: `.webm`, `.mp4`, `.mov`, `.avi`\n\n### Step 2: Check ffmpeg Installation\n\nVerify ffmpeg is available:\n\n```bash\nif ! command -v ffmpeg &> /dev/null; then\n    echo \"Error: ffmpeg is not installed\"\n    echo \"Install with: sudo apt install ffmpeg (Linux) or brew install ffmpeg (macOS)\"\n    exit 1\nfi\nffmpeg -version | head -1\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Step 3: Execute Conversion\n\nChoose the appropriate conversion command based on quality requirements:\n\n#### Basic Conversion (Fast, Larger File)\n\n```bash\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1\" output.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n#### High Quality with Palette Generation (Recommended)\n\n```bash\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" output.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n#### Maximum Quality with Dithering\n\n```bash\nffmpeg -i input.webm -vf \"fps=15,scale=1024:-1:flags=lanczos,split[s0][s1];[s0]palettegen=max_colors=256:stats_mode=single[p];[s1][p]paletteuse=dither=bayer:bayer_scale=5\" output.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Optimization Options\n\n| Option | Description | Recommended Value |\n|--------|-------------|-------------------|\n| `fps` | Frames per second | 10-15 for smooth, 5-8 for smaller files |\n| `scale` | Width in pixels (-1 maintains aspect ratio) | 800 for web, 480 for thumbnails |\n| `flags=lanczos` | High-quality scaling algorithm | Always use for best quality |\n| `palettegen` | Generate optimized color palette | Use for quality-critical output |\n| `dither` | Dithering algorithm | `bayer` for patterns, `floyd_steinberg` for smooth |\n\n### Common Presets\n\n```bash\n# Thumbnail (small, fast loading)\nffmpeg -i input.webm -vf \"fps=8,scale=480:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" thumbnail.gif\n\n# Documentation (balanced)\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" docs.gif\n\n# High-fidelity demo\nffmpeg -i input.webm -vf \"fps=15,scale=1024:-1:flags=lanczos,split[s0][s1];[s0]palettegen=max_colors=256[p];[s1][p]paletteuse\" demo.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Step 4: Verify Output\n\nConfirm successful conversion and report metrics:\n\n```bash\nif [[ -f \"$OUTPUT_FILE\" ]]; then\n    echo \"GIF generated successfully: $OUTPUT_FILE\"\n\n    # Report file size\n    SIZE=$(du -h \"$OUTPUT_FILE\" | cut -f1)\n    echo \"File size: $SIZE\"\n\n    # Get dimensions and frame count\n    ffprobe -v quiet -select_streams v:0 -show_entries stream=width,height,nb_frames -of csv=p=0 \"$OUTPUT_FILE\"\nelse\n    echo \"Error: GIF generation failed\"\n    exit 1\nfi\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n## Exit Criteria\n\n- [ ] Input file validated as existing video format\n- [ ] ffmpeg confirmed available\n- [ ] GIF file created at specified output path\n- [ ] Output file size reported to user\n- [ ] No ffmpeg errors during conversion\n\n## Troubleshooting\n\n### Large Output File\n\nReduce quality settings:\n```bash\n# Lower fps and resolution\nffmpeg -i input.webm -vf \"fps=8,scale=640:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" smaller.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Color Banding\n\nUse dithering:\n```bash\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse=dither=floyd_steinberg\" smooth.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Slow Conversion\n\nUse basic conversion without palette generation for speed:\n```bash\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1\" quick.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\nFile v1.9.12:_meta.json\n\n{\n  \"ownerId\": \"kn7d107jg9jv602h9ytsegydq184a42s\",\n  \"slug\": \"nm-scry-gif-generation\",\n  \"version\": \"1.9.12\",\n  \"publishedAt\": 1781839235622\n}\n\nFile v1.9.12:skill-card.md\n\n## Description: <br>\nConverts webm/mp4 video files to optimized GIFs via ffmpeg with configurable quality settings. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[athola](https://clawhub.ai/user/athola) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and content creators use this skill to convert local video recordings into optimized GIFs for documentation, demos, and lightweight sharing. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Broad activation triggers may cause the agent to suggest video conversion commands in unrelated contexts. <br>\nMitigation: Review suggested actions before running commands and proceed only when the task is an intended video-to-GIF conversion. <br>\nRisk: Incorrect input or output paths could convert the wrong local file or write output to an unintended location. <br>\nMitigation: Confirm the source video path, destination path, and ffmpeg command options before execution. <br>\nRisk: The workflow depends on a local ffmpeg installation. <br>\nMitigation: Install ffmpeg only through a trusted package manager and verify availability before conversion. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/athola/nm-scry-gif-generation) <br>\n- [Scry project homepage](https://github.com/athola/claude-night-market/tree/master/plugins/scry) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Text, Markdown, Shell commands, Guidance] <br>\n**Output Format:** [Markdown guidance with inline shell commands] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Produces ffmpeg command suggestions and verification steps; GIF files are generated locally when the user runs the commands.] <br>\n\n## Skill Version(s): <br>\n1.9.12 (source: server release metadata) <br>\n\n## Ethical Considerations: <br>\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. <br>\n\nArchive v1.0.2: 3 files, 3712 bytes\n\nFiles: skill-card.md (1823b), SKILL.md (6790b), _meta.json (141b)\n\nFile v1.0.2:SKILL.md\n\n---\nname: gif-generation\ndescription: Post-process video files and generate optimized GIFs. Converts webm/mp4\nversion: 1.9.5\ntriggers:\n  - gif\n  - ffmpeg\n  - video\n  - conversion\n  - optimization\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/scry\", \"emoji\": \"\\ud83e\\udd9e\"}}\nsource: claude-night-market\nsource_plugin: scry\n---\n\n> **Night Market Skill** — ported from [claude-night-market/scry](https://github.com/athola/claude-night-market/tree/master/plugins/scry). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n## Table of Contents\n\n- [Overview](#overview)\n- [Required TodoWrite Items](#required-todowrite-items)\n- [Process](#process)\n- [Step 1: Validate Input File](#step-1:-validate-input-file)\n- [Step 2: Check ffmpeg Installation](#step-2:-check-ffmpeg-installation)\n- [Step 3: Execute Conversion](#step-3:-execute-conversion)\n- [Basic Conversion (Fast, Larger File)](#basic-conversion-(fast,-larger-file))\n- [High Quality with Palette Generation (Recommended)](#high-quality-with-palette-generation-(recommended))\n- [Maximum Quality with Dithering](#maximum-quality-with-dithering)\n- [Optimization Options](#optimization-options)\n- [Common Presets](#common-presets)\n- [Step 4: Verify Output](#step-4:-verify-output)\n- [Exit Criteria](#exit-criteria)\n- [Troubleshooting](#troubleshooting)\n- [Large Output File](#large-output-file)\n- [Color Banding](#color-banding)\n- [Slow Conversion](#slow-conversion)\n\n\n# GIF Generation Skill\n\nPost-process video files (webm/mp4) and generate optimized GIF output with configurable quality settings.\n\n\n## When To Use\n\n- Converting recordings to animated GIF format\n- Creating lightweight demo animations\n\n## When NOT To Use\n\n- High-quality video output - use full recording tools\n- Static image generation without animation needs\n\n## Overview\n\nThis skill handles the conversion of video recordings (typically from browser automation) to GIF format. It provides multiple quality presets and optimization options to balance file size with visual quality.\n\n## Required TodoWrite Items\n\n```\n- Validate input video file exists\n- Check ffmpeg installation\n- Execute GIF conversion\n- Verify output and report results\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n## Process\n\n### Step 1: Validate Input File\n\nConfirm the source video file exists and is a supported format:\n\n```bash\n# Check file exists and get info\nif [[ -f \"$INPUT_FILE\" ]]; then\n    file \"$INPUT_FILE\"\n    ffprobe -v quiet -show_format -show_streams \"$INPUT_FILE\" 2>/dev/null | head -20\nelse\n    echo \"Error: Input file not found: $INPUT_FILE\"\n    exit 1\nfi\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\nSupported input formats: `.webm`, `.mp4`, `.mov`, `.avi`\n\n### Step 2: Check ffmpeg Installation\n\nVerify ffmpeg is available:\n\n```bash\nif ! command -v ffmpeg &> /dev/null; then\n    echo \"Error: ffmpeg is not installed\"\n    echo \"Install with: sudo apt install ffmpeg (Linux) or brew install ffmpeg (macOS)\"\n    exit 1\nfi\nffmpeg -version | head -1\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Step 3: Execute Conversion\n\nChoose the appropriate conversion command based on quality requirements:\n\n#### Basic Conversion (Fast, Larger File)\n\n```bash\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1\" output.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n#### High Quality with Palette Generation (Recommended)\n\n```bash\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" output.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n#### Maximum Quality with Dithering\n\n```bash\nffmpeg -i input.webm -vf \"fps=15,scale=1024:-1:flags=lanczos,split[s0][s1];[s0]palettegen=max_colors=256:stats_mode=single[p];[s1][p]paletteuse=dither=bayer:bayer_scale=5\" output.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Optimization Options\n\n| Option | Description | Recommended Value |\n|--------|-------------|-------------------|\n| `fps` | Frames per second | 10-15 for smooth, 5-8 for smaller files |\n| `scale` | Width in pixels (-1 maintains aspect ratio) | 800 for web, 480 for thumbnails |\n| `flags=lanczos` | High-quality scaling algorithm | Always use for best quality |\n| `palettegen` | Generate optimized color palette | Use for quality-critical output |\n| `dither` | Dithering algorithm | `bayer` for patterns, `floyd_steinberg` for smooth |\n\n### Common Presets\n\n```bash\n# Thumbnail (small, fast loading)\nffmpeg -i input.webm -vf \"fps=8,scale=480:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" thumbnail.gif\n\n# Documentation (balanced)\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" docs.gif\n\n# High-fidelity demo\nffmpeg -i input.webm -vf \"fps=15,scale=1024:-1:flags=lanczos,split[s0][s1];[s0]palettegen=max_colors=256[p];[s1][p]paletteuse\" demo.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Step 4: Verify Output\n\nConfirm successful conversion and report metrics:\n\n```bash\nif [[ -f \"$OUTPUT_FILE\" ]]; then\n    echo \"GIF generated successfully: $OUTPUT_FILE\"\n\n    # Report file size\n    SIZE=$(du -h \"$OUTPUT_FILE\" | cut -f1)\n    echo \"File size: $SIZE\"\n\n    # Get dimensions and frame count\n    ffprobe -v quiet -select_streams v:0 -show_entries stream=width,height,nb_frames -of csv=p=0 \"$OUTPUT_FILE\"\nelse\n    echo \"Error: GIF generation failed\"\n    exit 1\nfi\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n## Exit Criteria\n\n- [ ] Input file validated as existing video format\n- [ ] ffmpeg confirmed available\n- [ ] GIF file created at specified output path\n- [ ] Output file size reported to user\n- [ ] No ffmpeg errors during conversion\n\n## Troubleshooting\n\n### Large Output File\n\nReduce quality settings:\n```bash\n# Lower fps and resolution\nffmpeg -i input.webm -vf \"fps=8,scale=640:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" smaller.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Color Banding\n\nUse dithering:\n```bash\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse=dither=floyd_steinberg\" smooth.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Slow Conversion\n\nUse basic conversion without palette generation for speed:\n```bash\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1\" quick.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\nFile v1.0.2:_meta.json\n\n{\n  \"ownerId\": \"kn7d107jg9jv602h9ytsegydq184a42s\",\n  \"slug\": \"nm-scry-gif-generation\",\n  \"version\": \"1.0.2\",\n  \"publishedAt\": 1778293235235\n}\n\nFile v1.0.2:skill-card.md\n\n## Description: <br>\nPost-process video files and generate optimized GIF output with configurable quality settings. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[athola](https://clawhub.ai/user/athola) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and technical users use this skill to convert local WebM, MP4, MOV, or AVI recordings into optimized GIFs for documentation or demos. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill proposes ffmpeg commands that operate on local media paths. <br>\nMitigation: Confirm input and output paths before execution and avoid processing untrusted media unnecessarily. <br>\nRisk: The skill depends on a locally installed ffmpeg binary. <br>\nMitigation: Install ffmpeg only from trusted package manager sources and verify availability before conversion. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/athola/nm-scry-gif-generation) <br>\n- [OpenClaw homepage](https://github.com/athola/claude-night-market/tree/master/plugins/scry) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, shell commands, guidance] <br>\n**Output Format:** [Markdown with inline bash code blocks] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Includes ffmpeg conversion presets, input validation steps, output checks, and troubleshooting guidance.] <br>\n\n## Skill Version(s): <br>\n1.0.2 (source: server release metadata) <br>\n\n## Ethical Considerations: <br>\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. <br>\n\nArchive v1.0.1: 2 files, 2655 bytes\n\nFiles: SKILL.md (6790b), _meta.json (141b)\n\nFile v1.0.1:SKILL.md\n\n---\nname: gif-generation\ndescription: Post-process video files and generate optimized GIFs. Converts webm/mp4\nversion: 1.9.4\ntriggers:\n  - gif\n  - ffmpeg\n  - video\n  - conversion\n  - optimization\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/scry\", \"emoji\": \"\\ud83e\\udd9e\"}}\nsource: claude-night-market\nsource_plugin: scry\n---\n\n> **Night Market Skill** — ported from [claude-night-market/scry](https://github.com/athola/claude-night-market/tree/master/plugins/scry). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n## Table of Contents\n\n- [Overview](#overview)\n- [Required TodoWrite Items](#required-todowrite-items)\n- [Process](#process)\n- [Step 1: Validate Input File](#step-1:-validate-input-file)\n- [Step 2: Check ffmpeg Installation](#step-2:-check-ffmpeg-installation)\n- [Step 3: Execute Conversion](#step-3:-execute-conversion)\n- [Basic Conversion (Fast, Larger File)](#basic-conversion-(fast,-larger-file))\n- [High Quality with Palette Generation (Recommended)](#high-quality-with-palette-generation-(recommended))\n- [Maximum Quality with Dithering](#maximum-quality-with-dithering)\n- [Optimization Options](#optimization-options)\n- [Common Presets](#common-presets)\n- [Step 4: Verify Output](#step-4:-verify-output)\n- [Exit Criteria](#exit-criteria)\n- [Troubleshooting](#troubleshooting)\n- [Large Output File](#large-output-file)\n- [Color Banding](#color-banding)\n- [Slow Conversion](#slow-conversion)\n\n\n# GIF Generation Skill\n\nPost-process video files (webm/mp4) and generate optimized GIF output with configurable quality settings.\n\n\n## When To Use\n\n- Converting recordings to animated GIF format\n- Creating lightweight demo animations\n\n## When NOT To Use\n\n- High-quality video output - use full recording tools\n- Static image generation without animation needs\n\n## Overview\n\nThis skill handles the conversion of video recordings (typically from browser automation) to GIF format. It provides multiple quality presets and optimization options to balance file size with visual quality.\n\n## Required TodoWrite Items\n\n```\n- Validate input video file exists\n- Check ffmpeg installation\n- Execute GIF conversion\n- Verify output and report results\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n## Process\n\n### Step 1: Validate Input File\n\nConfirm the source video file exists and is a supported format:\n\n```bash\n# Check file exists and get info\nif [[ -f \"$INPUT_FILE\" ]]; then\n    file \"$INPUT_FILE\"\n    ffprobe -v quiet -show_format -show_streams \"$INPUT_FILE\" 2>/dev/null | head -20\nelse\n    echo \"Error: Input file not found: $INPUT_FILE\"\n    exit 1\nfi\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\nSupported input formats: `.webm`, `.mp4`, `.mov`, `.avi`\n\n### Step 2: Check ffmpeg Installation\n\nVerify ffmpeg is available:\n\n```bash\nif ! command -v ffmpeg &> /dev/null; then\n    echo \"Error: ffmpeg is not installed\"\n    echo \"Install with: sudo apt install ffmpeg (Linux) or brew install ffmpeg (macOS)\"\n    exit 1\nfi\nffmpeg -version | head -1\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Step 3: Execute Conversion\n\nChoose the appropriate conversion command based on quality requirements:\n\n#### Basic Conversion (Fast, Larger File)\n\n```bash\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1\" output.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n#### High Quality with Palette Generation (Recommended)\n\n```bash\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" output.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n#### Maximum Quality with Dithering\n\n```bash\nffmpeg -i input.webm -vf \"fps=15,scale=1024:-1:flags=lanczos,split[s0][s1];[s0]palettegen=max_colors=256:stats_mode=single[p];[s1][p]paletteuse=dither=bayer:bayer_scale=5\" output.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Optimization Options\n\n| Option | Description | Recommended Value |\n|--------|-------------|-------------------|\n| `fps` | Frames per second | 10-15 for smooth, 5-8 for smaller files |\n| `scale` | Width in pixels (-1 maintains aspect ratio) | 800 for web, 480 for thumbnails |\n| `flags=lanczos` | High-quality scaling algorithm | Always use for best quality |\n| `palettegen` | Generate optimized color palette | Use for quality-critical output |\n| `dither` | Dithering algorithm | `bayer` for patterns, `floyd_steinberg` for smooth |\n\n### Common Presets\n\n```bash\n# Thumbnail (small, fast loading)\nffmpeg -i input.webm -vf \"fps=8,scale=480:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" thumbnail.gif\n\n# Documentation (balanced)\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" docs.gif\n\n# High-fidelity demo\nffmpeg -i input.webm -vf \"fps=15,scale=1024:-1:flags=lanczos,split[s0][s1];[s0]palettegen=max_colors=256[p];[s1][p]paletteuse\" demo.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Step 4: Verify Output\n\nConfirm successful conversion and report metrics:\n\n```bash\nif [[ -f \"$OUTPUT_FILE\" ]]; then\n    echo \"GIF generated successfully: $OUTPUT_FILE\"\n\n    # Report file size\n    SIZE=$(du -h \"$OUTPUT_FILE\" | cut -f1)\n    echo \"File size: $SIZE\"\n\n    # Get dimensions and frame count\n    ffprobe -v quiet -select_streams v:0 -show_entries stream=width,height,nb_frames -of csv=p=0 \"$OUTPUT_FILE\"\nelse\n    echo \"Error: GIF generation failed\"\n    exit 1\nfi\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n## Exit Criteria\n\n- [ ] Input file validated as existing video format\n- [ ] ffmpeg confirmed available\n- [ ] GIF file created at specified output path\n- [ ] Output file size reported to user\n- [ ] No ffmpeg errors during conversion\n\n## Troubleshooting\n\n### Large Output File\n\nReduce quality settings:\n```bash\n# Lower fps and resolution\nffmpeg -i input.webm -vf \"fps=8,scale=640:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" smaller.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Color Banding\n\nUse dithering:\n```bash\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse=dither=floyd_steinberg\" smooth.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Slow Conversion\n\nUse basic conversion without palette generation for speed:\n```bash\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1\" quick.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\nFile v1.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn7d107jg9jv602h9ytsegydq184a42s\",\n  \"slug\": \"nm-scry-gif-generation\",\n  \"version\": \"1.0.1\",\n  \"publishedAt\": 1778077326845\n}\n\nArchive v1.0.0: 2 files, 2655 bytes\n\nFiles: SKILL.md (6790b), _meta.json (141b)\n\nFile v1.0.0:SKILL.md\n\n---\nname: gif-generation\ndescription: Post-process video files and generate optimized GIFs. Converts webm/mp4\nversion: 1.8.2\ntriggers:\n  - gif\n  - ffmpeg\n  - video\n  - conversion\n  - optimization\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/scry\", \"emoji\": \"\\ud83e\\udd9e\"}}\nsource: claude-night-market\nsource_plugin: scry\n---\n\n> **Night Market Skill** — ported from [claude-night-market/scry](https://github.com/athola/claude-night-market/tree/master/plugins/scry). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n## Table of Contents\n\n- [Overview](#overview)\n- [Required TodoWrite Items](#required-todowrite-items)\n- [Process](#process)\n- [Step 1: Validate Input File](#step-1:-validate-input-file)\n- [Step 2: Check ffmpeg Installation](#step-2:-check-ffmpeg-installation)\n- [Step 3: Execute Conversion](#step-3:-execute-conversion)\n- [Basic Conversion (Fast, Larger File)](#basic-conversion-(fast,-larger-file))\n- [High Quality with Palette Generation (Recommended)](#high-quality-with-palette-generation-(recommended))\n- [Maximum Quality with Dithering](#maximum-quality-with-dithering)\n- [Optimization Options](#optimization-options)\n- [Common Presets](#common-presets)\n- [Step 4: Verify Output](#step-4:-verify-output)\n- [Exit Criteria](#exit-criteria)\n- [Troubleshooting](#troubleshooting)\n- [Large Output File](#large-output-file)\n- [Color Banding](#color-banding)\n- [Slow Conversion](#slow-conversion)\n\n\n# GIF Generation Skill\n\nPost-process video files (webm/mp4) and generate optimized GIF output with configurable quality settings.\n\n\n## When To Use\n\n- Converting recordings to animated GIF format\n- Creating lightweight demo animations\n\n## When NOT To Use\n\n- High-quality video output - use full recording tools\n- Static image generation without animation needs\n\n## Overview\n\nThis skill handles the conversion of video recordings (typically from browser automation) to GIF format. It provides multiple quality presets and optimization options to balance file size with visual quality.\n\n## Required TodoWrite Items\n\n```\n- Validate input video file exists\n- Check ffmpeg installation\n- Execute GIF conversion\n- Verify output and report results\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n## Process\n\n### Step 1: Validate Input File\n\nConfirm the source video file exists and is a supported format:\n\n```bash\n# Check file exists and get info\nif [[ -f \"$INPUT_FILE\" ]]; then\n    file \"$INPUT_FILE\"\n    ffprobe -v quiet -show_format -show_streams \"$INPUT_FILE\" 2>/dev/null | head -20\nelse\n    echo \"Error: Input file not found: $INPUT_FILE\"\n    exit 1\nfi\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\nSupported input formats: `.webm`, `.mp4`, `.mov`, `.avi`\n\n### Step 2: Check ffmpeg Installation\n\nVerify ffmpeg is available:\n\n```bash\nif ! command -v ffmpeg &> /dev/null; then\n    echo \"Error: ffmpeg is not installed\"\n    echo \"Install with: sudo apt install ffmpeg (Linux) or brew install ffmpeg (macOS)\"\n    exit 1\nfi\nffmpeg -version | head -1\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Step 3: Execute Conversion\n\nChoose the appropriate conversion command based on quality requirements:\n\n#### Basic Conversion (Fast, Larger File)\n\n```bash\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1\" output.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n#### High Quality with Palette Generation (Recommended)\n\n```bash\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" output.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n#### Maximum Quality with Dithering\n\n```bash\nffmpeg -i input.webm -vf \"fps=15,scale=1024:-1:flags=lanczos,split[s0][s1];[s0]palettegen=max_colors=256:stats_mode=single[p];[s1][p]paletteuse=dither=bayer:bayer_scale=5\" output.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Optimization Options\n\n| Option | Description | Recommended Value |\n|--------|-------------|-------------------|\n| `fps` | Frames per second | 10-15 for smooth, 5-8 for smaller files |\n| `scale` | Width in pixels (-1 maintains aspect ratio) | 800 for web, 480 for thumbnails |\n| `flags=lanczos` | High-quality scaling algorithm | Always use for best quality |\n| `palettegen` | Generate optimized color palette | Use for quality-critical output |\n| `dither` | Dithering algorithm | `bayer` for patterns, `floyd_steinberg` for smooth |\n\n### Common Presets\n\n```bash\n# Thumbnail (small, fast loading)\nffmpeg -i input.webm -vf \"fps=8,scale=480:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" thumbnail.gif\n\n# Documentation (balanced)\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" docs.gif\n\n# High-fidelity demo\nffmpeg -i input.webm -vf \"fps=15,scale=1024:-1:flags=lanczos,split[s0][s1];[s0]palettegen=max_colors=256[p];[s1][p]paletteuse\" demo.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Step 4: Verify Output\n\nConfirm successful conversion and report metrics:\n\n```bash\nif [[ -f \"$OUTPUT_FILE\" ]]; then\n    echo \"GIF generated successfully: $OUTPUT_FILE\"\n\n    # Report file size\n    SIZE=$(du -h \"$OUTPUT_FILE\" | cut -f1)\n    echo \"File size: $SIZE\"\n\n    # Get dimensions and frame count\n    ffprobe -v quiet -select_streams v:0 -show_entries stream=width,height,nb_frames -of csv=p=0 \"$OUTPUT_FILE\"\nelse\n    echo \"Error: GIF generation failed\"\n    exit 1\nfi\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n## Exit Criteria\n\n- [ ] Input file validated as existing video format\n- [ ] ffmpeg confirmed available\n- [ ] GIF file created at specified output path\n- [ ] Output file size reported to user\n- [ ] No ffmpeg errors during conversion\n\n## Troubleshooting\n\n### Large Output File\n\nReduce quality settings:\n```bash\n# Lower fps and resolution\nffmpeg -i input.webm -vf \"fps=8,scale=640:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" smaller.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Color Banding\n\nUse dithering:\n```bash\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse=dither=floyd_steinberg\" smooth.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n### Slow Conversion\n\nUse basic conversion without palette generation for speed:\n```bash\nffmpeg -i input.webm -vf \"fps=10,scale=800:-1\" quick.gif\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn7d107jg9jv602h9ytsegydq184a42s\",\n  \"slug\": \"nm-scry-gif-generation\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1776697312905\n}","readmeExcerpt":"Skill: gif-generation Owner: athola Summary: Converts webm/mp4 video files to optimized GIFs via ffmpeg with configurable quality settings Tags: latest:1.9.19 Version history: v1.9.19 | 2026-08-26T13:22:50.940Z | user Release v1.9.19 v1.9.17 | 2026-07-30T05:42:41.567Z | user Release v1.9.17 v1.9.16 | 2026-07-14T19:59:32.146Z | user Release v1.9.16 v1.9.14 | 2026-06-30T18:06:58.045Z | user Release v1.9.14 v1.9.13 | 20","codeSnippets":[],"executableExamples":[{"language":"text","snippet":"- Validate input video file exists\n- Check ffmpeg installation\n- Execute GIF conversion\n- Verify output and report results"},{"language":"bash","snippet":"# Check file exists and get info\nif [[ -f \"$INPUT_FILE\" ]]; then\n    file \"$INPUT_FILE\"\n    ffprobe -v quiet -show_format -show_streams \"$INPUT_FILE\" 2>/dev/null | head -20\nelse\n    echo \"Error: Input file not found: $INPUT_FILE\"\n    exit 1\nfi"},{"language":"bash","snippet":"if ! command -v ffmpeg &> /dev/null; then\n    echo \"Error: ffmpeg is not installed\"\n    echo \"Install with: sudo apt install ffmpeg (Linux) or brew install ffmpeg (macOS)\"\n    exit 1\nfi\nffmpeg -version | head -1"},{"language":"bash","snippet":"ffmpeg -i input.webm -vf \"fps=10,scale=800:-1\" output.gif"},{"language":"bash","snippet":"ffmpeg -i input.webm -vf \"fps=10,scale=800:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" output.gif"},{"language":"bash","snippet":"ffmpeg -i input.webm -vf \"fps=15,scale=1024:-1:flags=lanczos,split[s0][s1];[s0]palettegen=max_colors=256:stats_mode=single[p];[s1][p]paletteuse=dither=bayer:bayer_scale=5\" output.gif"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: gif-generation\ndescription: |\n  Converts webm/mp4 video files to optimized GIFs via ffmpeg with configurable quality settings\nversion: 1.9.8\ntriggers:\n  - gif\n  - ffmpeg\n  - video\n  - conversion\n  - optimization\n  - post-processing recordings into shareable GIFs\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/scry\", \"emoji\": \"\\ud83e\\udd9e\"}}\nsource: claude-night-market\nsource_plugin: scry\n---\n\n> **Night Market Skill** — ported from [claude-night-market/scry](https://github.com/athola/claude-night-market/tree/master/plugins/scry). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n## Table of Contents\n\n- [Overview](#overview)\n- [Required TodoWrite Items](#required-todowrite-items)\n- [Process](#process)\n- [Step 1: Validate Input File](#step-1:-validate-input-file)\n- [Step 2: Check ffmpeg Installation](#step-2:-check-ffmpeg-installation)\n- [Step 3: Execute Conversion](#step-3:-execute-conversion)\n- [Basic Conversion (Fast, Larger File)](#basic-conversion-(fast,-larger-file))\n- [High Quality with Palette Generation (Recommended)](#high-quality-with-palette-generation-(recommended))\n- [Maximum Quality with Dithering](#maximum-quality-with-dithering)\n- [Optimization Options](#optimization-options)\n- [Common Presets](#common-presets)\n- [Step 4: Verify Output](#step-4:-verify-output)\n- [Exit Criteria](#exit-criteria)\n- [Troubleshooting](#troubleshooting)\n- [Large Output File](#large-output-file)\n- [Color Banding](#color-banding)\n- [Slow Conversion](#slow-conversion)\n\n\n# GIF Generation Skill\n\nPost-process video files (webm/mp4) and generate optimized GIF output with configurable quality settings.\n\n\n## When To Use\n\n- Converting recordings to animated GIF format\n- Creating lightweight demo animations\n\n## When NOT To Use\n\n- High-quality video output - use full recording tools\n- Static image generation without animation needs\n\n## Overview\n\nThis skill handles the conversion of video recordings (typically from browser automation) to GIF format. It provides multiple quality presets and optimization options to balance file size with visual quality.\n\n## Required TodoWrite Items\n\n```\n- Validate input video file exists\n- Check ffmpeg installation\n- Execute GIF conversion\n- Verify output and report results\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\n## Process\n\n### Step 1: Validate Input File\n\nConfirm the source video file exists and is a supported format:\n\n```bash\n# Check file exists and get info\nif [[ -f \"$INPUT_FILE\" ]]; then\n    file \"$INPUT_FILE\"\n    ffprobe -v quiet -show_format -show_streams \"$INPUT_FILE\" 2>/dev/null | head -20\nelse\n    echo \"Error: Input file not found: $INPUT_FILE\"\n    exit 1\nfi\n```\n**Verification:** Run the command with `--help` flag to verify availability.\n\nSupported input formats: `.webm`, `.mp4`, `.mov`, `.avi`\n\n### Step 2: Check ffmpeg Installation\n\nVerify ffmpeg is available:\n\n```bash\nif ! comm"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7d107jg9jv602h9ytsegydq184a42s\",\n  \"slug\": \"nm-scry-gif-generation\",\n  \"version\": \"1.9.19\",\n  \"publishedAt\": 1787750570940\n}"},{"path":"skill-card.md","content":"## Description:\n\nConverts webm/mp4 video files to optimized GIFs via ffmpeg with configurable quality settings.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[athola](https://clawhub.ai/user/athola)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and engineers use this skill to convert screen recordings or other supported video files into shareable GIFs with configurable size and quality settings.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill may propose installing ffmpeg as a system package dependency.\n\nMitigation: Treat any ffmpeg installation command as a separate user-approved system package action.\n\nRisk: GIF conversion writes an output file path selected during the workflow.\n\nMitigation: Review the output path before running conversions and verify the generated file after completion.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/athola/skills/nm-scry-gif-generation)\n- [OpenClaw homepage](https://github.com/athola/claude-night-market/tree/master/plugins/scry)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, guidance]\n\n**Output Format:** [Markdown with inline bash commands and conversion presets]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Produces guidance for validating input videos, checking ffmpeg, running GIF conversions, and verifying output files.]\n\n## Skill Version(s):\n\n1.9.19 (source: server release evidence; artifact frontmatter lists 1.9.8)\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":"Converts webm/mp4 video files to optimized GIFs via ffmpeg with configurable quality settings Skill: gif-generation Owner: athola Summary: Converts webm/mp4 video files to optimized GIFs via ffmpeg with configurable quality settings Tags: latest:1.9.19 Version history: v1.9.19 | 2026-08-26T13:22:50.940Z | user Release v1.9.19 v1.9.17 | 2026-07-30T05:42:41.567Z | user Release v1.9.17 v1.9.16 | 2026-07-14T19:59:32.146Z | user Release v1.9.16 v1.9.14 | 2026-06-30T18:06:58.045Z | user Release v1.9.14 v1.9.13 | 20","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":915,"uniquenessScore":54,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-10T08:54:40.517Z","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-10T08:54:40.517Z","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-10T11:54:21.561Z","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"}]}}}