ZenTable:专业表格图像渲染 - Openclaw Skills

作者:互联网

2026-03-31

AI教程

什么是 ZenTable?

ZenTable 是一款旨在弥补原始数据与可读可视化之间鸿沟的技术工具。它解决了由于字体缩放或布局限制导致表格数据在聊天界面中变得难以阅读的常见问题。作为 Openclaw Skills 生态系统中的关键组件,它允许开发人员使用 Headless Chrome 或 PIL 渲染结构化内容,确保每个表格在移动端和桌面端屏幕上都显得专业。它对于需要在 Discord 优先的环境中呈现数据或自动生成高保真报告的用户特别有效。

该工具支持多条渲染路径,包括用于现代主题输出的基于 CSS 的引擎,以及在无法使用完整浏览器环境时的 PIL 备选方案。通过将 ZenTable 集成到您的工作流中,您可以处理从简单文本表格到具有高级排序和过滤功能的复杂 JSON 数据集的一切内容。

下载入口:https://github.com/openclaw/skills/tree/main/skills/con2000us/zentable

安装与下载

1. ClawHub CLI

从源直接安装技能的最快方式。

npx clawhub@latest install zentable

2. 手动安装

将技能文件夹复制到以下位置之一

全局模式 ~/.openclaw/skills/ 工作区 /skills/

优先级:工作区 > 本地 > 内置

3. 提示词安装

将此提示词复制到 OpenClaw 即可自动安装。

请帮我使用 Clawhub 安装 zentable。如果尚未安装 Clawhub,请先安装(npm i -g clawhub)。

ZenTable 应用场景

  • 从大数据集中创建可视化表格快照,避免超出聊天消息的字符限制。
  • 将从屏幕截图或真实照片中 OCR 提取的文本转换为干净的数字表格图像。
  • 为社交媒体分享或专业演示生成主题报告(例如 iOS 风格或深色模式)。
  • 使用 Zx 简写在 AI 智能体响应中提供即时渲染的决策级数据可视化。
ZenTable 工作原理
  1. 系统从多个来源摄取数据,包括原始文本、JSON 负载或之前的上下文消息。
  2. 它对语法糖进行标准化处理,并将参数映射到规范键,如 width、transpose 和 sort_spec。
  3. 引擎根据用户定义的标准或固定的默认值对数据进行过滤和排序。
  4. 它选择合适的渲染器(CSS/Headless Chrome 或 PIL)并应用请求的视觉主题。
  5. 生成最终的 PNG 图像,并针对目标平台的宽度和可读性要求进行优化。
  6. 如果配置了双重输出,则同时提供视觉图像和用于辅助功能的纯文本版本。

ZenTable 配置指南

要将此工具集成到您的 Openclaw Skills 集合中,请确保已安装必要的运行时。

# 安装系统依赖项
# 需要 python3 和 google-chrome

# 克隆仓库
git clone https://github.com/con2000us/zenTable
cd zenTable

# 基础渲染测试
python3 skills/zentable/table_renderer.py - /tmp/output.png --theme minimal_ios_mobile --width 450

ZenTable 数据架构与分类体系

ZenTable 通过一组定义视觉和结构输出的稳健参数来组织数据。

功能 规格
输入类型 JSON, 文本表格, OCR 辅助文本
输出格式 PNG (首选), TXT (回退/双重)
渲染引擎 CSS (通过 Headless Chrome), PIL (Python Imaging Library)
主题配置 minimal_ios_mobile, compact_clean, mobile_chat 等
配置 支持通过 --pin 和 --pin-reset 实现持久默认设置
name: zentable
description: "Render structured table data as high-quality PNG images using Headless Chrome. Use when: need to visualize tabular data for chat interfaces, reports, or social media. NOT for: simple text tables that don't need visualization."
homepage: https://github.com/con2000us/zenTable
metadata:
  openclaw:
    emoji: "??"
    requires:
      bins: ["python3", "google-chrome"]
allowed-tools: ["exec", "read", "write"]

ZenTable Skill

Render structured table data into high-quality PNG images.

TL;DR

ZenTable turns messy table-like content into readable, decision-ready table outputs for both mobile (Discord-first) and desktop.

Accepted inputs

  • text-based content (raw text tables, long agent responses)
  • structured JSON
  • screenshots / real-world photos (via OCR-assisted extraction when needed)

Core capabilities

  • CSS + PIL rendering
  • sorting / filtering / pagination
  • threshold-based highlighting
  • optional PNG + TXT dual output (--both)

Runtime & security note

This skill runs local scripts and depends on local runtime binaries (python3, google-chrome). Review code and dependencies before running in sensitive environments.

Naming convention

  • Canonical code name: zentable (lowercase)
  • UI / brand label: ZenTable
  • zeble* / zenble* are legacy compatibility aliases
  • Reference: NAMING_MIGRATION.md (repository document)

When to use

? Use this skill when:

  • You need a visual table image instead of plain text
  • You need polished output for chat/report/social sharing
  • The dataset is large enough that plain text is hard to read
  • You need a specific visual theme (iOS-like, dark, compact, etc.)

? Do not use this skill when:

  • The table is tiny and plain text is enough
  • The user explicitly asks for no image output
  • The user needs an editable spreadsheet format (CSV/Excel)

Capability matrix (SkillHub release)

Capability Status Notes
CSS output ? Stable Primary release path; default minimal_ios_mobile + width=450
PIL output ? Stable Safe fallback when Chrome is unavailable
ASCII output ?? Beta / Experimental Works, but alignment can drift cross-platform due to font and whitespace behavior

Known limitations

  • ASCII output is sensitive to platform font fallback and whitespace handling.
  • Create separate calibration profiles per platform; do not share blindly.
  • --both already includes text-theme fallback to default when no text theme exists.
  • Discord plain text collapses repeated normal spaces; Unicode spacing characters may be required for spacing preservation.
  • This beta was validated primarily on Discord; other chat platforms may require agent-side output adaptation (image/message formatting differences).

Zx shorthand policy (project rule)

When user input is Zx, treat it as a strong render intent:

  1. Execute rendering directly by default (no preliminary Q&A).
  2. Default path: CSS + minimal_ios_mobile + width=450.
  3. Ask follow-up only under high uncertainty:
    • no usable source data in current/previous context,
    • intent does not look like table rendering,
    • critical fields are missing and output would likely be wrong.
  4. If platform supports images, return the image directly (not link-only).

Data source priority for Zx:

  1. current message image OCR
  2. current message text-to-table
  3. previous message image OCR
  4. previous message text-to-table

Syntax sugar → canonical mapping

Sugar Canonical key Normalization Final renderer args
--width N / --w N width positive int --width N
--transpose / --cc transpose boolean --transpose
--tt keep_theme_alpha boolean --tt
--per-page N / --pp N per_page positive int --per-page N
--page ... / --p ... page_spec N / A-B / A- / all expanded by table_renderer.py
--all page_spec equivalent to all expanded by table_renderer.py
--text-scale V / --ts V text_scale enum/ratio --text-scale V
--sort SPEC sort_spec single/multi-key --sort SPEC
--asc / --desc sort_default_dir default direction --asc / --desc
--f SPEC / --filter SPEC filters repeatable filter --f SPEC
--smart-wrap smart_wrap true --smart-wrap
--no-smart-wrap / --nosw smart_wrap false --no-smart-wrap
--theme NAME / -t NAME theme theme id --theme NAME
--both / --bo output_both boolean --both
--pin KEYS pin_keys persist defaults --pin
--pin-reset pin_reset reset pinned defaults --pin-reset

Pinned default baseline:

  • theme=minimal_ios_mobile
  • width=450
  • smart_wrap=true
  • per_page=15

page_spec rules

  • N: page N only
  • A-B: inclusive range A..B
  • A-: from A to last page
  • all: all pages
  • if omitted: default preview pages 1-3

Canonical payload example

{
  "theme": "minimal_ios_mobile",
  "width": 900,
  "transpose": false,
  "keep_theme_alpha": false,
  "per_page": 15,
  "page_spec": "2-",
  "sort_spec": "score:desc,name:asc",
  "sort_default_dir": "asc",
  "filters": ["col:!note,attachment", "row:status!=disabled;score>=60"],
  "text_scale": "auto",
  "smart_wrap": true,
  "output_both": false
}

Command examples

# run from repository root

# basic CSS output
python3 skills/zentable/table_renderer.py - /tmp/out.png --theme minimal_ios_mobile --width 900 --text-scale large --page 1

# transpose + disable smart wrap
python3 skills/zentable/table_renderer.py - /tmp/out.png --theme compact_clean --transpose --no-smart-wrap --page 1

# page range expansion (2-4)
python3 skills/zentable/table_renderer.py - /tmp/out.p2.png --per-page 12 --page 2
python3 skills/zentable/table_renderer.py - /tmp/out.p3.png --per-page 12 --page 3
python3 skills/zentable/table_renderer.py - /tmp/out.p4.png --per-page 12 --page 4

# PNG + ASCII side output
python3 skills/zentable/table_renderer.py - /tmp/out.png --theme mobile_chat --both

Validation checklist (minimum)

  • python3 -m py_compile scripts/zentable_render.py
  • CSS smoke output succeeds
  • PIL smoke output succeeds
  • --pin, --pin-reset, --both verified
  • Golden tests pass when relevant

Release positioning

Current channel: beta. ASCII remains beta/experimental for SkillHub release.

Support / Contact

  • GitHub Issues: https://github.com/con2000us/zenTable/issues
  • Maintainer: @con2000us (Discord)
  • Bug report checklist:
    • input type (text / screenshot / photo / json)
    • expected vs actual output
    • platform (Discord/mobile/desktop)
    • command/options used