About takumi
A guidance skill for developers using takumi-js to render JSX, HTML, or node trees as images and animations. It also covers OG image routes, styling, assets, deployment targets, and migration.
Key features
- 01Render images, SVG, and animations
- 02Build ImageResponse OG routes
- 03Work with fonts, images, and emoji
- 04Configure Tailwind and CSS styling
- 05Guide WASM and framework deployment
Use cases
- 01Generate social-sharing OG images
- 02Render JSX or HTML as images
- 03Migrate projects from next/og or Satori
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ dobroslavradosavljevic/ skills --skill takumiAfter installing, type/takumiin Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
agents/openai.yamlreferences/fonts-images-styling.mdformats-animation.mdframeworks.mdpitfalls-migration.mdsetup-core.mdsource-map.mdDetails
From the project READMETakumi
Use this skill when work touches Takumi / takumi-js: rendering JSX, HTML, or node trees to PNG/JPEG/WebP/ICO/SVG/animations without Chromium; ImageResponse OG routes; fonts/images/emoji; Tailwind tw vs compiled css; WASM bundling; or migrating from next/og / Satori / v1.
Snapshot: [email protected] with matching @takumi-rs/core, @takumi-rs/wasm, @takumi-rs/helpers, @takumi-rs/image-response (released 2026-09-15; still npm latest on 2026-10-01). Sibling PDF package is [email protected]. Refresh from source-map.md if versions differ.
Workflow
- Inspect the local surface before changing code:
- Packages:
takumi-js(preferred all-in-one), optionally@takumi-rs/core,@takumi-rs/wasm,@takumi-rs/helpers. - Version: target v2.14. Treat v1 APIs (
loadFonts,fetchedResources,createImageResponse) as legacy.stylesheetsand thekeyframesrender option are deprecated (removed in v3) — usecss. - Runtime: Node/Bun native vs Edge / Cloudflare Workers / browser WASM.
takumi-jsauto-picks;takumi-jsand@takumi-rs/wasmrequire Node>=20.19. Pin platform natives for cross-compile deploys. - Entry:
render/renderSvg/renderAnimationvsImageResponsefromtakumi-js/response. Force backends withtakumi-js/nodeortakumi-js/wasm. Browser bundles:takumi-js/wasm/no-init+takumi-js/wasm-url. - Styling path: inline
style, built-intw,<style>, orcss(string, list, or rule objects).
- Packages:
- Refresh docs when the user asks for latest behavior, the installed version is unclear, or work touches
css/ WASM bundling / animation. Start from source-map.md. - For install, packages,
render/ImageResponse, inputs, caches, and canvas sizing, use setup-core.md. - For fonts, images, emoji,
tw,css, tables, and lists, use fonts-images-styling.md. - For formats, DPR, SVG, animation, and raw/ffmpeg frames, use formats-animation.md.
- For Next.js, TanStack Start, Workers, Nitro, WASM bundlers, and other hosts, use frameworks.md.
- For v1→v2, 2.5→2.14 deltas, Satori/
next/ogmigration, and troubleshooting, use pitfalls-migration.md. - Prefer
bun/bunxin command examples. Never copy Fumadocs annotations ([!code --],[!code highlight]) into generated code.
Judgment
- Default to
render(node, options)ornew ImageResponse(node, options). UseRendererfromtakumi-js/node(or@takumi-rs/core) only to reuse font/image caches across many renders. - Always
awaitrender,renderSvg, andrenderAnimation(and napi/WASMRenderermethods). - Put
w-full h-full(orwidth/height: 100%) on the root — the canvas size alone does not stretch the root. - Pass fonts per call via
fonts(array orPromise). Built-in last-resort is Geist Latin, weights 300–800. Register anything else (CJK, custom brands). Genericsans-serifresolves to registered families, not the built-in. PrefergoogleFontsfromtakumi-js/helpers; weight ranges /axesload variable fonts. Usegeneric: "monospace"(etc.) sofont-monoresolves. - Prefer
cssover deprecatedstylesheets. Pass compiled Tailwind, a Tailwind v4 source (@theme,@import "tailwindcss",@apply), or rule objects{ selector, style }. Do not pass bothcssandstylesheets. twis a built-in Tailwind subset. No Preflight unlesscssincludes@import "tailwindcss". Unlayered stylesheet rules beat utilities;!flips that. Tokens on:root/@themedrive utilities (--color-brand-500→bg-brand-500).- Bare
<div>isdisplay: block(CSS), not flex — unlike Satori. Explicitdisplay: flexfrom old templates still works. - When user input can influence remote
src/ background URLs, setimages.allowUrl(SSRF). Do not sharefetchCacheacross trust boundaries. Fetch timeout default is 30s (not 5s). - Prefer native
takumi-js/nodeon Node/Bun for multi-threaded renders; WASM is single-threaded. Browser/webpack/Turbopack:wasm/no-init+wasm-url, not the Vite?urlentry. - Drop-in for
next/og: swap import totakumi-js/response. Skip Chromium / Satori+sharp pipelines unless the project already depends on them for non-Takumi reasons. - Invoices/reports:
takumi-pdf, nottakumi-js.
Verification
Prefer the repo's existing checks. For meaningful Takumi work, include the relevant subset:
- Typecheck route handlers / render scripts (
ImageResponse,RenderOptions,css). - Smoke-render one static OG (
1200×630) and open the bytes (or hit the route). - Confirm root fills the canvas; use
drawDebugBorder: truewhen layout looks wrong. - For CJK/custom type, confirm
fonts/googleFontsand no tofu glyphs. - On deploy: native binding present for the target OS/arch (or WASM path on Workers). Node 20.19+ for
takumi-js/ WASM. - After v1→v2: re-check
await,fonts/imagesoptions, andnew ImageResponse(jsx, opts). - After 2.5→2.14: re-check
css(not onlystylesheets), fetch timeout, 64 MiB / 64 MP budgets, and WASM bundler entries.