Render any user's identity information into a 2:1 editorial (editorial / luxury-minimal) business card: Swiss typographic grid, hairline dividers, a single accent color, Song typeface × Didot font pairing. Output high-resolution PNG (default 4800×2400) + a self-contained HTML that can be clicked to download in the browser.
Workflow
1. First use AskUserQuestion to collect information (required)
Do not run the script directly. First confirm the theme and required fields. Pre-fill what can be inferred from the conversation/memory, and only ask what you don't know.
Suggested questions (at most 3 at a time):
- Theme: dark-terracotta (warm dark · terracotta, default) / midnight (cool dark · steel blue) / ivory (light · ivory editorial style)
- Whether there is an avatar: yes → need the file path; no → render a monogram using the first letter of the name
- Emphasis word: which word in the tagline should be highlighted (accent color)
Take identity fields from context as much as possible; ask for the missing ones one by one or have the user provide them all at once.
2. Map to CLI parameters
| User-provided | flag | Description |
|---|---|---|
| Name | --name | Required, supports Chinese |
| English name/romanization | --latin | Small italic text next to the name |
| Brand (top left) | --brand | E.g. LOVSTUDIO.AI (a dot will be highlighted) |
| Number (top right) | --index | E.g. STUDIO — Nº 2026 |
| Role tags | --tags | Comma-separated, rendered with diamond separators |
| Tagline | --tagline | Word highlighted, vertical bar | for line break |
| Hobbies/interests | --pursuits | Comma-separated (bottom bar left) |
| Base/city | --bases | Comma-separated, each item with a location pin (bottom bar right) |
| Avatar | --avatar | Image path; if omitted, use a monogram |
| Avatar caption | --caption | Optional, small text at the bottom of the portrait |
| Theme | --theme | dark-terracotta|midnight|ivory |
| Output directory | --out | Default ./output |
| Format | --format | png | html | both (default both) |
3. Run
python3 scripts/render_card.py \
--name "手工川" --latin "Mark Shawn" \
--brand "LOVSTUDIO.AI" --index "STUDIO — Nº 2026" \
--tags "背包客,超级开发者,AI / OPC 布道师" \
--tagline "在 **Agent 时代**,|寻找**人**的意义" \
--pursuits "旅行,羽毛球,计算机科学,心理学,哲学" \
--bases "上海 陆家嘴数智港,北京 搜狐大厦清智孵化器" \
--avatar ./me.png --theme dark-terracotta \
--out ./output --format both
4. Deliver
Show the PNG to the user; tell them the HTML can be opened in a browser, and the "Download as image PNG" button in the bottom-right corner will produce a 3× high-resolution image (the HTML and the modern-screenshot.umd.js in the same directory must be kept together).
Design notes
- Ratio: fixed 2:1 (1600×800 canvas), PNG exported at the --scale multiplier (default 3 → 4800×2400).
- Responsive: in the browser the HTML scales proportionally to fill the viewport, never enlarging, never overflowing; the export size is unaffected.
- No avatar: automatically render a serif monogram using the first letter of the name, still professional.
- Theme extension: just add a set of CSS variables to the THEMES dictionary in scripts/render_card.py.
User Configuration
This skill does not assume any private workspace. All identity, branding, and output paths are passed in via CLI flags; --out defaults to ./output in the current directory. If default identity reuse is needed, the caller can pre-fill these flags from the user profile itself, but the script itself does not read any fixed personal paths.