markdown-to-image
Original:🇺🇸 English
Translated
Render markdown as beautiful styled images using the inkframe CLI. Use this skill whenever the user wants to turn text or markdown into a visual image, create social media graphics (tweets, Instagram posts, LinkedIn cards, quote cards, memes), generate code snippet images, make visual cards or posters from content, or produce any image from text/markdown. Also trigger when the user mentions 'inkframe', asks to 'render markdown', 'markdown to image', 'text to image', or wants to make content visually shareable. Even if they just say 'make this look nice as an image' or 'create a graphic for this' — use this skill.
13installs
Sourceericjy/inkframe
Added on
NPX Install
npx skill4agent add ericjy/inkframe markdown-to-imageTags
Translated version includes tags in frontmatterSKILL.md Content
View Translation Comparison →Inkframe — Markdown to Image
Inkframe renders markdown content into polished, styled images via the inkframe.dev API. Run it via — no global install needed. The package includes a free shared API key, so it works out of the box.
npx inkframeSetup
No setup needed — always run the CLI via . The package ships with a free shared API key, so it works out of the box with no signup.
npx inkframeQuick Start
bash
# Simplest render — just give it markdown
npx inkframe render --content "# Hello World\n\nThis is styled." --output out.png
# Render from a file
npx inkframe render --content @post.md --output out.png
# Use a template for instant styling
npx inkframe render --template tmpl_PWfUUDlVw --content @post.md --output out.png
# Preview in the browser (free, no API key needed)
npx inkframe open --content @post.md --design @design.jsonCLI Commands
npx inkframe open
npx inkframe openOpens the Inkframe playground in the browser with your content and design pre-loaded. Free, no API key needed — great for previewing and tweaking before rendering.
| Flag | Description | Default |
|---|---|---|
| Markdown string or | — |
| Inline JSON or | — |
| Playground base URL | |
bash
npx inkframe open --content "# Hello World"
npx inkframe open --content @post.md --design @design.jsonnpx inkframe render
npx inkframe render| Flag | Description | Default |
|---|---|---|
| Markdown string or | Required (unless |
| Template ID — applies its design (and content if | — |
| Inline JSON or | — |
| Save image to file (e.g. | prints URL |
| Scale factor: 1, 2, or 3 | 2 |
| Output format: | |
Content uses the prefix convention: reads from , while is inline markdown.
@--content @notes.mdnotes.md--content "# Title"npx inkframe templates list
npx inkframe templates listLists all available templates with their IDs and names.
npx inkframe templates get <id>
npx inkframe templates get <id>Gets full template JSON. Add to get just the design object. Add to save to file.
--design-only-o file.jsonAvailable Templates
| ID | Name | Good for |
|---|---|---|
| Tweet (Dark) | Dark-themed tweet screenshots |
| Poem | Poetry, literary quotes |
| Quote | Inspirational/pull quotes |
| Business Poster | Professional announcements |
| Tweet | Tweet-style cards |
| DeepSeek问答 | Q&A format (Chinese) |
| Meme - Drake | Drake meme format |
| Tweet (Bilingual) | Bilingual tweet cards |
| Story (Bilingual) | Bilingual story format |
| Quote Card (Classic) | Classic styled quotes |
| Flowchart | Process/flow diagrams |
| Quote Card | Modern quote cards |
| Tweet | Alternative tweet style |
| Testimonial | Customer testimonials |
| Code Snippet | Code with syntax highlighting |
| Carousel | Multi-slide carousel |
| Listicle | Numbered/bulleted lists |
Templates are designed to look good out of the box — their fonts, colors, backgrounds, and layouts are already curated to work well together. Resist the urge to override a template's design unless the user specifically asks for customization. A template used as-is will almost always look more polished than a hastily assembled custom design.
Choosing the right template
Match the content to the template's purpose. When in doubt, inspect the template first with to see its content structure and design — then model your markdown after the template's content format for best results.
inkframe templates get <id>- Quotes/sayings: (Quote Card Classic) for elegant serif look,
tmpl_qtYz45Xao(Quote) for casual,tmpl_PWfUUDlVw(Quote Card) for moderntmpl_pXED6toGN - Code: (Code Snippet) — dark theme, window controls, syntax highlighting
tmpl_hSlqk3U8h - Tweets/social: ,
tmpl_W46vhIVoJ(dark),tmpl_650IbCa8ktmpl_ciwTrec6U - Long-form content: (Business Poster),
tmpl_DAtOcPEQE(Listicle)tmpl_0fJUHUTWs - Testimonials:
tmpl_jKumMZX6E
Custom designs (when templates aren't enough)
Only reach for when the user wants something specific that no template provides — a particular aspect ratio, custom branding, or a specific color scheme. In that case, the best approach is:
--design- Find the closest template:
npx inkframe templates get <id> --design-only --output design.json - Modify only the fields that need to change
- Render with:
npx inkframe render --content @post.md --design @design.json --output out.png
For the full reference of all design fields (dimensions, backgrounds, color palettes, fonts, and more), read in this skill's directory.
references/design-options.mdMulti-Page Content
Content can include to separate pages (e.g. for carousels or slideshows). The API renders one image per request — if your content has , only the first page is rendered. The inkframe.dev studio UI supports rendering all pages at once.
\pagebreak\pagebreakTo render multi-page content, split it yourself and make one render call per page. Run them in parallel for speed:
bash
# Split content and render each page in parallel
npx inkframe render --content @page1.md --design @design.json --output slide1.png &
npx inkframe render --content @page2.md --design @design.json --output slide2.png &
npx inkframe render --content @page3.md --design @design.json --output slide3.png &
waitWhen building carousels or slideshows, write each page to a separate temp file, then render all pages in parallel using and .
&waitDesign Pitfalls
When is false, text renders directly on the background with no box behind it. Avoid these combinations — the text becomes unreadable:
contentBoxVisibility- Dark + light
backgroundKey(which has dark text) +colorPaletteKeycontentBoxVisibility: false - Light + dark
backgroundKey(which has light text) +colorPaletteKeycontentBoxVisibility: false
Either keep the content box visible, or match the palette theme to the background.
Workflow Tips
- Try a template as-is first — the curated designs are almost always better than custom ones. Use to browse, then render with
npx inkframe templates list.--template - Inspect before customizing — shows the template's content and design. Model your markdown after the template's content structure.
npx inkframe templates get <id> - Customize sparingly — if you must customize, start from a template's design and change only what's needed. Don't build designs from scratch.
- Preview with — use
npx inkframe opento open the playground in the browser for interactive previewing and tweaking. Free, no API key needed.npx inkframe open --content @post.md --design @design.json - Write markdown to a temp file for anything longer than a line or two, then use . This avoids shell escaping issues with inline content.
@file.md - Always use to save the image locally rather than just printing a URL.
--output - Content is standard markdown — headings, bold, italic, lists, code blocks, and blockquotes all render as expected.