| name | exporting-to-png |
| description | Export code, terminal output, diagrams, or UI components to PNG images using headless browser rendering or CLI tools. |
| user-invocable | true |
Exporting to PNG
Convert code snippets, Markdown content, terminal output, diagrams, or rendered UI components into PNG image files.
Methods
1. HTML → PNG via Headless Browser
The most flexible approach. Render any content as HTML and screenshot it.
npx playwright screenshot --full-page "file:///path/to/content.html" output.png
node -e "
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.setContent(\`<html>...</html>\`);
await page.screenshot({ path: 'output.png', fullPage: true });
await browser.close();
})();
"
Steps:
- Generate an HTML file with the content styled appropriately (syntax highlighting, padding, fonts)
- Use a headless browser to render and capture
- Crop if needed using an image tool
2. Code → PNG with Carbon or Silicon
For styled code screenshots:
silicon --language python --output code.png source.py
silicon --from-clipboard --output code.png
3. Mermaid Diagrams → PNG
npx @mermaid-js/mermaid-cli mmdc -i diagram.mmd -o diagram.png -b transparent
docker run --rm -v "$(pwd)":/data minlag/mermaid-cli mmdc -i /data/diagram.mmd -o /data/diagram.png
4. SVG → PNG
node -e "
const sharp = require('sharp');
sharp('input.svg').png().toFile('output.png');
"
inkscape input.svg --export-type=png --export-filename=output.png
convert input.svg output.png
5. Terminal Output → PNG
termshot -- ls -la
Workflow
- Determine the content type (code, diagram, HTML, terminal, SVG)
- Check which tools are available in the environment (
which silicon, npx --help, etc.)
- Choose the best method and generate the PNG
- Verify the output exists and is non-empty:
file output.png && ls -la output.png
- Report the file path and dimensions
Tips
- For code screenshots, use a dark theme with generous padding (32px+) for a polished look
- Set
deviceScaleFactor: 2 in Playwright/Puppeteer for retina-quality output
- For transparent backgrounds, use
--background transparent or omitBackground: true
- If no specialized tool is installed, fall back to the HTML + headless browser method — it works for everything