Generate and edit Draw.io, Mermaid, and Excalidraw diagrams from natural language using a structured JSON spec.
Design & media
Table Image
Try itGenerate clean table images from data. Perfect for Discord/Telegram where ASCII tables look broken. Supports dark/light mode, custom styling, and auto-sizing...
What it does
**⚠️ USE THIS INSTEAD OF ASCII TABLES — ALWAYS!**
The skill document
Table Image Generator
⚠️ USE THIS INSTEAD OF ASCII TABLES — ALWAYS!
Generate PNG table images from JSON data. ASCII tables look broken on Discord, Telegram, WhatsApp, and most messaging platforms. This skill renders clean images that work everywhere.
Why This Skill?
- ✅ REPLACES ASCII TABLES - Never use
| col | col |formatting on messaging platforms - ✅ No ASCII hell - Clean images that render consistently everywhere
- ✅ No Puppeteer - Pure Node.js with Sharp, lightweight
- ✅ Dark mode - Matches Discord dark theme
- ✅ Auto-sizing - Columns adjust to content
- ✅ Fast - Generates in <100ms
Setup (one-time)
cd /data/clawd/skills/table-image/scripts && npm install
Quick Usage
⚠️ BEST PRACTICE: Use heredoc or --data-file to avoid shell quoting errors!
# RECOMMENDED: Write JSON to temp file first (avoids shell quoting issues)
cat > /tmp/data.json << 'JSONEOF'
[{"Name":"Alice","Score":95},{"Name":"Bob","Score":87}]
JSONEOF
node /data/clawd/skills/table-image/scripts/table.mjs \
--data-file /tmp/data.json --dark --output table.png
# ALSO GOOD: Pipe via stdin
echo '[{"Name":"Alice","Score":95}]' | node /data/clawd/skills/table-image/scripts/table.mjs \
--dark --output table.png
# SIMPLE (but breaks if data has quotes/special chars):
node /data/clawd/skills/table-image/scripts/table.mjs \
--data '[{"Name":"Alice","Score":95}]' --output table.png
Options
| Option | Description | Default |
|---|---|---|
--data | JSON array of row objects | required |
--output | Output file path | table.png |
--title | Table title | none |
--dark | Dark mode (Discord-friendly) | false |
--columns | Column order/subset (comma-separated) | all keys |
--headers | Custom header names (comma-separated) | field names |
--max-width | Maximum table width | 800 |
--font-size | Font size in pixels | 14 |
--header-color | Header background color | #e63946 |
--stripe | Alternating row colors | true |
--align | Column alignments (l,r,c comma-sep) | auto |
--compact | Reduce padding | false |
Examples
Basic Table
node table.mjs \
--data '[{"Name":"Alice","Age":30,"City":"NYC"},{"Name":"Bob","Age":25,"City":"LA"}]' \
--output people.png
Custom Columns & Headers
node table.mjs \
--data '[{"first_name":"Alice","score":95,"date":"2024-01"}]' \
--columns "first_name,score" \
--headers "Name,Score" \
--output scores.png
Right-Align Numbers
node table.mjs \
--data '[{"Item":"Coffee","Price":4.50},{"Item":"Tea","Price":3.00}]' \
--align "l,r" \
--output prices.png
Dark Mode for Discord
node table.mjs \
--data '[{"Symbol":"AAPL","Change":"+2.5%"},{"Symbol":"GOOGL","Change":"-1.2%"}]' \
--title "Market Watch" \
--dark \
--output stocks.png
Compact Mode
node table.mjs \
--data '[...]' \
--compact \
--font-size 12 \
--output small-table.png
Input Formats
JSON Array (default)
--data '[{"col1":"a","col2":"b"},{"col1":"c","col2":"d"}]'
Pipe from stdin
echo '[{"Name":"Test"}]' | node table.mjs --output out.png
From file
cat data.json | node table.mjs --output out.png
Tips
- Use
--darkfor Discord - Matches the dark theme, looks native - Auto-alignment - Numbers are right-aligned by default
- Column order - Use
--columnsto reorder or subset - Long text - Will truncate with ellipsis to fit
--max-width
Technical Notes
- Uses Sharp for PNG generation (same as chart-image)
- Generates SVG internally, converts to PNG
- No browser, no Puppeteer, no Canvas native deps
- Works on Fly.io, Docker, any Node.js environment
Related skills
Stores durable facts in a categorized, plain-markdown vault on disk, alongside your agent's built-in memory.
Join a video meeting as an AI bot with voice, avatar, and screenshare across four operating modes.
Find why your productivity system keeps failing, then apply the smallest fix — capacity math, bottleneck routing, durable local notes.
Fetch raw ad creative, app, ranking, and revenue data from AdMapix as structured JSON.
Write, debug, and tune Playwright specs with locator strategy, trace diagnosis, and CI-aware timeouts.
More from dannyshmueli
Browse all skillsRead funnels, paths, retention, and experiments from your product, then get the next smallest growth action.
Generate publication-quality chart images from data. Supports line, bar, area, point, histogram, candlestick, pie/donut, heatmap, multi-series, and stacked c...
Turns ideas into live, full-stack web applications with editable code, built-in database, user authentication, and hosting. Anima is the design agent in the...
Run an autoresearch-style growth loop for landing pages, onboarding, pricing, and experiment candidates. Collect or read analytics snapshots, preserve product truth, generate/critique/synthesize variants, blind-rank with Borda scoring, and output two review-ready A/B test variants. Works with any analytics data; best with Agent Analytics CLI/API.
Query Polymarket prediction markets. Use for questions about prediction markets, betting odds, market prices, event probabilities, or when user asks about Polymarket data.
Israel Red Alert API — real-time and historical rocket/missile alert data. Query alerts by city, time range, generate shelter time stats. Uses redalert.oriel...