{
  "schemaVersion": "1.0",
  "item": {
    "slug": "table-image-generator",
    "name": "Table Image",
    "source": "tencent",
    "type": "skill",
    "category": "通讯协作",
    "sourceUrl": "https://clawhub.ai/dannyshmueli/table-image-generator",
    "canonicalUrl": "https://clawhub.ai/dannyshmueli/table-image-generator",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/table-image-generator",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=table-image-generator",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.md",
      "scripts/discord-wrap.mjs",
      "scripts/emoji.mjs",
      "scripts/package-lock.json",
      "scripts/package.json"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/table-image-generator"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/table-image-generator",
    "agentPageUrl": "https://openagent3.xyz/skills/table-image-generator/agent",
    "manifestUrl": "https://openagent3.xyz/skills/table-image-generator/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/table-image-generator/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Table Image Generator",
        "body": "⚠️ USE THIS INSTEAD OF ASCII TABLES — ALWAYS!\n\nGenerate 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."
      },
      {
        "title": "Why This Skill?",
        "body": "✅ REPLACES ASCII TABLES - Never use | col | col | formatting on messaging platforms\n✅ No ASCII hell - Clean images that render consistently everywhere\n✅ No Puppeteer - Pure Node.js with Sharp, lightweight\n✅ Dark mode - Matches Discord dark theme\n✅ Auto-sizing - Columns adjust to content\n✅ Fast - Generates in <100ms"
      },
      {
        "title": "Setup (one-time)",
        "body": "cd /data/clawd/skills/table-image/scripts && npm install"
      },
      {
        "title": "Quick Usage",
        "body": "⚠️ BEST PRACTICE: Use heredoc or --data-file to avoid shell quoting errors!\n\n# RECOMMENDED: Write JSON to temp file first (avoids shell quoting issues)\ncat > /tmp/data.json << 'JSONEOF'\n[{\"Name\":\"Alice\",\"Score\":95},{\"Name\":\"Bob\",\"Score\":87}]\nJSONEOF\nnode /data/clawd/skills/table-image/scripts/table.mjs \\\n  --data-file /tmp/data.json --dark --output table.png\n\n# ALSO GOOD: Pipe via stdin\necho '[{\"Name\":\"Alice\",\"Score\":95}]' | node /data/clawd/skills/table-image/scripts/table.mjs \\\n  --dark --output table.png\n\n# SIMPLE (but breaks if data has quotes/special chars):\nnode /data/clawd/skills/table-image/scripts/table.mjs \\\n  --data '[{\"Name\":\"Alice\",\"Score\":95}]' --output table.png"
      },
      {
        "title": "Options",
        "body": "OptionDescriptionDefault--dataJSON array of row objectsrequired--outputOutput file pathtable.png--titleTable titlenone--darkDark mode (Discord-friendly)false--columnsColumn order/subset (comma-separated)all keys--headersCustom header names (comma-separated)field names--max-widthMaximum table width800--font-sizeFont size in pixels14--header-colorHeader background color#e63946--stripeAlternating row colorstrue--alignColumn alignments (l,r,c comma-sep)auto--compactReduce paddingfalse"
      },
      {
        "title": "Basic Table",
        "body": "node table.mjs \\\n  --data '[{\"Name\":\"Alice\",\"Age\":30,\"City\":\"NYC\"},{\"Name\":\"Bob\",\"Age\":25,\"City\":\"LA\"}]' \\\n  --output people.png"
      },
      {
        "title": "Custom Columns & Headers",
        "body": "node table.mjs \\\n  --data '[{\"first_name\":\"Alice\",\"score\":95,\"date\":\"2024-01\"}]' \\\n  --columns \"first_name,score\" \\\n  --headers \"Name,Score\" \\\n  --output scores.png"
      },
      {
        "title": "Right-Align Numbers",
        "body": "node table.mjs \\\n  --data '[{\"Item\":\"Coffee\",\"Price\":4.50},{\"Item\":\"Tea\",\"Price\":3.00}]' \\\n  --align \"l,r\" \\\n  --output prices.png"
      },
      {
        "title": "Dark Mode for Discord",
        "body": "node table.mjs \\\n  --data '[{\"Symbol\":\"AAPL\",\"Change\":\"+2.5%\"},{\"Symbol\":\"GOOGL\",\"Change\":\"-1.2%\"}]' \\\n  --title \"Market Watch\" \\\n  --dark \\\n  --output stocks.png"
      },
      {
        "title": "Compact Mode",
        "body": "node table.mjs \\\n  --data '[...]' \\\n  --compact \\\n  --font-size 12 \\\n  --output small-table.png"
      },
      {
        "title": "JSON Array (default)",
        "body": "--data '[{\"col1\":\"a\",\"col2\":\"b\"},{\"col1\":\"c\",\"col2\":\"d\"}]'"
      },
      {
        "title": "Pipe from stdin",
        "body": "echo '[{\"Name\":\"Test\"}]' | node table.mjs --output out.png"
      },
      {
        "title": "From file",
        "body": "cat data.json | node table.mjs --output out.png"
      },
      {
        "title": "Tips",
        "body": "Use --dark for Discord - Matches the dark theme, looks native\nAuto-alignment - Numbers are right-aligned by default\nColumn order - Use --columns to reorder or subset\nLong text - Will truncate with ellipsis to fit --max-width"
      },
      {
        "title": "Technical Notes",
        "body": "Uses Sharp for PNG generation (same as chart-image)\nGenerates SVG internally, converts to PNG\nNo browser, no Puppeteer, no Canvas native deps\nWorks on Fly.io, Docker, any Node.js environment"
      }
    ],
    "body": "Table Image Generator\n\n⚠️ USE THIS INSTEAD OF ASCII TABLES — ALWAYS!\n\nGenerate 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.\n\nWhy This Skill?\n✅ REPLACES ASCII TABLES - Never use | col | col | formatting on messaging platforms\n✅ No ASCII hell - Clean images that render consistently everywhere\n✅ No Puppeteer - Pure Node.js with Sharp, lightweight\n✅ Dark mode - Matches Discord dark theme\n✅ Auto-sizing - Columns adjust to content\n✅ Fast - Generates in <100ms\nSetup (one-time)\ncd /data/clawd/skills/table-image/scripts && npm install\n\nQuick Usage\n\n⚠️ BEST PRACTICE: Use heredoc or --data-file to avoid shell quoting errors!\n\n# RECOMMENDED: Write JSON to temp file first (avoids shell quoting issues)\ncat > /tmp/data.json << 'JSONEOF'\n[{\"Name\":\"Alice\",\"Score\":95},{\"Name\":\"Bob\",\"Score\":87}]\nJSONEOF\nnode /data/clawd/skills/table-image/scripts/table.mjs \\\n  --data-file /tmp/data.json --dark --output table.png\n\n# ALSO GOOD: Pipe via stdin\necho '[{\"Name\":\"Alice\",\"Score\":95}]' | node /data/clawd/skills/table-image/scripts/table.mjs \\\n  --dark --output table.png\n\n# SIMPLE (but breaks if data has quotes/special chars):\nnode /data/clawd/skills/table-image/scripts/table.mjs \\\n  --data '[{\"Name\":\"Alice\",\"Score\":95}]' --output table.png\n\nOptions\nOption\tDescription\tDefault\n--data\tJSON array of row objects\trequired\n--output\tOutput file path\ttable.png\n--title\tTable title\tnone\n--dark\tDark mode (Discord-friendly)\tfalse\n--columns\tColumn order/subset (comma-separated)\tall keys\n--headers\tCustom header names (comma-separated)\tfield names\n--max-width\tMaximum table width\t800\n--font-size\tFont size in pixels\t14\n--header-color\tHeader background color\t#e63946\n--stripe\tAlternating row colors\ttrue\n--align\tColumn alignments (l,r,c comma-sep)\tauto\n--compact\tReduce padding\tfalse\nExamples\nBasic Table\nnode table.mjs \\\n  --data '[{\"Name\":\"Alice\",\"Age\":30,\"City\":\"NYC\"},{\"Name\":\"Bob\",\"Age\":25,\"City\":\"LA\"}]' \\\n  --output people.png\n\nCustom Columns & Headers\nnode table.mjs \\\n  --data '[{\"first_name\":\"Alice\",\"score\":95,\"date\":\"2024-01\"}]' \\\n  --columns \"first_name,score\" \\\n  --headers \"Name,Score\" \\\n  --output scores.png\n\nRight-Align Numbers\nnode table.mjs \\\n  --data '[{\"Item\":\"Coffee\",\"Price\":4.50},{\"Item\":\"Tea\",\"Price\":3.00}]' \\\n  --align \"l,r\" \\\n  --output prices.png\n\nDark Mode for Discord\nnode table.mjs \\\n  --data '[{\"Symbol\":\"AAPL\",\"Change\":\"+2.5%\"},{\"Symbol\":\"GOOGL\",\"Change\":\"-1.2%\"}]' \\\n  --title \"Market Watch\" \\\n  --dark \\\n  --output stocks.png\n\nCompact Mode\nnode table.mjs \\\n  --data '[...]' \\\n  --compact \\\n  --font-size 12 \\\n  --output small-table.png\n\nInput Formats\nJSON Array (default)\n--data '[{\"col1\":\"a\",\"col2\":\"b\"},{\"col1\":\"c\",\"col2\":\"d\"}]'\n\nPipe from stdin\necho '[{\"Name\":\"Test\"}]' | node table.mjs --output out.png\n\nFrom file\ncat data.json | node table.mjs --output out.png\n\nTips\nUse --dark for Discord - Matches the dark theme, looks native\nAuto-alignment - Numbers are right-aligned by default\nColumn order - Use --columns to reorder or subset\nLong text - Will truncate with ellipsis to fit --max-width\nTechnical Notes\nUses Sharp for PNG generation (same as chart-image)\nGenerates SVG internally, converts to PNG\nNo browser, no Puppeteer, no Canvas native deps\nWorks on Fly.io, Docker, any Node.js environment"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/dannyshmueli/table-image-generator",
    "publisherUrl": "https://clawhub.ai/dannyshmueli/table-image-generator",
    "owner": "dannyshmueli",
    "version": "1.4.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/table-image-generator",
    "downloadUrl": "https://openagent3.xyz/downloads/table-image-generator",
    "agentUrl": "https://openagent3.xyz/skills/table-image-generator/agent",
    "manifestUrl": "https://openagent3.xyz/skills/table-image-generator/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/table-image-generator/agent.md"
  }
}