CommunityBildgithub.com

phido0410/svg-design

SVG-Asset-Pipeline — Satori (HTML/JSX + CSS → SVG, dann PNG via resvg oder sharp) für Titelcards, Thumbnails, OG-Bilder, Standbilder; und SVGO v4 (SVGs optimieren/minimieren, CLI + Konfiguration), ohne SVGs zu beschädigen, die animiert werden sollen. Verwende es, wenn du Bilder aus Markup generierst, Video-Thumbnails/Standbilder erstellst oder SVGs vor der Animation mit GSAP / Anime.js / Remotion bereinigst.

Was ist svg-design?

Diese Fähigkeit bietet eine vollständige SVG-Asset-Pipeline, die zwei leistungsstarke Werkzeuge kombiniert: Satori zur Generierung von SVGs aus HTML/JSX + CSS und SVGO v4 zur Optimierung und Minimierung von SVGs. Sie ist besonders nützlich für Entwickler, die Titelcards, Video-Thumbnails, Open-Graph-Bilder oder Standbilder aus Markup-Code erzeugen möchten – zum Beispiel für Social Media, Videoplattformen oder Remotion-Projekte. Gleichzeitig ermöglicht SVGO eine verlustfreie Optimierung, die speziell darauf ausgelegt ist, SVGs nicht zu beschädigen, die später mit Animationsbibliotheken wie GSAP, Anime.js oder innerhalb von Remotion animiert werden sollen. Die Pipeline unterstützt Node.js-CLI und API-Aufrufe und setzt auf die Bibliotheken `satori`, `@resvg/resvg-js` und `svgo`. Die SKILL.md enthält detaillierte Codebeispiele, Konfigurationshinweise für SVGO (z. B. Deaktivierung von `cleanupIds` oder `mergePaths`, um Selektoren und Animationsziele zu erhalten) sowie wichtige Hinweise zu Schriftarten, Layout-Einschränkungen und Emoji-Handling.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/phido0410/claude-video-skills/tree/HEAD/skills/svg-design

Installed? Explore more Bild skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

SVG-Design: Satori + SVGO

Geprüft 2026-10: satori 0.63, @resvg/resvg-js 2.6, svgo 4.1.

Satori — Markup → SVG

npm i satori @resvg/resvg-js
import satori from 'satori'
import { Resvg } from '@resvg/resvg-js'
import { readFile, writeFile } from 'node:fs/promises'

const font = await readFile('./Inter-Bold.ttf')            // TTF, OTF, WOFF oder WOFF2
const svg = await satori(
  <div style={{ display: 'flex', width: '100%', height: '100%', alignItems: 'center',
                justifyContent: 'center', background: '#0b1020', color: 'white', fontSize: 96 }}>
    Đủ 20/20
  </div>,
  { width: 1920, height: 1080, fonts: [{ name: 'Inter', data: font, weight: 700, style: 'normal' }] },
)
const png = new Resvg(svg, { fitTo: { mode: 'width', value: 1920 } }).render().asPng()
await writeFile('title.png', png)
  • Ohne JSX/React: Übergib einfache Objekte: { type: 'div', props: { style: {...}, children: '...' } }.
  • Schriftarten sind zwingend erforderlich, sobald Text vorhanden ist; Vietnamesisch benötigt eine Schriftart, die die entsprechenden Glyphen enthält (Inter, Be Vietnam Pro, Noto Sans).
  • Layout: Flexbox, Grid (kein Subgrid/Masonry) und Block. Es ist eine CSS-Teilmenge — kein JS, keine Animationen, keine externen Stylesheets; Styles inline.
  • Bilder: <img src> mit einer absoluten URL oder Data-URI, plus explizite width/height.
  • Text wird standardmäßig zu <path> (portabel, nicht auswählbar); embedFont: false belässt <text>.
  • Emoji: graphemeImages oder loadAdditionalAsset, um Bilder/Schriftarten für fehlende Segmente bereitzustellen.
  • PNG-Alternative: sharp(Buffer.from(svg)).png().

SVGO v4 — optimieren

npx svgo in.svg -o out.svg
npx svgo -f ./icons -o ./icons-min
// svgo.config.mjs
export default {
  multipass: true,
  plugins: [
    { name: 'preset-default', params: { overrides: {
      // Behalte diese Einstellungen, wenn das SVG animiert oder über id/class gestylt wird:
      cleanupIds: false,          // würde IDs umbenennen/entfernen, die dein Code ansteuert
      collapseGroups: false,      // würde <g> zusammenfassen, das du als Einheit animierst
      mergePaths: false,          // würde Pfade zusammenführen, die du separat animierst
      convertShapeToPath: false,  // würde <circle>/<rect> in <path> umwandeln (kein r, cx, width mehr)
    } } },
    'prefixIds',                  // eindeutige IDs, wenn mehrere SVGs auf einer Seite eingebettet sind
  ],
}
  • Änderungen in v4: removeViewBox und removeTitle sind nicht mehr in preset-default enthalten (bei Bedarf namentlich hinzufügen; viewBox für Skalierung beibehalten). removeScriptElement → removeScripts. Nur benannte Exporte: import { optimize } from 'svgo'; Browser-Build ist svgo/browser.
  • Node-API: const { data } = optimize(svgString, { multipass: true, plugins: [...] }).
  • Für statische Icons reicht preset-default aus; die obigen Überschreibungen sind nur für animierte oder per Skript gesteuerte SVGs relevant.
  • Nach der Optimierung eines SVGs für Animationen: Prüfe, ob jeder Selektor, den der Animationscode verwendet, noch in der Ausgabe vorhanden ist.

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

Verwandte Skills