baoyu-markdown-to-html
Converts Markdown to styled HTML with WeChat-compatible themes. Supports code highlighting, math, Mermaid (rendered to PNG via headless Chrome), PlantUML, footnotes, alerts, infographics, and optional bottom citations for external links. Use when user asks for "markdown to html", "convert md to html
By jimliu · 31,326 installs
npx skills add jimliu/baoyu-skills --skill baoyu-markdown-to-html
Source repository · Upstream listing
Markdown to HTML Converter
Converts Markdown files to beautifully styled HTML with inline CSS, optimized for WeChat Official Account and other platforms.
User Input Tools
When this skill prompts the user, follow this tool selection rule (priority order):
1. Prefer built in user input tools exposed by the current agent runtime — e.g., AskUserQuestion , request user input , clarify , ask user , or any equivalent.
2. Fallback : if no such tool exists, emit a numbered plain text message and ask the user to reply with the chosen number/answer for each question.
3. Batching : if the tool supports multiple questions per call, combine all applicable questions into a single call; if only single question, ask them one at a time in priority order.
Concrete AskUserQuestion references below are examples — substitute the local equivalent in other runtimes.
Script Directory
Agent Execution : Determine this SKILL.md directory as {baseDir} . Resolve ${BUN X} runtime: if bun installed → bun ; if npx available → npx y bun ; else suggest installing bun. Replace {baseDir} and ${BUN X} with actual values.
Script Purpose
scripts/main.ts Main entry point
Preferences (EXTEND.md)
Check EXTEND.md in priority order — the first one found wins:
Priority Path Scope
1 .baoyu skills/baoyu markdown to html/EXTEND.md Project
2 ${XDG CONFIG HOME: $HOME/.config}/baoyu skills/baoyu markdown to html/EXTEND.md XDG
3 $HOME/.baoyu skills/baoyu markdown to html/EXTEND.md User home
If none found, use defaults.
EXTEND.md supports : default theme, custom CSS variables, code block style, mermaid defaults ( mermaid theme , mermaid scale , mermaid background ).
Workflow
Step 0: Pre check (Chinese Content)
Condition : Only execute if input file contains Chinese text.
Detection :
1. Read input markdown file
2. Check if content contains CJK characters (Chinese/Japanese/Korean)
3. If no CJK content → skip to Step 1
Format Suggestion :
If CJK content detected AND baoyu format markdown skill is available:
Use AskUserQuestion to ask whether to format first. Formatting can fix:
Bold markers with punctuation inside causing parse failures
CJK/English spacing issues
If user agrees : Invoke baoyu format markdown skill to format the file, then use formatted file as input.
If user declines : Continue with original file.
Step 1: Determine Theme
Theme resolution order (first match wins):
1. User explicitly specified theme (CLI theme or conversation)
2. EXTEND.md default theme (this skill's own EXTEND.md, checked in Step 0)
3. baoyu post to wechat EXTEND.md default theme (cross skill fallback)
4. If none found → use AskUserQuestion to confirm
Cross skill EXTEND.md check (only if this skill's EXTEND.md has no default theme ):
Read $HOME/.baoyu skills/baoyu post to wechat/EXTEND.md if it exists and look for a default theme: line. Use the value if present; otherwise fall through.
If theme is resolved from EXTEND.md : Use it directly, do NOT ask the user.
If no default found : use AskUserQuestion to confirm a theme from the [Themes]( themes) table below.
Step 1.5: Determine Citation Mode
Default : Off. Do not ask by default.
Enable only if the user explicitly asks for "微信外链转底部引用", "底部引用", "文末引用", or passes cite .
Behavior when enabled :
Ordinary external links are rendered with numbered superscripts and collected under a final 引用链接 section.
https://mp.weixin.qq.com/... links stay as direct links and are not moved to the bottom.
Bare links where link text equals URL stay inline.
Step 2: Convert
Step 3: Report Result
Display the output path from JSON result. If backup was created, mention it.
Usage
Options:
Option Description Default
theme <name Theme name (default, grace, simple, modern) default
color <name\ hex Primary color: preset name or hex value theme default
font family <name Font: sans, serif, serif cjk, mono, or CSS value theme default
font size <N Font size: 14px, 15px, 16px, 17px, 18px 16px
title <title Override title from frontmatter
cite Convert external links to bottom citations, append 引用链接 section false (off)
keep title Keep the first heading in content false (removed)
mermaid theme <name Mermaid theme: default , forest , dark , neutral , base default
mermaid scale <N Mermaid render scale (positive number ≤ 4) 2
mermaid width <N Mermaid target display width in CSS px; PNG is rendered at width × scale pixels when the diagram is narrower than this 860
mermaid bg <value Mermaid background: white , transparent , or hex white
no mermaid Skip Mermaid PNG rendering; emit <pre class="mermaid" fallback false
help Show help
Color Presets:
Name Hex Label
blue 0F4C81 Classic Blue
green 009874 Emerald Green
vermilion FA5151 Vibrant Vermilion
yellow FECE00 Lemon Yellow
purple 92617E Lavender Purple
sky 55C9EA Sky Blue
rose B76E79 Rose Gold
olive 556B2F Olive Green
black 333333 Graphite Black
gray A9A9A9 Smoke Gray
pink FFB7C5 Sakura Pink
red A93226 China Red
orange D97757 Warm Orange (modern default)
Examples:
Output
File location : Same directory as input markdown file.
Input: /path/to/article.md
Output: /path/to/article.html
Conflict handling : If HTML file already exists, it will be backed up first:
Backup: /path/to/article.html.bak YYYYMMDDHHMMSS
JSON output to stdout:
Mermaid rendering : Code blocks fenced as lang with syntax highlighting
Inline code code
Tables GitHub flavored markdown tables
Images 
Links [text](url) ; add cite to move ordinary external links into bottom references
Blockquotes quote
Lists unordered, 1. ordered
Alerts [!NOTE] , [!WARNING] , etc.
Footnotes [^1] references
Ruby text {base annotation}
Mermaid plantuml diagrams
Frontmatter
Supports YAML frontmatter for metadata:
If no title is found, extracts from first H1/H2 heading or uses filename.
Extension Support
Custom configurations via EXTEND.md. See Preferences section for paths and supported options.