Command Palette

Search for a command to run...

UnylyUnyly
Browse all

Svgshot

FreeNot checked

SVGShot — Animated SVG creator & screenshot tool with CSS animation-aware capture. Render, filmstrip, and diff animated SVGs the way users actually see them.

GitHubEmbed

About

SVGShot — Animated SVG creator & screenshot tool with CSS animation-aware capture. Render, filmstrip, and diff animated SVGs the way users actually see them.

README

Create, preview, and QA animated SVGs with CSS animation-aware screenshots. The open-source animated SVG creator tool that captures what users actually see — not a blank screen at t=0.

License: Apache 2.0 Node.js MCP Compatible

The Problem Every SVG Creator Faces

Every SVG screenshot tool renders at t=0 — the instant the page loads. CSS animations that start with opacity: 0 are invisible in the screenshot, even though users see them animate in within milliseconds.

Your animated SVGs look empty in previews, CI screenshots, and AI-assisted design workflows.

SVGShot fixes this with animation-aware capture modes that screenshot your SVGs the way users actually experience them.

Features

  • 🎬 Animation-Aware SVG Screenshots — Capture animated SVGs mid-animation, at their final state, or frame-by-frame
  • 🎞️ Filmstrip Mode — Generate multi-frame strips showing the full SVG animation progression at configurable intervals
  • 🔍 Visual Diff — Pixel-level comparison between two versions of your SVG or HTML
  • 🤖 MCP Server — Drop-in tool for Claude Code, Cursor, and any MCP-compatible AI agent
  • 🌐 REST API — Simple HTTP endpoints for any SVG creator workflow or CI pipeline
  • ⚡ Fast — Shared Playwright browser instance, 2-second renders, no cold starts after first request
  • 🎨 SVG + HTML + React — Auto-detects input format, wraps SVG/snippets in proper boilerplate with Tailwind CDN

Quick Start

git clone https://github.com/BusyBee3333/svgshot.git
cd svgshot
npm install
npx playwright install chromium
npm start
# Server running at http://localhost:3700

SVG Animation Capture Modes

The core innovation — four ways to capture animated SVG content:

Mode What It Does Best For
natural Waits configurable delay (default 800ms) then screenshots Animated SVGs — captures mid-animation state like users see
freeze-end Injects CSS to force all SVG animations to their final state Static previews of fully-settled designs
filmstrip Captures N frames at intervals, composites into one image SVG animation QA — verify timing, opacity ramps, transitions frame by frame
instant Screenshots immediately at page load (t=0) Static SVGs or comparing with the t=0 bug behavior

How freeze-end Works

Injects this CSS before capture to jump every CSS animation to its end state:

*, *::before, *::after {
  animation-delay: -9999s !important;
  animation-duration: 0.001s !important;
  animation-fill-mode: both !important;
  transition-duration: 0s !important;
  transition-delay: 0s !important;
}

SVG Filmstrip Example

Capture 8 frames over 2 seconds to verify your animated SVG output:

curl -X POST http://localhost:3700/filmstrip \
  -H 'Content-Type: application/json' \
  -d '{
    "code": "<svg>...</svg>",
    "frames": 8,
    "duration": 2000,
    "layout": "horizontal",
    "showTimestamps": true
  }' --output filmstrip.jpg

Returns a single composite image with all frames side by side, each labeled with its timestamp. Perfect for verifying CSS animation timing in your SVG creator workflow.

REST API (Port 3700)

POST /render — Screenshot SVG or HTML

curl -X POST http://localhost:3700/render \
  -H 'Content-Type: application/json' \
  -d '{
    "code": "<svg viewBox=\"0 0 200 200\"><style>@keyframes fadeIn{from{opacity:0}to{opacity:1}} circle{animation:fadeIn 1s forwards}</style><circle cx=\"100\" cy=\"100\" r=\"80\" fill=\"coral\" opacity=\"0\"/></svg>",
    "viewport": { "width": 400, "height": 400 },
    "quality": 90,
    "animationMode": "natural",
    "screenshotDelay": 1000
  }' --output screenshot.jpg

Parameters:

Param Type Default Description
code string required SVG, HTML, or React code to render
viewport object {width:1280, height:800} Viewport dimensions
quality number 85 JPEG quality (1-100)
fullPage boolean false Capture full scrollable page
animationMode string "natural" natural, freeze-end, or instant
screenshotDelay number 800 Milliseconds to wait before capture (natural mode)

Response: JPEG image buffer with headers:

  • X-Console-Errors — JSON array of JS console errors during render
  • X-Render-Meta — JSON object with render metadata

POST /filmstrip — SVG Animation Frame Strip

curl -X POST http://localhost:3700/filmstrip \
  -H 'Content-Type: application/json' \
  -d '{
    "code": "<svg>...</svg>",
    "frames": 6,
    "duration": 2000,
    "layout": "grid",
    "showTimestamps": true
  }' --output filmstrip.jpg

Parameters:

Param Type Default Description
code string required SVG or HTML to capture
viewport object {width:800, height:600} Per-frame viewport
quality number 85 JPEG quality
frames number 6 Number of frames to capture
duration number 2000 Total duration to capture (ms)
layout string "horizontal" horizontal, vertical, or grid
showTimestamps boolean true Show timestamp labels on each frame

POST /diff — Visual Diff Two SVG Versions

curl -X POST http://localhost:3700/diff \
  -H 'Content-Type: application/json' \
  -d '{
    "before": "<svg><circle cx=\"50\" cy=\"50\" r=\"40\" fill=\"red\"/></svg>",
    "after": "<svg><circle cx=\"50\" cy=\"50\" r=\"40\" fill=\"blue\"/></svg>"
  }'

Response:

{
  "diffPercent": 2.45,
  "totalPixels": 1024000,
  "changedPixels": 25088,
  "dimensions": { "width": 1280, "height": 800 }
}

GET /health

{ "status": "ok", "service": "svgshot", "version": "1.0.0" }

MCP Server — AI-Powered SVG Creator Integration

Use SVGShot as an MCP tool in Claude Code, Cursor, Windsurf, or any MCP-compatible AI coding agent. The AI can create animated SVGs, render them, see the output, and iterate — all in one conversation.

Add to Claude Code

claude mcp add svgshot -- node /path/to/svgshot/src/mcp.js

Add to Cursor / Windsurf / Other MCP Clients

{
  "mcpServers": {
    "svgshot": {
      "command": "node",
      "args": ["/path/to/svgshot/src/mcp.js"]
    }
  }
}

MCP Tools

Tool Description
render Full SVG/HTML render with all options — returns base64 JPEG + metadata
render_svg SVG convenience wrapper — auto-sets natural mode + 1000ms delay
filmstrip Capture SVG animation as multi-frame composite strip
diff Visual diff between two SVG/HTML versions — returns diff image + percentage

Use Cases

Animated SVG Creator Workflow

  1. Create your SVG with CSS @keyframes animations
  2. Render with natural mode to see what users actually experience
  3. Use filmstrip to verify animation timing frame by frame
  4. Iterate until perfect, then ship

SVG QA in CI/CD

# Render all SVGs and check for console errors
for svg in assets/*.svg; do
  curl -s -X POST http://localhost:3700/render \
    -H 'Content-Type: application/json' \
    -d "{\"code\": $(jq -Rs . < "$svg")}" \
    -D - -o /dev/null | grep X-Console-Errors
done

SVG Visual Regression Testing

# Diff before and after an SVG change
curl -X POST http://localhost:3700/diff \
  -H 'Content-Type: application/json' \
  -d "{\"before\": $(cat before.svg | jq -Rs .), \"after\": $(cat after.svg | jq -Rs .)}"

AI-Assisted Animated SVG Design

With the MCP server, your AI coding agent can:

  • Create animated SVGs from text descriptions
  • Render them immediately to verify the visual output
  • See what's wrong and fix it in the same conversation
  • Use filmstrip to verify SVG animation timing
  • Iterate until the animation is perfect — no more blind SVG coding

Architecture

svgshot/
  src/
    server.js       — Express REST server (port 3700)
    mcp.js          — MCP stdio server (4 tools)
    renderer.js     — Core Playwright engine + filmstrip
    differ.js       — Pixel diff (pixelmatch)
  package.json
  start.sh          — Start REST server
  mcp.sh            — Start MCP server
  LICENSE           — Apache 2.0
  • Shared browser instance — Playwright Chromium reused across requests
  • 2x device scale — Retina-quality SVG screenshots by default
  • Auto-detect format — SVG, HTML snippets, and full HTML documents handled automatically
  • Tailwind CDN — Included by default for HTML snippet rendering
  • Graceful shutdown — Clean browser teardown on SIGTERM/SIGINT

Requirements

  • Node.js 18+
  • Playwright Chromium (npx playwright install chromium)

License

Apache License 2.0 — see LICENSE for details.


Built for the animated SVG creator community — because animated SVGs deserve screenshots that actually show the animations.

from github.com/BusyBee3333/svgshot

Installing Svgshot

This server has no published package — it is built from source. Open the repository and follow its README.

▸ github.com/BusyBee3333/svgshot

FAQ

Is Svgshot MCP free?

Yes, Svgshot MCP is free — one-click install via Unyly at no cost.

Does Svgshot need an API key?

No, Svgshot runs without API keys or environment variables.

Is Svgshot hosted or self-hosted?

Self-hosted: the server runs locally on your machine via the install command above.

How do I install Svgshot in Claude Desktop, Claude Code or Cursor?

Open Svgshot on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.

Related MCPs

LibreOffice Tools

Enables AI agents to read, write, and edit Office documents via LibreOffice with token-efficient design. Supports multiple formats including DOCX, XLSX, PPTX, a

passerbyflutterby passerbyflutter

dannote/figma-use

Full Figma control: create shapes, text, components, set styles, auto-layout, variables, export. 80+ tools.

dannoteby dannote

Logo.dev

Search and retrieve company logos by brand or domain. Customize size, format, and theme to match your design needs. Accelerate design, prototyping, and content

NOVA-3951by NOVA-3951

Design Inspiration Server

Searches top design platforms like Dribbble and Behance to provide UI inspiration, color palettes, and layout patterns via the Serper API. It allows users to re

YonasValentinby YonasValentin

PIX4Dmatic

Enables GUI automation for controlling PIX4Dmatic on Windows through MCP. Supports launching, focusing, capturing screenshots, sending hotkeys, clicking UI elem

jangjo123by jangjo123

Figma

Extract design specs and assets

Figmaby Figma

mcp-dockmaster

An Open-Sourced UI to install and manage MCP servers for Windows, Linux and macOS.

by Community

ariekogan/ateam-mcp

Build, validate, and deploy multi-agent AI solutions on the ADAS platform. Design skills with tools, manage solution lifecycle, and connect from any AI environm

ariekoganby ariekogan

thinkchainai/mcpbundles

MCP Bundles: Create custom bundles of tools and connect providers with OAuth or API keys. Use one MCP server across thousands of integrations, with programmatic

thinkchainaiby thinkchainai

arikusi/nakkas

MCP server that turns AI into an SVG artist. One rendering engine with JSON config, AI controls all design parameters. CSS @keyframes + SMIL animations, 16+ ele

arikusiby arikusi

Compare Svgshot with

Not sure what to pick?

Find your stack in 60 seconds

Author?

Embed badge for your README

Browse similar

All design MCPs