- name
- article-summary-card
- description
- Use when the user wants a webpage, article, markdown, or pasted text summarized in the current session and exported as a reusable bundle. Stable workflow: extract article text, do a two-round session summary with tags, then render the final JSON into Markdown, HTML, and PNG.
- metadata
- openclaw
- requires
- bins
Article Summary Card
Turn an article into a concise summary bundle.
When to use
- Summarize a webpage or article and deliver the result as an image.
- Convert long text into a reusable set of outputs:
JSON,Markdown,HTML,PNG. - Produce repeatable summary cards with a consistent layout and predictable sizing.
Runtime Requirements
python3curl- Chrome or Chromium for headless screenshots
- Python package:
Pillow
If Chrome is not installed at the default path, adjust the browser candidate list in scripts/render_card.py.
Workflow
- Read the input article from a URL or local file.
- Extract the title and article body; remove obvious page chrome when possible.
- In the current session, run two prompt rounds:
- Round 1: create a summary plan that decides how the article should be divided into sections. - Round 1 must also generate 3 to 8 short tags for the article. - Round 2: write the final summary JSON according to that plan.
- Use the unified renderer to export the final summary JSON as
Markdown,HTML, andPNG. - Verify the outputs exist and have a reasonable size.
Commands
Extract article text for the session workflow:
python3 article-summary-card/scripts/extract_article.py \
--url 'https://example.com/article' \
--out output/article-input.jsonThe extracted JSON contains:
titlesourcearticle_text
Then in the current session:
- Use
references/prompts/plan-system.mdandreferences/prompts/plan-user.mdto design the summary structure. - Use
references/prompts/summary-system.mdandreferences/prompts/summary-user.mdto write the final summary JSON. - Include
tagsin the final summary JSON and show them at the end of the rendered card and Markdown output.
Preferred final export:
python3 article-summary-card/scripts/render_outputs.py \
--summary output/article-summary.json \
--out-stem output/article-summaryThis produces:
output/article-summary.mdoutput/article-summary.htmloutput/article-summary.png
Optional lower-level renderers:
python3 article-summary-card/scripts/render_markdown.py --summary output/article-summary.json --out output/article-summary.md
python3 article-summary-card/scripts/render_card.py --summary output/article-summary.json --out output/article-summary.pngAdjust styles in:
article-summary-card/assets/templates/mobile-card.cssThe renderer keeps HTML and CSS separate:
article-summary-card/assets/templates/mobile-card.html
article-summary-card/assets/templates/mobile-card.cssThe size system is based on a 375px design width multiplied by SCREEN_RATIO in CSS and Python.
Optional helper: generate a local heuristic draft JSON when you want a quick bootstrap, but do not treat it as the preferred path for high-quality output:
python3 article-summary-card/scripts/summarize_article.py \
--url 'https://example.com/article' \
--out output/article-summary-draft.json \
--mode heuristicFor final output, replace or rewrite that draft in-session and then use render_outputs.py. summarize_article.py is a compatibility helper, not the main summarizer.
Cross-Platform Adapters
Codex
- Native entrypoint is this skill folder itself: article-summary-card/SKILL.md - Optional UI metadata: article-summary-card/agents/openai.yaml
Claude Code
- Project slash command: .claude/commands/article-summary-card.md - Usage pattern: /article-summary-card <url-or-file> [output-stem]
OpenClaw
- OpenClaw uses skill folders containing SKILL.md, so this same directory is portable. - Install helper:
python3 article-summary-card/scripts/install_openclaw.py- Default destination: ~/.openclaw/workspace/skills/article-summary-card
Notes
- This skill prefers deterministic rendering over image-generation models so long Chinese text stays accurate.
- The preferred summarizer is the current session model, not an API call inside Python.
- Summary instructions are intentionally extracted into
references/prompts/so they can be revised without editing Python code. - Cross-platform portability comes from keeping one shared skill core and only adding thin platform entrypoints.
- If a site is hard to extract, inspect the HTML and add a site-specific extraction rule in
scripts/summarize_article.py. - For very long articles, keep the summary short enough to fit on one card. If it still overflows, shorten section points before re-rendering.
summarize_article.pyno longer performs LLM calls; it only generates a heuristic draft JSON.- When DOM height measurement succeeds, the renderer trusts that height and skips whitespace auto-cropping to avoid cutting off low-contrast tags or footer content.
- The renderer uses overscan-then-crop for long screenshots to avoid incomplete bottom rendering in headless Chrome.