Dynamic UI

v1.2.0

Render tables, charts, stats, cards, and dashboards as images using HTML templates and wkhtmltoimage.

2· 831·2 current·2 all-time
byAsh Bhat@theashbhat

Install

OpenClaw Prompt Flow

Install with OpenClaw

Best for remote or guided setup. Copy the exact prompt, then paste it into OpenClaw for theashbhat/dynamic-ui.

Previewing Install & Setup.
Prompt PreviewInstall & Setup
Install the skill "Dynamic UI" (theashbhat/dynamic-ui) from ClawHub.
Skill page: https://clawhub.ai/theashbhat/dynamic-ui
Keep the work scoped to this skill only.
After install, inspect the skill metadata and help me finish setup.
Required binaries: wkhtmltoimage, jq
Use only the metadata you can verify from ClawHub; do not invent missing requirements.
Ask before making any broader environment changes.

Command Line

CLI Commands

Use the direct CLI path if you want to install manually and keep every step visible.

OpenClaw CLI

Bare skill slug

openclaw skills install dynamic-ui

ClawHub CLI

Package manager switcher

npx clawhub@latest install dynamic-ui
Security Scan
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Benign
high confidence
Purpose & Capability
Name/description, required binaries (wkhtmltoimage, jq), templates, and a shell renderer script all align with a visual-rendering skill. No unrelated credentials, config paths, or binaries are requested.
Instruction Scope
SKILL.md instructs the agent to run scripts/render.sh with JSON input (stdin or --data), produce images, and optionally save to ~/.openclaw/media/ for messaging. The script reads only the provided JSON and internal templates. It does allow user-supplied image URLs (validated to block file:, javascript:, vbscript:, and non-image data:), which means wkhtmltoimage may fetch remote images — this is expected for image embedding but is the primary external-network behavior to be aware of.
Install Mechanism
Install spec uses standard package managers (apt/brew) to install wkhtmltopdf and jq. This is proportionate and expected for wkhtmltoimage usage; no downloads from arbitrary URLs or unusual extract steps are present.
Credentials
The skill declares no required environment variables or credentials. The runtime script does not reference hidden env vars or external credentials. It writes temporary files and (recommended) output under the user's home media directory, which is reasonable for generated images.
Persistence & Privilege
The skill is not always-on (always: false). It does not request elevated platform-wide privileges or modify other skills' configs. Autonomous invocation is permitted by default (disable-model-invocation: false) — this is the platform default and not by itself a red flag.
Assessment
This skill appears to do exactly what it says: it runs a local shell script that uses jq to parse JSON and wkhtmltoimage to convert HTML templates into PNGs. Before installing, note: (1) you must install wkhtmltoimage and jq; (2) the renderer may fetch user-supplied image URLs over the network (http/https or data:image/* are allowed), so only provide trusted image URLs if you are concerned about external network requests; (3) the skill recommends saving outputs to ~/.openclaw/media/ (a normal place for agent media); (4) if you want extra assurance, review scripts/render.sh locally (it's included) — the code is shell-based and readable. Overall the skill is internally coherent and proportionate to its purpose.

Like a lobster shell, security has layers — review code before you run it.

Runtime requirements

Binswkhtmltoimage, jq

Install

Install wkhtmltoimage + jq (brew)
Bins: wkhtmltoimage, jq
latestvk97cbqzhng37k1fxhz4h4kdmps829fvs
831downloads
2stars
7versions
Updated 1mo ago
v1.2.0
MIT-0

Dynamic UI Skill

Render dynamic visual content (tables, charts, stats, cards, dashboards) as images using HTML templates and wkhtmltoimage.

Triggers

  • "render", "visualize", "chart", "dashboard", "dynamic-ui"

Usage

# Basic usage
./scripts/render.sh <template> --data '<json>'

# With options
./scripts/render.sh table --data '{"columns":["A","B"],"rows":[["1","2"]]}' --style dark --output out.png

# From stdin
echo '{"labels":["Q1","Q2"],"values":[100,200]}' | ./scripts/render.sh chart-bar --style modern

Templates

TemplateDescriptionInput Schema
tableData tables{"columns": [...], "rows": [[...], ...]}
chart-barBar charts{"labels": [...], "values": [...], "title": "..."}
statsKPI cards{"stats": [{"label": "...", "value": "...", "change": "..."}]}
cardInfo card{"title": "...", "subtitle": "...", "body": "...", "status": "green|yellow|red"}
dashboardComposite{"title": "...", "widgets": [{"type": "stat|table|chart", ...}]}

Options

OptionDescriptionDefault
--data, --inputJSON data (or use stdin)-
--styleTheme: modern, dark, minimalmodern
--output, -oOutput pathstdout (base64)
--widthImage width in pixels800

Themes

  • modern — Purple/blue gradients, shadows, rounded corners
  • dark — Dark background, light text, subtle borders
  • minimal — Clean white, thin borders

Examples

# Render a table
./scripts/render.sh table --data '{"columns":["Name","Score"],"rows":[["Alice","95"],["Bob","87"]]}' -o table.png

# Render a bar chart
./scripts/render.sh chart-bar --data '{"labels":["Jan","Feb","Mar"],"values":[120,150,180],"title":"Monthly Sales"}' --style dark -o chart.png

# Render stats
./scripts/render.sh stats --data '{"stats":[{"label":"Users","value":"12.5K","change":"+12%"},{"label":"Revenue","value":"$45K","change":"+8%"}]}' -o stats.png

💡 Sending Images to Users

After rendering an image, you'll typically want to send it to the user. Here's the recommended workflow:

Recommended Workflow:

# 1. Render to ~/.openclaw/media/ (recommended path)
./scripts/render.sh table --data '...' -o ~/.openclaw/media/my-table.png

# 2. Send inline via message tool
message(action=send, filePath=/home/ubuntu/.openclaw/media/my-table.png, caption="Caption", channel=telegram, to=<user_id>)

Tips:

  • Save to ~/.openclaw/media/ — this path works reliably for inline sending
  • Use descriptive captions — helps users understand the visual
  • Consider the context — sometimes saving to disk is fine if the user requested it

Example (complete flow):

# Render
echo '{"title":"My Data","columns":["A","B"],"rows":[["1","2"]]}' | \
  ./scripts/render.sh table -o ~/.openclaw/media/data.png

# Send
message(action=send, filePath=/home/ubuntu/.openclaw/media/data.png, caption="Here's your data", channel=telegram, to=USER_ID)

Dependencies

  • /usr/bin/wkhtmltoimage — HTML to image conversion
  • jq — JSON parsing

Comments

Loading comments...