html-ppt-designer
npx skills add https://github.com/andyhuo520/html-ppt-designer --skill html-ppt-designer
Agent 安装分布
Skill 文档
HTML PPT Designer v5.2 / æºè½æ¼ç¤ºæç¨¿è®¾è®¡å¨
çæ¬: 5.2 æ¶æ: LLM æºè½è®¾è®¡ä¼å + æ¬å°æ¨¡æ¿ fallback + åæé 徿å + Unsplash é å¾ + çç¿»é¡µå¼æ + 6 ç§å¨ç» + è§é¢æå®¢æ¨¡å¼ + å åµåå¹ + å½äº§ TTS + 纯è²è®¾è®¡ + é»è®¤å¾æ è£ é¥° + æ§å¶é¢æ¿èªå¨éè æ´æ°æ¥æ: 2026-02-13
ð§ ç¯å¢åéé ç½®ï¼é¦æ¬¡ä½¿ç¨å¿ 读ï¼
å¨ä½¿ç¨æ¬ Skill çé å¾å AI åè½åï¼éè¦é ç½®ç¸åºç API Keyã
å¿ éé ç½®
| åè½ | ç¯å¢åé | ç³è¯·å°å | å è´¹é¢åº¦ |
|---|---|---|---|
| Unsplash é å¾ | UNSPLASH_ACCESS_KEY |
https://unsplash.com/developers | 50次/å°æ¶ |
| AI çææå¾ | ZENMUX_API_KEY |
https://zenmux.ai | æç¨é计费 |
å¯éé ç½®ï¼è§é¢å¯¼åºï¼
| åè½ | ç¯å¢åé | ç³è¯·å°å | è´¹ç¨ |
|---|---|---|---|
| OpenAI TTS | OPENAI_API_KEY |
https://platform.openai.com | ~$0.015/åé |
| ç«å±±å¼æ TTS | VOLCENGINE_ACCESS_KEY + VOLCENGINE_SECRET_KEY |
https://console.volcengine.com | æç¨é计费 |
| æºè°± AI TTS | ZHIPUAI_API_KEY |
https://open.bigmodel.cn | æç¨é计费 |
| Gemini è½¬å½ | GEMINI_API_KEY |
https://aistudio.google.com | ~$0.001/åé |
é ç½®æ¹æ³
æ¹æ³ä¸ï¼ä¸´æ¶è®¾ç½®ï¼å½åç»ç«¯ä¼è¯ï¼
export UNSPLASH_ACCESS_KEY="your-unsplash-access-key"
export ZENMUX_API_KEY="your-zenmux-api-key"
æ¹æ³äºï¼æ°¸ä¹ è®¾ç½®ï¼æ·»å å° shell é ç½®æä»¶ï¼
# ç¼è¾ ~/.zshrc æ ~/.bashrc
echo 'export UNSPLASH_ACCESS_KEY="your-unsplash-access-key"' >> ~/.zshrc
echo 'export ZENMUX_API_KEY="your-zenmux-api-key"' >> ~/.zshrc
# éæ°å è½½é
ç½®
source ~/.zshrc
Unsplash API ç³è¯·æ¥éª¤
- è®¿é® https://unsplash.com/developers
- 注å/ç»å½ Unsplash è´¦å·
- ç¹å»ãNew Applicationãå建æ°åºç¨
- å¡«ååºç¨ä¿¡æ¯ï¼ç¨éå¯å¡«ï¼PPT é å¾ï¼
- å建åè·å Access Key
- 设置ç¯å¢åéï¼
export UNSPLASH_ACCESS_KEY="your-key"
ZENMUX API ç³è¯·æ¥éª¤
- è®¿é® https://zenmux.ai
- 注åè´¦å·å¹¶ç»å½
- 卿§å¶å°è·å API Key
- 设置ç¯å¢åéï¼
export ZENMUX_API_KEY="your-key"
ð v4.0 æ ¸å¿æ¶æå级
设计ç念转å
æ§æ¶æï¼v3.xï¼ï¼é¢è®¾ 16 ç§åºå®æ¨¡æ¿ â ç¨æ·éæ© â å¡«å å 容 æ°æ¶æï¼v4.0ï¼ï¼LLM åæå 容 â æºè½çæè®¾è®¡ â 卿å建 CSS
LLM ä¼å 设计æµç¨
ç¨æ·å
容
â
LLM åæï¼å
容类åãæ
æåºè°ã主é¢è²å½©ãç®æ åä¼ï¼
â
LLM çæï¼
âââ è²å½©æ¹æ¡ï¼ä¸»è²/è¾
å©è²/èæ¯è²/æåè²ï¼
âââ æç飿 ¼ï¼åä½ç»å/åå·å±çº§/é´è·ç³»ç»ï¼
âââ å¸å±ç»æï¼å°é¢/å
容页/éå¥é¡µ/ç»å°¾é¡µ åèªç设计ï¼
âââ è§è§å
ç´ ï¼è£
饰å¾å½¢/åé线/å¡çæ ·å¼ï¼
âââ å¨æéæ©ï¼æ¨èéåç翻页å¨ç»ï¼
â
çæå®æ´ HTMLï¼å
åµèªå®ä¹ CSSï¼
â
[失败æ¶] â fallback å°æ¬å°é¢è®¾æ¨¡æ¿
æ¬å°æ¨¡æ¿çæ°å®ä½
| åºæ¯ | ä½¿ç¨æ¹å¼ |
|---|---|
| æ£å¸¸ä½¿ç¨ | LLM 卿çæè®¾è®¡ï¼ä¸ä½¿ç¨æ¬å°æ¨¡æ¿ |
| ç½ç»é®é¢ | LLM æ æ³ååºæ¶ï¼fallback å° 16 ç§é¢è®¾æ¨¡æ¿ |
| ç¨æ·æå® | ç¨æ·æç¡®è¦æ±æç§é¢è®¾é£æ ¼æ¶ä½¿ç¨ |
| å¿«éé¢è§ | éè¦å¿«éçææ¶å¯éä½¿ç¨ |
ð¨ LLM æºè½è®¾è®¡ç³»ç»
设计åæç»´åº¦
LLM å¨çæè®¾è®¡åä¼åæä»¥ä¸ç»´åº¦ï¼
| 维度 | åæå 容 | å½±å设计 |
|---|---|---|
| å 容类å | æ¼è®²/æç¨/æ¥å/æ äº/æ°æ®/产å | æ´ä½é£æ ¼æ¹å |
| æ æåºè° | 严è/活泼/ä¸ä¸/温æ/ç§æ/èºæ¯ | è²å½©ååä½éæ© |
| 主é¢é¢å | ç§æ/åä¸/æè²/çæ´»/èºæ¯ | é è²åè£ é¥°å ç´ |
| ç®æ åä¼ | é«ç®¡/大ä¼/å¦ç/ä¸ä¸äººå£« | ä¿¡æ¯å¯åº¦åå¤æåº¦ |
| 使ç¨åºæ¯ | æ¼è®²/å享/æ±æ¥/è¥é | è§è§å²å»åç¨åº¦ |
卿çæç设计å ç´
1. è²å½©æ¹æ¡
/* LLM æ ¹æ®å
å®¹çæ */
--primary: #XXXXXX; /* ä¸»è² - åçæ/æ
æåºè° */
--primary-light: #XXXXXX; /* ä¸»è²æµ
ç - hover/å¼ºè° */
--secondary: #XXXXXX; /* è¾
å©è² - 对æ¯/屿¬¡ */
--accent: #XXXXXX; /* ç¹ç¼è² - å¸å¼æ³¨æ */
--bg-page: #XXXXXX; /* 页é¢èæ¯ */
--bg-card: #XXXXXX; /* å¡çèæ¯ */
--text-heading: #XXXXXX; /* æ 颿å */
--text-body: #XXXXXX; /* æ£ææå */
--text-muted: #XXXXXX; /* å¼±åæå */
2. åä½ç³»ç»
/* LLM æ¨èåä½ç»å */
--font-heading: 'Font Name', fallback; /* æ é¢åä½ */
--font-body: 'Font Name', fallback; /* æ£æåä½ */
--font-accent: 'Font Name', fallback; /* 强è°åä½ï¼å¦æ°åãå¼ç¨ï¼ */
/* åå·å±çº§ */
--text-hero: XXpx; /* å°é¢å¤§æ é¢ */
--text-h1: XXpx; /* 页颿 é¢ */
--text-h2: XXpx; /* æ®µè½æ é¢ */
--text-body: XXpx; /* æ£æ */
--text-small: XXpx; /* è¾
婿å */
3. å¸å±åæ°
/* é´è·ç³»ç» */
--spacing-xs: Xpx;
--spacing-sm: Xpx;
--spacing-md: Xpx;
--spacing-lg: Xpx;
--spacing-xl: Xpx;
/* åè§ */
--radius: Xpx; /* å¡çåè§ */
--radius-sm: Xpx; /* å°å
ç´ åè§ */
/* é´å½± */
--shadow: ...; /* å¡çé´å½± */
4. 页é¢ç±»å设计
æ¯ç§é¡µé¢ç±»å齿ç¬ç«çè®¾è®¡æ¹æ¡ï¼
| 页é¢ç±»å | LLM 设计è¦ç¹ |
|---|---|
| å°é¢é¡µ | æ é¢ä½ç½®ã坿 颿 ·å¼ãè£ é¥°å ç´ ãèæ¯å¤ç |
| å 容页 | æ 颿 ·å¼ãæ£ææçã徿å¸å±ãä¿¡æ¯å±æ¬¡ |
| éå¥é¡µ | å¼å·æ ·å¼ãæå大å°ãèæ¯æ°å´ãå¼ºè°æ¹å¼ |
| ç»å°¾é¡µ | ç»æè¯è®¾è®¡ãèç³»æ¹å¼ãè¡å¨å·å¬ |
ð 宿´å·¥ä½æµç¨
ç¨æ·è¾å
¥å
容/URL/é³è§é¢
â
[é¶æ®µé¶] è¾å
¥å¤ç
âââ çº¯ææ¬ â ç´æ¥è¿å
¥é¶æ®µä¸
âââ ç½é¡µ URL â fetch_webpage.py æåæ£æ + **ä¸è½½åå§å¾ç** â è¿å
¥é¶æ®µä¸
âââ YouTube URL â transcribe_audio.py ä¸è½½+è½¬å½ â è¿å
¥é¶æ®µä¸
âââ å°å®å® URL â transcribe_audio.py ä¸è½½+è½¬å½ â è¿å
¥é¶æ®µä¸
âââ é³é¢ç´é¾/æä»¶ â transcribe_audio.py è½¬å½ â è¿å
¥é¶æ®µä¸
â
[é¶æ®µä¸] å
容解æ
âââ æåæ é¢ã坿 é¢ãæ ¸å¿è§ç¹
âââ åæå
容类ååæ
æåºè°
âââ æåå¹»ç¯ç页é¢
â
[é¶æ®µäº] 设计çç¥éæ©ï¼AskUserQuestionï¼
â
âââ D1 LLM æºè½è®¾è®¡ â æ¨è
â âââ LLM æ ¹æ®å
容èªå¨çææä½³è®¾è®¡
â
âââ D2 æå®é£æ ¼åè
â âââ ç¨æ·æå®åè飿 ¼ï¼LLM 卿¤åºç¡ä¸å®å¶
â
âââ D3 使ç¨é¢è®¾æ¨¡æ¿
âââ ç´æ¥ä½¿ç¨ 16 ç§æ¬å°æ¨¡æ¿ä¹ä¸
â
[é¶æ®µä¸] è¾åºæ¨¡å¼éæ©ï¼AskUserQuestionï¼â
æ°å¢
â
âââ M1 ä»
HTML PPTï¼é»è®¤ï¼
â âââ æ å页æ°ï¼éåæ¼è®²/æ±æ¥
â
âââ M2 è§é¢æå®¢æ¨¡å¼ â è§é¢å¯¼åºæ¨è
â
âââ å
容å¢å¼ºçç¥ï¼
â âââ æ¯ä¸ªä¸»é¢æå为 2-3 个å页é¢ï¼é¿å
å页åçè¿ä¹
ï¼
â âââ å¢å æ°æ®å¡çãå
³é®æ°åãè¿åº¦æ¡
â âââ æ¯é¡µå
å«ï¼æ é¢ + æ ¸å¿è§ç¹ + æ°æ®/å¾è¡¨ + å¼ç¨
â âââ 页æ°å¢å 50-100%ï¼å
容å¯åº¦æå
â
âââ é
徿¹æ¡æ¨èï¼
âââ P1 Unsplash æ°å´ç
§çï¼å°é¢/éå¥é¡µï¼
âââ P4 Excalidraw ææ¯å¾è¡¨ï¼æ°æ®/æµç¨é¡µï¼
âââ N2 ä¿¡æ¯å¾è¡¨ï¼æ°æ®å±ç¤ºé¡µï¼
â
[é¶æ®µå] 详ç»é
ç½®ï¼AskUserQuestionï¼
â
âââ 4.1 页æ°å¯åº¦ï¼æ ¹æ®æ¨¡å¼è°æ´ï¼
â âââ M1 æ åçï¼10-12 页
â âââ M2 å¢å¼ºçï¼18-25 页ï¼èªå¨æåï¼
â
âââ 4.2 é
徿¹æ¡
â âââ P1 Unsplash é«è´¨éç
§ç
â âââ P2 AI çææå¾
â âââ P4 Excalidraw ææ¯å¾è¡¨ â è§é¢æå®¢æ¨è
â âââ N1 Iconify 徿 æ¹æ¡
â âââ N2 ä¿¡æ¯å¾è¡¨æ¹æ¡ â è§é¢æå®¢æ¨è
â âââ N4 纯æåæç
â
âââ 4.3 翻页å¨ç»
âââ Fade / Cinematic / Zoom / Slide / Flip / Cut
â
[é¶æ®µäº] å
容å¢å¼ºï¼M2 è§é¢æå®¢æ¨¡å¼ä¸å±ï¼
â
âââ æåé¿å
容为å¤é¡µ
â âââ 忬 1 页 â æåä¸ºãæ¦å¿µé¡µ + æ°æ®é¡µ + æ¡ä¾é¡µã
â
âââ æ·»å è§è§å
ç´
â âââ æ°æ®å¡çï¼å¤§æ°å + 说æï¼
â âââ æ¶é´çº¿/æµç¨å¾
â âââ 对æ¯è¡¨æ ¼
â âââ å¼ç¨æ¡/é奿¡
â
âââ 丰å¯è®²è§£æå
âââ æ¯é¡µçæç¬ç«ç data-narration
â
[é¶æ®µå
] é
å¾è·å
âââ Unsplash ç
§çæç´¢
âââ AI çææå¾ï¼å¯éï¼
âââ Excalidraw ææ¯å¾è¡¨
âââ æçº¯å¾æ /å ä½è£
饰
â
[é¶æ®µä¸] HTML çæ
âââ LLM çæå®æ´ CSS æ ·å¼
âââ å
åµå° HTML ä¸
âââ æ·»å ç¿»é¡µå¼æ
âââ çææç»æä»¶ï¼å« data-narrationï¼
â
[é¶æ®µå
«] è¾åºä¸é¢è§
â
[é¶æ®µä¹] è§é¢å¯¼åºï¼å¯éï¼M2 模å¼å¼ºçæ¨èï¼
âââ 确认讲解æåï¼å¯ç¼è¾ï¼
âââ éæ©é
鳿å¡ï¼Edge TTS / OpenAI TTSï¼
âââ éæ©è¯é³é£æ ¼ï¼äºå¥/ææ/å
¶ä»ï¼
âââ åå¹é
ç½®
â âââ æ¯å¦å¯ç¨å
åµåå¹ï¼é»è®¤å¯ç¨ï¼
â âââ å广 ·å¼ï¼ç½åé»èæ¯åè§
â âââ åä½ï¼PingFang SCï¼è¹æå¹³æ¹ï¼
â âââ æå¥ååå²ï¼é奿¾ç¤ºï¼ä¸é³é¢åæ¥
âââ é³é¢é©±å¨æªå¾ï¼æ¯é¡µæ¶é¿ = é³é¢æ¶é¿ï¼
âââ è¾åº MP4 æä»¶ï¼å«å
åµåå¹ï¼
ð¬ è§é¢æå®¢æ¨¡å¼è¯¦è§£
为ä»ä¹éè¦è§é¢æå®¢æ¨¡å¼ï¼
é®é¢ï¼æ®é PPT 转è§é¢æ¶ï¼å页åç 30-50 ç§ï¼ç»é¢å¤ªåè°
è§£å³ï¼
- å 容æåï¼åæ¬ 1 页 â æå为 2-3 页
- è§è§ä¸°å¯ï¼å¢å æ°æ®å¡çãå¾è¡¨ãå¼ç¨æ¡
- èå¥æï¼æ¯é¡µ 10-20 ç§ï¼ç¿»é¡µæ´é¢ç¹
å 容æåçç¥
| åå 容类å | æåæ¹æ¡ | ç¤ºä¾ |
|---|---|---|
| æ¦å¿µä»ç» | æ¦å¿µé¡µ + æ¡ä¾é¡µ + æ»ç»é¡µ | ãAI åç代çå ¬å¸ãæå为 3 页 |
| æ°æ®å±ç¤º | æ°æ®æ¦è§ + è¯¦ç»æ°æ® + è¶å¿åæ | ãå¸åºæ°æ®ãæå为 3 页 |
| æ¹æ³æ¥éª¤ | æ¦è¿°é¡µ + æ¯æ¥éª¤ç¬ç«é¡µ | ã䏿¥æ³ãæå为 4 页 |
| 对æ¯åæ | å¯¹æ¯æ¦è§ + A æ¹æ¡ + B æ¹æ¡ + ç»è®º | ãæ¹æ¡å¯¹æ¯ãæå为 4 页 |
è§è§å ç´ æ¨¡æ¿
æ°æ®å¡ç
âââââââââââââââââââââââââââââââââââââââ
â ââââââââââââ $2.5ä¸äº¿ â
â ââââââââââââ æ¯å¹´æ¿åºæ¬ºè¯æå¤± â
â ââââââââââââ â
â ä»
å»ä¿æ¯å¹´æå¤±æ°ç¾äº¿ç¾å
â
âââââââââââââââââââââââââââââââââââââââ
è¿åº¦æ¡/æ¶é´çº¿
âââââââââââââââââââââââââââââââââââââââ
â é¶æ®µ1 â é¶æ®µ2 â é¶æ®µ3 â
â â è¿è¡ä¸ å¾
宿 â
âââââââââââââââââââââââââââââââââââââââ
å¼ç¨æ¡
âââââââââââââââââââââââââââââââââââââââ
â "AI åçå
¬å¸ç°å¨å¯ä»¥æ¯ä»¥å¾ â
â æ´å¿«ãæ´ä¾¿å®ãæ´æéå¿å°æå»ºã" â
â â YC RFS â
âââââââââââââââââââââââââââââââââââââââ
è§é¢æ¨¡å¼åå·è§èï¼v5.1 æ°å¢ï¼
é®é¢ï¼æ®é HTML PPT åå·å¨è§é¢å¯¼åºåè¿å°ï¼å¤§éçç½ï¼ç¨æ·ç䏿¸ ã
è§£å³æ¹æ¡ï¼è§é¢æ¨¡å¼ä½¿ç¨ 1.5x åå·ï¼åå°è¾¹è·ï¼æé«ä¿¡æ¯å¯åº¦ã
| å ç´ | æ®éæ¨¡å¼ | è§é¢æ¨¡å¼ | 说æ |
|---|---|---|---|
| å°é¢å¤§æ é¢ | 72px | 108px | ç¡®ä¿è§é¢å°é¢å²å»å |
| 页颿 é¢ | 42px | 64px | æ¸ æ°å¯è¯» |
| æ£æ | 20px | 32px | è§é¢èéé 读 |
| å¼ç¨æå | 36px | 52px | éå¥çªåº |
| é¡µè¾¹è· | 80-120px | 40-60px | åå°çç½ |
| è¡é« | 1.8 | 2.0 | è§é¢èéé´è· |
CSS åéè¦çï¼
/* è§é¢æ¨¡å¼ä¸ç¨ */
.video-mode {
--text-hero: 108px;
--text-h1: 64px;
--text-h2: 48px;
--text-body: 32px;
--text-small: 24px;
--spacing-page: 48px;
--line-height: 2.0;
}
è§é¢æå®¢æ¨¡å¼ AskUserQuestion 模æ¿
{
"questions": [
{
"question": "è¯·éæ©è¾åºæ¨¡å¼ï¼å³å®å
容å¯åº¦å页æ°ï¼",
"header": "è¾åºæ¨¡å¼",
"multiSelect": false,
"options": [
{
"label": "M1 ä»
HTML PPT",
"description": "æ å页æ°ï¼10-12页ï¼ï¼éåæ¼è®²ãæ±æ¥ãç°åºå±ç¤º"
},
{
"label": "M2 è§é¢æå®¢æ¨¡å¼ â æ¨è",
"description": "å¢å¼ºé¡µæ°ï¼18-25页ï¼ï¼å
容æåæ´ç»ï¼æ¯é¡µ10-20ç§ï¼éåè§é¢å¯¼åº"
}
]
}
]
}
ð¬ è§é¢å¯¼åºç³»ç»ï¼v3.2 å åµåå¹ï¼
åè½æ¦è¿°
å° HTML PPT å¹»ç¯ç转æ¢ä¸ºå¸¦é é³ååå¹ç MP4 è§é¢ï¼æ¯æï¼
- é³é¢é©±å¨æ¶é¿ï¼æ¯é¡µå±ç¤ºæ¶é´ = 该页é³é¢å®é æ¶é¿ï¼100% 忥
- å åµåå¹ï¼ç½åé»èæ¯åè§æ ·å¼ï¼æå¥ååå²é奿¾ç¤º
- åå¹åæ¥ï¼æ¯å¥å广¶é¿æåæ°æ¯ä¾åé ï¼ä¸é³é¢å®ç¾åæ¥
- èªå¨æªå¾ï¼ä½¿ç¨ Playwright 髿¸ æè·æ¯é¡µå¹»ç¯ç
- æºè½é é³ï¼Edge TTSï¼å è´¹ï¼æ OpenAI TTSï¼é«è´¨éï¼
- å¤è¯è¨æ¯æï¼ä¸æ / è±æè¯é³
v3.2 æ ¸å¿æ¹è¿
æ§æµç¨ï¼v3.0ï¼ï¼
æ¯é¡µ 1 å¼ æªå¾ + 宿´åå¹ â åå¹ä¸éé³é¢æ»å¨
æ°æµç¨ï¼v3.2ï¼ï¼
讲解æåæå¥ååå² â æ¯å¥çæ 1 å¼ æªå¾ â å广¶é¿æåæ°åé
â 100% 忥æ»å¨
åå¹ç¹æ§
| ç¹æ§ | 说æ |
|---|---|
| æ ·å¼ | ç½è²æå + åéæé»è²èæ¯ + 12px åè§ |
| åä½ | PingFang SCï¼è¹æå¹³æ¹ï¼ï¼28px |
| ä½ç½® | åºé¨å± ä¸ï¼è·ç¦»åºé¨ 60px |
| 忥æ¹å¼ | æå¥ååå²ï¼æ¯å¥æ¶é¿ = (该å¥åæ° / æ»åæ°) à 页é¢é³é¢æ¶é¿ |
| æå°æ¾ç¤º | æ¯å¥è³å° 1.5 ç§ |
ä¾èµå®è£
# ç³»ç»ä¾èµ
brew install ffmpeg
# Python ä¾èµ
pip install playwright edge-tts
# å®è£
æµè§å¨ï¼é¦æ¬¡ä½¿ç¨ï¼
playwright install chromium
# å¦éä½¿ç¨ OpenAI TTS
pip install openai
èæ¬ä½¿ç¨
# åºæ¬ç¨æ³ - Edge TTSï¼å
è´¹ï¼ï¼é»è®¤å¯ç¨åå¹
python3 scripts/ppt_to_video.py presentation.html -o output.mp4
# ç¦ç¨åå¹
python3 scripts/ppt_to_video.py presentation.html --no-subtitle -o output.mp4
# ä½¿ç¨ OpenAI TTSï¼éé
ç½® OPENAI_API_KEYï¼
python3 scripts/ppt_to_video.py presentation.html --tts openai -o output.mp4
# 使ç¨ç«å±±å¼æ TTSï¼å½äº§æ¨èï¼
python3 scripts/ppt_to_video.py presentation.html \
--tts volcengine --voice zh_female_tianmeixiaoyuan -o output.mp4
# ä½¿ç¨æºè°± AI TTS
python3 scripts/ppt_to_video.py presentation.html --tts zhipu -o output.mp4
# ä½¿ç¨ Fish Speechï¼æ¬å°é¨ç½²ï¼
python3 scripts/ppt_to_video.py presentation.html --tts fish -o output.mp4
# æå®è¯é³
python3 scripts/ppt_to_video.py presentation.html \
--voice zh-CN-YunxiNeural -o output.mp4
# èªå®ä¹å广 ·å¼
python3 scripts/ppt_to_video.py presentation.html \
--subtitle-fontsize 32 --subtitle-radius 16 -o output.mp4
# èªå®ä¹å辨çå帧ç
python3 scripts/ppt_to_video.py presentation.html \
--resolution 1280x720 --fps 24 -o output.mp4
# ååºå¯ç¨è¯é³
python3 scripts/ppt_to_video.py --list-voices
python3 scripts/ppt_to_video.py --list-voices --tts volcengine
# ååºææ TTS æå¡
python3 scripts/ppt_to_video.py --list-services
åå¹ç¸å ³åæ°
| åæ° | é»è®¤å¼ | 说æ |
|---|---|---|
--no-subtitle |
– | ç¦ç¨å åµåå¹ |
--subtitle-font |
PingFang SC, Noto Sans SC | åå¹åä½ |
--subtitle-fontsize |
28 | åå¹åå·ï¼åç´ ï¼ |
--subtitle-radius |
12 | åå¹èæ¯åè§ï¼åç´ ï¼ |
TTS æå¡å¯¹æ¯
| æå¡ | è´¹ç¨ | é³è´¨ | é度 | æ¨èåºæ¯ |
|---|---|---|---|---|
| Edge TTS | å è´¹ | è¯å¥½ | å¿« | æ¥å¸¸ä½¿ç¨ â æ¨è |
| OpenAI TTS | ~$0.015/åé | ä¼ç§ | å¿« | åä¸/é«è´¨ééæ± |
| ç«å±±å¼æ | æéä»è´¹ | ä¼ç§ | å¿« | 䏿ä¸ä¸åºæ¯ |
| æºè°± AI | æéä»è´¹ | ä¼ç§ | å¿« | 䏿ä¸ä¸åºæ¯ |
| Fish Speech | å è´¹ | è¯å¥½ | ä¸ | æ¬å°é¨ç½²/éç§éæ± |
ç¯å¢åéé ç½®
# OpenAI TTS
export OPENAI_API_KEY="sk-..."
# ç«å±±å¼æ TTSï¼åèè·³å¨ï¼
export VOLCENGINE_ACCESS_KEY="your-access-key"
export VOLCENGINE_SECRET_KEY="your-secret-key"
export VOLCENGINE_APP_ID="your-app-id"
# æºè°± AI TTS
export ZHIPUAI_API_KEY="your-api-key"
# Fish Speechï¼æ¬å°æå¡ï¼
export FISH_SPEECH_URL="http://localhost:8080"
å¯ç¨ä¸æè¯é³
Edge TTSï¼16 ç§ï¼
| è¯é³ ID | æè¿° |
|---|---|
zh-CN-YunjianNeural |
äºå¥ – ç·å£°ï¼æ°é»ææ¥ â é»è®¤ |
zh-CN-XiaoxiaoNeural |
ææ – 女声ï¼èªç¶äº²å |
zh-CN-YunxiNeural |
äºå¸ – ç·å£°ï¼å¹´è½»æ´»å |
zh-CN-XiaoyiNeural |
æä¼ – å¥³å£°ï¼æ¸©æ |
zh-CN-YunfengNeural |
äºæ« – ç·å£°ï¼æ²ç¨³ |
zh-CN-YunyangNeural |
äºæ¬ – ç·å£°ï¼ä¸ä¸å®¢æ |
zh-CN-XiaochenNeural |
æè¾° – å¥³å£°ï¼æ°é» |
zh-CN-XiaohanNeural |
ææ¶µ – å¥³å£°ï¼æ¸©æ |
ç«å±±å¼æ TTSï¼8 ç§ï¼
| è¯é³ ID | æè¿° |
|---|---|
zh_female_tianmeixiaoyuan |
çç¾å°åª – 女声ï¼çç¾äº²å â æ¨è |
zh_female_shuangkuaisisi |
ç½å¿«ææ – 女声ï¼ç½æ |
zh_female_wanwan |
湾湾 – 女声ï¼å°æ¹¾è |
zh_female_chenshu |
æçå§å§ – 女声ï¼ç¥æ§ |
zh_male_chunhou |
éåç·å£° – ç·å£°ï¼ç¨³é |
zh_male_narration |
解说ç·å£° – ç·å£°ï¼ä¸ä¸ |
zh_male_qingxinnansheng |
æ¸ æ°ç·å£° – ç·å£°ï¼å¹´è½» |
zh_male_huangzhong |
é»é – ç·å£°ï¼æé³ |
工使µç¨å¾ï¼v3.2ï¼
HTML PPT æä»¶
â
âââââââââââââââââââââââââââââââââââââââ
â 1. æå讲解æå â
â - 读å data-narration 屿§ â
â - ææå页颿æ¬å
容 â
âââââââââââââââââââââââââââââââââââââââ
â
âââââââââââââââââââââââââââââââââââââââ
â 2. çæææé³é¢ â
â - Edge TTS / OpenAI TTS â
â - æ¯é¡µä¸æ¡é³é¢ â
â - ä½¿ç¨ ffprobe è·åå®é
æ¶é¿ â
âââââââââââââââââââââââââââââââââââââââ
â
âââââââââââââââââââââââââââââââââââââââ
â 3. åå¹åå²ï¼v3.2 æ°å¢ï¼ â
â - æå¥å·åå²è®²è§£æå â
â - æåæ°æ¯ä¾åé
æ¯å¥æ¶é¿ â
â - ç¡®ä¿æ¯å¥è³å° 1.5 ç§ â
âââââââââââââââââââââââââââââââââââââââ
â
âââââââââââââââââââââââââââââââââââââââ
â 4. 带å广ªå¾ï¼v3.2 æ°å¢ï¼ â
â - æ¯å¥çæä¸å¼ æªå¾ â
â - CSS 渲æåå¹å°ç»é¢ä¸ â
â - çå¾
å¤é¨å¾çå è½½å®æ â
âââââââââââââââââââââââââââââââââââââââ
â
âââââââââââââââââââââââââââââââââââââââ
â 5. åæè§é¢ â
â - å¾çåºå â H.264 è§é¢ â
â - æ¼æ¥é³é¢è½¨é â
â - è§é¢/é³é¢/åå¹ 100% 忥 â
â - è¾åº MP4 æä»¶ â
âââââââââââââââââââââââââââââââââââââââ
å¨å¹»ç¯çä¸èªå®ä¹
å¯å¨ HTML ç .slide å
ç´ ä¸æ·»å data-* 屿§ï¼
<!-- èªå®ä¹è®²è§£æå -->
<div class="slide" data-narration="è¿æ¯èªå®ä¹ç讲解æåï¼ä¼è¦çèªå¨çæçå
容">
...
</div>
<!-- èªå®ä¹å±ç¤ºæ¶é¿ï¼æ¯«ç§ï¼ -->
<div class="slide" data-duration="8000">
...
</div>
ð§ LLM è®¾è®¡çæ Prompt 模æ¿
è®¾è®¡åæ Prompt
ä½ æ¯ä¸ä½å½é
顶级æ¼ç¤ºæç¨¿è®¾è®¡å¸ã请åæä»¥ä¸å
容ï¼å¹¶çææéåçè§è§è®¾è®¡æ¹æ¡ã
ãå
容信æ¯ã
æ é¢ï¼{title}
ç±»åï¼{content_type}
æ
æåºè°ï¼{emotion}
ç®æ åä¼ï¼{audience}
主é¢é¢åï¼{domain}
ã页颿¦è§ã
{slides_overview}
请æä¾ï¼
1. 设计ç念ï¼100åå
ï¼
2. è²å½©æ¹æ¡ï¼8个é¢è²å¼ï¼
3. å使¨èï¼ä¸è±æå1-2个ï¼
4. å¸å±ç¹ç¹æè¿°
5. æ¨èç翻页å¨ç»
CSS çæ Prompt
åºäºä»¥ä¸è®¾è®¡è§æ ¼ï¼çæå®æ´ç CSS æ ·å¼ï¼
ãè®¾è®¡è§æ ¼ã
{design_spec}
ãè¦æ±ã
1. ä½¿ç¨ CSS åéå®ä¹ææé¢è²
2. å
å«ä»¥ä¸é¡µé¢ç±»åæ ·å¼ï¼
- .slide-coverï¼å°é¢é¡µï¼
- .slide-contentï¼å
容页ï¼
- .slide-quoteï¼éå¥é¡µï¼
- .slide-endingï¼ç»å°¾é¡µï¼
3. å
嫿§å¶é¢æ¿æ ·å¼
4. å
å«ååºå¼è®¾è®¡ï¼768px/1024px æç¹ï¼
5. ä½¿ç¨ Google Fontsï¼æä¾ import è¯å¥ï¼
6. è¾åºå®æ´å¯ç¨ç CSS 代ç
ð¦ LLM 设计 JSON æ ¼å¼è§è
宿´æ ¼å¼ç¤ºä¾
{
"concept": "温æç§ææ - ç»åç§æä¸»é¢çå·å³»ä¸äººæå
³æç温度",
"colors": {
"primary": "#2563EB",
"primary_light": "#3B82F6",
"secondary": "#64748B",
"accent": "#F59E0B",
"bg_page": "#0F172A",
"bg_card": "#1E293B",
"bg_section": "#334155",
"text_heading": "#F1F5F9",
"text_body": "#CBD5E1",
"text_muted": "#94A3B8",
"border": "rgba(148, 163, 184, 0.2)"
},
"fonts": {
"heading": "'Inter', 'Noto Sans SC', sans-serif",
"body": "'Inter', 'Noto Sans SC', sans-serif",
"google_fonts_url": "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Noto+Sans+SC:wght@400;500;700&display=swap"
},
"spacing": {
"xs": "4px",
"sm": "8px",
"md": "16px",
"lg": "32px",
"xl": "64px"
},
"radius": "8px",
"transition": "cinematic",
"layouts": {
"cover": ".slide-cover { background: var(--bg-page); border-bottom: 4px solid var(--primary); }",
"content": ".slide-content .content-grid { gap: 48px; }",
"quote": ".slide-quote .quote-text { font-size: 36px; }",
"ending": ".slide-ending { background: var(--bg-page); border-top: 4px solid var(--accent); }"
}
}
åæ®µè¯´æ
| åæ®µ | ç±»å | å¿ å¡« | 说æ |
|---|---|---|---|
concept |
string | å¦ | 设计ç念æè¿°ï¼ç¨äºæ¥å¿è¾åº |
colors |
object | æ¯ | è²å½©æ¹æ¡ï¼ææé¢è²ä½¿ç¨ hex æ rgba |
fonts |
object | æ¯ | åä½è®¾ç½® |
spacing |
object | å¦ | é´è·ç³»ç» |
radius |
string | å¦ | åè§å¤§å° |
transition |
string | å¦ | é»è®¤ç¿»é¡µå¨ç» |
layouts |
object | å¦ | å页é¢ç±»åçèªå®ä¹ CSS |
æå°å¯ç¨æ ¼å¼
{
"colors": {
"primary": "#1A1A1A",
"bg_page": "#FFFFFF",
"bg_card": "#FFFFFF",
"text_heading": "#1A1A1A",
"text_body": "#333333"
},
"fonts": {
"heading": "'Noto Serif SC', serif",
"body": "'Noto Sans SC', sans-serif",
"google_fonts_url": "https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@400;500;700&family=Noto+Serif+SC:wght@400;600;700&display=swap"
},
"transition": "fade"
}
ð v3.2 æ´æ°æ¦è¦
0. é³é¢/è§é¢è¯é³è½¬å½ï¼NEWï¼
- æ¯æ YouTubeãå°å®å®æå®¢ãç´æ¥é³é¢é¾æ¥ãæ¬å°é³é¢æä»¶ ä½ä¸ºè¾å ¥
- ä¸ç§è½¬å½æ¨¡å¼ï¼localï¼MLX-Whisper æ¬å°å è´¹ï¼/ apiï¼OpenAIï¼/ geminiï¼æå¿«æä¾¿å®ï¼
- èªå¨ä¸è½½é³é¢ â é¢å¤ç â è½¬å½ â æ´çæå â çæ PPT 大纲
- Apple Silicon Mac æ¬å°è¿è¡ Whisperï¼é¶ææ¬
- èæ¬ï¼
scripts/transcribe_audio.py
1. 16+ 飿 ¼ç³»ç»ï¼4 大类å«ï¼
- Classic/Professionalï¼TED æ¼è®²ãApple Keynoteãæ å PPTãGammaãConsulting
- Editorial/Publishingï¼Editorial æå¿ãSwiss å½é ãNewspaper æ¥çº¸
- Design/Artï¼BauhausãKinfolkãMujiãBrutalist
- Tech/Futureï¼Neo-TokyoãDark Modeã红é»ç½ç§æ
- Education/Creativeï¼å¡é 2.5DãEducation æè²
2. Unsplash API é å¾
- éæ Unsplash APIï¼é«è´¨éå è´¹ç §ç
- æ ¹æ®å¹»ç¯çå 容èªå¨æç´¢å¹é ç §ç
- æ¯ææé£æ ¼ãé¢è²ãæ¹åçé
- èªå¨çææå½±å¸ç½²åï¼Unsplash è¦æ±ï¼
3. 6 ç§çæ£ä¸åç翻页å¨ç»
- Fadeï¼çº¯éæåº¦æ·¡å ¥æ·¡åº
- Slideï¼æ°´å¹³æ»å¨ï¼translateXï¼
- Cinematicï¼ç¼©æ¾+模ç³+éæåº¦ï¼çµå½±æï¼
- Cutï¼ç¬é´åæ¢ï¼æ è¿æ¸¡ï¼
- Flipï¼3D 翻转ï¼rotateYï¼
- Zoomï¼ä¸å¿ç¼©æ¾èç¦
4. é 徿¥æºåé
- Unsplashï¼çå®æå½±ç §çï¼Editorial Photo / Kinfolk 飿 ¼çï¼
- ZMark AIï¼AI çææå¾ï¼å¡é 2.5D / 红é»ç½ç§æ / 3D 渲æçï¼
ð 宿´å·¥ä½æµç¨
ç¨æ·è¾å
¥å
容/URL/é³è§é¢é¾æ¥/æ¬å°æä»¶
â
[é¶æ®µé¶] è¾å
¥ç±»åæ£æµä¸é¢å¤ç
âââ çº¯ææ¬ â ç´æ¥è¿å
¥é¶æ®µä¸
âââ ç½é¡µ URL â fetch_webpage.py æåæ£æ â è¿å
¥é¶æ®µä¸
âââ YouTube URL â transcribe_audio.py ä¸è½½+è½¬å½ â è¿å
¥é¶æ®µä¸
âââ å°å®å® URL â transcribe_audio.py ä¸è½½+è½¬å½ â è¿å
¥é¶æ®µä¸
âââ é³é¢ç´é¾/æä»¶ â transcribe_audio.py è½¬å½ â è¿å
¥é¶æ®µä¸
âââ è½¬å½æ¨¡å¼éæ©ï¼AskUserQuestionï¼
âââ local æ¬å° MLX-Whisperï¼å
è´¹ï¼æ¨è Apple Siliconï¼
âââ api OpenAI Whisper APIï¼$0.006/åéï¼å¿«éï¼
âââ gemini Gemini Flash APIï¼~$0.001/åéï¼æå¿«ï¼
â
[é¶æ®µä¸] å
容解æä¸å¤§çº²çæ
âââ æåæ é¢ã坿 é¢
âââ è¯å«å
容类åï¼æ¼è®²/æç¨/æ¥å/æ
äº/æ°æ®å±ç¤ºï¼
âââ æåå¹»ç¯ç页é¢
âââ çæé¢è§å¤§çº²ï¼å±ç¤ºç»ç¨æ·ç¡®è®¤ï¼
â
[é¶æ®µäº] 飿 ¼éæ©ï¼ç´æ¥å±ç¤º + ç¨æ·è¾å
¥ï¼
â
âââ ç¬¬ä¸æ¥ï¼å¨ææ¬ä¸å±ç¤ºå®æ´é£æ ¼å表ï¼17ç§ï¼
â âââ è¡¨æ ¼å½¢å¼ï¼å
å«ç¼å·(A1-E2)ãåç§°ãç¹å¾ãéç¨åºæ¯
â
âââ ç¬¬äºæ¥ï¼AskUserQuestion è®©ç¨æ·éæ©
âââ [æºè½æ¨è飿 ¼] â æ¨è
âââ A1 TED æ¼è®²
âââ D2 Dark Mode
âââ Other â è¾å
¥å
¶ä»é£æ ¼ç¼å·æåç§°
â
[é¶æ®µä¸] 详ç»é
ç½®ï¼AskUserQuestion - å¤é䏿¬¡å®æï¼
â
âââ 3.1 页æ°å¯åº¦
â âââ S1 ç²¾ç®çï¼5-8 页ï¼- å¿«éæ¦è§ãçµæ¢¯æ¼è®²
â âââ S2 æ åçï¼10-12 页ï¼- å¸¸è§æ¼ç¤º â é»è®¤
â âââ S3 详ç»çï¼15-20 页ï¼- 宿´åäºã深度å享
â
âââ 3.2 é
徿¹æ¡ï¼â
æéè¦ï¼å¿
须询é®ï¼
â â
â âââ éè¦é
å¾
â â âââ P1 Unsplash é«è´¨éç
§ç â æ¨è
â â â âââ èªå¨æç´¢å¹é
å
容ï¼å«æå½±å¸ç½²å
â â âââ P2 AI çææå¾
â â â âââ æ ¹æ® PPT 飿 ¼èªå¨çæå¹é
æå¾
â â âââ P3 æ··åæ¹æ¡
â â â âââ å°é¢/éå¥ç¨ç
§çï¼å
容页ç¨å¾æ
â â âââ P4 Excalidraw ææ¯å¾è¡¨ â ææ¯PPTæ¨è
â â âââ èªå¨çææ¶æå¾/æµç¨å¾/ç³»ç»å¾ï¼è¾åºä¸ºSVG
â â
â âââ ä¸éè¦é
å¾ï¼çº¯æå/å¾ç¤ºæ¹æ¡ï¼
â âââ N1 Iconify 徿 æ¹æ¡ â æ¨è
â â âââ æ¯é¡µé
主é¢å¾æ ï¼è§è§ä¸°å¯åº¦è¶³å¤
â âââ N2 ä¿¡æ¯å¾è¡¨æ¹æ¡
â â âââ æµç¨å¾/æ¶é´çº¿/å
³ç³»å¾èªå¨çæ
â âââ N3 å ä½è£
é¥°æ¹æ¡
â â âââ è²å/线æ¡/å½¢ç¶è£
饰ï¼ç°ä»£æå¼º
â âââ N4 纯æåæç
â âââ æç®é£æ ¼ï¼å®å
¨ä¾èµæçååä½
â
âââ 3.3 翻页å¨ç»ï¼å¯éï¼æé»è®¤å¼ï¼
âââ Fadeï¼æ·¡å
¥æ·¡åºï¼â é»è®¤
âââ Cinematicï¼çµå½±æï¼- éå TED/åäºé£æ ¼
âââ Zoomï¼ç¼©æ¾èç¦ï¼- éåç§æ/æ°æ®é£æ ¼
âââ Slideï¼æ°´å¹³æ»å¨ï¼- éåæè²/æç¨é£æ ¼
âââ Flipï¼3D 翻转ï¼- éååæ/èºæ¯é£æ ¼
âââ Cutï¼ç¬é´åæ¢ï¼- éå Brutalist/é«èå¥
â
[é¶æ®µå] é
å¾è·å/çæï¼â v5.2 æºè½ä¼å
级ï¼
â
âââ ä¼å
级 1ï¼åæé
å¾ â é¶ææ¬ãæä½³å¹é
â âââ ç½é¡µæåæ¶å·²èªå¨ä¸è½½å° ~/Desktop/ppt_images/
â âââ ç´æ¥ä½¿ç¨ï¼æ éé¢å¤è¯·æ±
â
âââ ä¼å
级 2ï¼Unsplash ç
§ç
â âââ åææ 徿¶ä½¿ç¨ï¼fetch_unsplash.py èªå¨æç´¢
â
âââ ä¼å
级 3ï¼AI çææå¾
â âââ generate_images.pyï¼éè¦ ZENMUX_API_KEY
â
âââ ä¼å
级 4ï¼Excalidraw ææ¯å¾è¡¨
â âââ ææ¯å
容èªå¨çææ¶æå¾/æµç¨å¾
â
âââ ä¼å
级 5ï¼Iconify 徿
âââ å§ç»ä½ä¸ºè¾
å©è§è§å
ç´
â âââ èªå¨è¯å«ææ¯å
容页é¢ï¼æ¶æ/æµç¨/ç³»ç»ï¼
â âââ è°ç¨ excalidraw skill çæ .excalidraw JSON
â âââ ä½¿ç¨ excalidraw_to_svg.py 转æ¢ä¸º SVG
â âââ SVG ç´æ¥åµå
¥ HTMLï¼æ base64 data URIï¼
âââ 徿 æ¹æ¡ â Iconify èªå¨å¹é
主é¢å¾æ
âââ è¿åè§è§èµæºæ å°è¡¨
â
[é¶æ®µäº] HTML çæ
âââ å 载对åºé£æ ¼æ¨¡æ¿ï¼templates/ï¼
âââ æå
¥è§è§èµæºï¼å¾ç/徿 /å¾è¡¨ï¼
âââ æ·»å åç«¯äº¤äºæ§å¶
â âââ 6 ç§ç¿»é¡µå¨ç»
â âââ èªå¨ææ¾ï¼æ
¢/ä¸/å¿«ï¼
â âââ 导èªç¹ + é®ç + 触æ¸
âââ çæå®æ´ HTML æä»¶
â
[é¶æ®µå
] è¾åºä¸é¢è§
âââ ä¿åå°æ¡é¢ï¼~/Desktop/ï¼
âââ å±ç¤ºå¤§çº²æè¦
âââ 询é®ä¿®æ¹æè§ï¼å¯éæ°éæ©é£æ ¼/é
å¾/页æ°ï¼
â
[é¶æ®µä¸] è§é¢å¯¼åºï¼å¯éï¼AskUserQuestion 询é®ï¼
â
âââ V1 导åºä¸ºè§é¢ â æ¨èï¼å享/åå¸åºæ¯ï¼
â âââ éæ©é
鳿å¡
â â âââ Edge TTSï¼å
è´¹ï¼16ç§ä¸æè¯é³ï¼
â â âââ OpenAI TTSï¼$0.015/åéï¼é«è´¨éï¼
â âââ éæ©è¯é³é£æ ¼
â â âââ äºå¥ï¼ç·å£°ï¼æ°é»ææ¥ï¼â é»è®¤
â â âââ ææï¼å¥³å£°ï¼èªç¶äº²åï¼
â â âââ å
¶ä»è¯é³...
â âââ èªå¨çæ/ç¼è¾è®²è§£æå
â âââ ppt_to_video.py 转æ¢
â âââ è¾åº MP4ï¼åç®å½ï¼
â
âââ V2 è·³è¿ï¼ä»
ä¿ç HTMLï¼
ð§ AskUserQuestion 宿´é 置模æ¿
é¶æ®µäºï¼é£æ ¼éæ©ï¼ç´æ¥å±ç¤º + ç¨æ·è¾å ¥ï¼
éè¦ï¼å 卿æ¬ä¸å±ç¤ºå®æ´é£æ ¼å表ï¼ç¶åè®©ç¨æ·ç´æ¥è¾å ¥éæ©ã
ç¬¬ä¸æ¥ï¼å±ç¤ºå®æ´é£æ ¼å表
å¨å夿æ¬ä¸ç´æ¥å±ç¤ºææ 17 ç§é£æ ¼ï¼
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â ð¨ 宿´é£æ ¼å表 (17ç§) â 请è¾å
¥ç¼å·æåç§°éæ© â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ¤
â Classic/Professional ç»å
¸ä¸ä¸ â
â âââ A1 TED æ¼è®² â åäºæ¼è®² æ·±è²èæ¯+大å¾overlay â
â âââ A2 Apple Keynote â 产ååå¸ æç®ç½åº+è¶
大çç½ â
â âââ A3 Typical PPT å塿±æ¥ æ·±è+æµ
ç°æ 忍¡æ¿ â
â âââ A4 Gamma åä¸è·¯æ¼ ç°ä»£å¡ç+åè§ â
â âââ A5 Consulting æç¥å¨è¯¢ æ·±è+é+æ°æ®é©±å¨ â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ¤
â Editorial/Publishing ç¼è¾åºç â
â âââ B1 Editorial åçæ
äº æå¿æç+衬线åä½ â
â âââ B2 Swiss 设计ä½å ä¸¥æ ¼ç½æ ¼+红è²è²å¸¦ â
â âââ B3 Newspaper æ°é»èµè®¯ æ¥çº¸çå¼+夿 æå â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ¤
â Design/Art è®¾è®¡èºæ¯ â
â âââ C1 Bauhaus èºæ¯æè² å ä½è²å+红é»èä¸åè² â
â âââ C2 Kinfolk çæ´»æ¹å¼ è«å
°è¿ªè²è°+è¶çè´¨æ â
â âââ C3 Muji æç®åç ç½ç°ä¸ºä¸»+è¶
ç»çº¿æ¡ â
â âââ C4 Brutalist å
é设计 ç²ç·å¤§å+é«å¯¹æ¯ â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ¤
â Tech/Future ç§ææªæ¥ â
â âââ D1 Neo-Tokyo â ç§æäº§å éè¹ç²+é+æé»åº+æ
éèºæ¯ â
â âââ D2 Dark Mode â å¼åå·¥å
· æ·±ç°åº+å·è强è°+ç®æ´è¾¹æ¡ â
â âââ D3 红é»ç½ç§æ å½äº§ç§æ ä¸¥æ ¼ä¸è²+çµè·¯é£ â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ¤
â Education/Creative æè²åæ â
â âââ E1 å¡é 2.5D å¿ç«¥æè² æå¹³é´å½±+å¤å½©å润 â
â âââ E2 Education â å¨çº¿è¯¾ç¨ è²å½©ç¼ç +äºå¨æ â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
ð¡ æ ¹æ®æ¨çå
容类åã{content_type}ãï¼æ¨èï¼{recommended_style}
ç¬¬äºæ¥ï¼ç¨æ·éæ©ï¼AskUserQuestion + Other è¾å ¥ï¼
{
"questions": [{
"question": "è¯·éæ©è§è§é£æ ¼ï¼å¯è¾å
¥ç¼å·å¦ A1/D2 æå®æ´åç§°ï¼",
"header": "飿 ¼éæ©",
"multiSelect": false,
"options": [
{"label": "[æ¨è飿 ¼] â æ¨è", "description": "[æ¨èçç±]"},
{"label": "A1 TED æ¼è®²", "description": "æ·±è²èæ¯+大å¾overlayï¼åäºæ¼è®²"},
{"label": "D2 Dark Mode", "description": "æ·±ç°åº+å·è强è°è²ï¼å¼åè
å·¥å
·"},
{"label": "Other â è¾å
¥å
¶ä»é£æ ¼", "description": "è¾å
¥ç¼å·(A1-E2)æåç§°ï¼å¦ï¼A3ãC2 KinfolkãNeo-Tokyo"}
]
}]
}
ç¨æ·å¯è½è¾å ¥çæ ¼å¼ï¼
- ç¼å·ï¼
A1ãD2ãE1 - åç§°ï¼
TED æ¼è®²ãDark Modeãå¡é 2.5D - è±æåï¼
Neo-TokyoãEditorialãBauhaus
飿 ¼æºè½æ¨èæ å°
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â ð¨ 宿´é£æ ¼å表 (17ç§) â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ¤
â Classic/Professional ç»å
¸ä¸ä¸ â
â âââ A1 TED æ¼è®² â åäºæ¼è®² æ·±è²èæ¯+大å¾overlay â
â âââ A2 Apple Keynote â 产ååå¸ æç®ç½åº+è¶
大çç½ â
â âââ A3 Typical PPT å塿±æ¥ æ·±è+æµ
ç°æ 忍¡æ¿ â
â âââ A4 Gamma åä¸è·¯æ¼ ç°ä»£å¡ç+åè§ â
â âââ A5 Consulting æç¥å¨è¯¢ æ·±è+é+æ°æ®é©±å¨ â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ¤
â Editorial/Publishing ç¼è¾åºç â
â âââ B1 Editorial åçæ
äº æå¿æç+衬线åä½ â
â âââ B2 Swiss 设计ä½å ä¸¥æ ¼ç½æ ¼+红è²è²å¸¦ â
â âââ B3 Newspaper æ°é»èµè®¯ æ¥çº¸çå¼+夿 æå â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ¤
â Design/Art è®¾è®¡èºæ¯ â
â âââ C1 Bauhaus èºæ¯æè² å ä½è²å+红é»èä¸åè² â
â âââ C2 Kinfolk çæ´»æ¹å¼ è«å
°è¿ªè²è°+è¶çè´¨æ â
â âââ C3 Muji æç®åç ç½ç°ä¸ºä¸»+è¶
ç»çº¿æ¡ â
â âââ C4 Brutalist å
é设计 ç²ç·å¤§å+é«å¯¹æ¯ â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ¤
â Tech/Future ç§ææªæ¥ â
â âââ D1 Neo-Tokyo â ç§æäº§å éè¹ç²+é+æé»åº+æ
éèºæ¯ â
â âââ D2 Dark Mode â å¼åå·¥å
· æ·±ç°åº+å·è强è°+ç®æ´è¾¹æ¡ â
â âââ D3 红é»ç½ç§æ å½äº§ç§æ ä¸¥æ ¼ä¸è²+çµè·¯é£ â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ¤
â Education/Creative æè²åæ â
â âââ E1 å¡é 2.5D å¿ç«¥æè² æå¹³é´å½±+å¤å½©å润 â
â âââ E2 Education â å¨çº¿è¯¾ç¨ è²å½©ç¼ç +äºå¨æ â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
é¶æ®µä¸ï¼è¯¦ç»é ç½®
{
"questions": [
{
"question": "叿çæå¤å°é¡µçæ¼ç¤ºæç¨¿ï¼",
"header": "页æ°å¯åº¦",
"multiSelect": false,
"options": [
{"label": "ç²¾ç®ç (5-8 页)", "description": "æ ¸å¿è§ç¹æç¼ï¼éåå¿«éå享"},
{"label": "æ åç (10-12 页)", "description": "宿´åäºï¼éåæ¼è®²æ±æ¥"},
{"label": "详ç»ç (15-20 页)", "description": "深度解读ï¼éå宿´å±ç¤º"}
]
},
{
"question": "æ¯å¦éè¦é
å¾ï¼ï¼éè¦ï¼",
"header": "é
徿¹æ¡",
"multiSelect": false,
"options": [
{"label": "Unsplash é«è´¨éç
§ç", "description": "èªå¨æç´¢å¹é
å
容çä¸ä¸ç
§ç"},
{"label": "AI çææå¾", "description": "æ ¹æ®é£æ ¼èªå¨çæå¹é
æå¾"},
{"label": "Excalidraw ææ¯å¾è¡¨", "description": "èªå¨çææ¶æå¾/æµç¨å¾/ç³»ç»å¾ï¼ææ¯PPTæ¨è"},
{"label": "Iconify 徿 æ¹æ¡", "description": "æ¯é¡µé
主é¢å¾æ ï¼æ éçå¾
"},
{"label": "纯æåæç", "description": "æç®é£æ ¼ï¼å®å
¨ä¾èµæç"}
]
},
{
"question": "翻页å¨ç»å好ï¼",
"header": "å¨ç»ææ",
"multiSelect": false,
"options": [
{"label": "Fade æ·¡å
¥æ·¡åº", "description": "ç®æ´ä¼é
ï¼éå大夿°åºæ¯"},
{"label": "Cinematic çµå½±æ", "description": "缩æ¾+模ç³ï¼åäºæå¼º"},
{"label": "Zoom 缩æ¾èç¦", "description": "è§è§å²å»å强"},
{"label": "Slide æ°´å¹³æ»å¨", "description": "ç»å
¸ç¿»é¡µæ"}
]
}
]
}
ð¯ å 容类å â 飿 ¼æ¨èæ å°
| å 容类å | æ¨è飿 ¼ | å¤é飿 ¼ | æ¨èé å¾ |
|---|---|---|---|
| æ¼è®²/åäº | A1 TED æ¼è®² | D1 Neo-Tokyo, B1 Editorial | P1 Unsplash |
| 产ååå¸ | A2 Apple Keynote | A4 Gamma | P1 Unsplash |
| å塿±æ¥ | A3 Typical PPT | A5 Consulting | N1 徿 |
| æ°æ®æ¥å | A5 Consulting | B3 Newspaper | N2 ä¿¡æ¯å¾è¡¨ |
| ç§æä¸»é¢ | D1 Neo-Tokyo | D2 Dark Mode, D3 红é»ç½ç§æ | P4 Excalidraw |
| å¼åè /å·¥å · | D2 Dark Mode | D1 Neo-Tokyo | P4 Excalidraw |
| æ¶æè®¾è®¡ | A5 Consulting | D2 Dark Mode | P4 Excalidraw |
| æè²/æç¨ | E2 Education | E1 å¡é 2.5D | P1/P2 |
| åçæ äº | B1 Editorial | C2 Kinfolk | |
| çæ´»æ¹å¼ | C2 Kinfolk | C3 Muji | |
| èºæ¯åæ | C1 Bauhaus | C4 Brutalist | |
| æ°é»èµè®¯ | B3 Newspaper | B2 Swiss | |
| æç®ä¸»ä¹ | C3 Muji | A2 Apple Keynote |
ð¼ï¸ é 徿¹æ¡è¯¦ç»è¯´æ
éè¦é å¾
| æ¹æ¡ | æ¥æº | éç¨é£æ ¼ | ç¹ç¹ |
|---|---|---|---|
| P1 Unsplash | ç宿影 | A1/A2/B1/B2/B3/C2 | é«è´¨éå è´¹ãéç½²å |
| P2 AI çæ | ZMark AI | D1/D3/E1/C1/C4 | 飿 ¼å¹é 度é«ãçææ¶é´è¾é¿ |
| P3 æ··åæ¹æ¡ | 两è ç»å | å ¨é¨ | çµæ´»æ§æé« |
| P4 Excalidraw | èªå¨çæ SVG | D1/D2/D3/A5/E2 | ææ¯å¾è¡¨ãæ¶æå¾ãæµç¨å¾ |
Excalidraw ææ¯å¾è¡¨æ¹æ¡ (P4)
éç¨åºæ¯ï¼ææ¯æ¼ç¤ºãæ¶ææ±æ¥ãç³»ç»è®¾è®¡ãå¼åææ¡£
工使µç¨ï¼
ææ¯å
容页é¢
â
LLM è¯å«å¾è¡¨ç±»åï¼æ¶æå¾/æµç¨å¾/æ¶åºå¾/ERå¾çï¼
â
è°ç¨ excalidraw skill çæ .excalidraw JSON
â
ä½¿ç¨ excalidraw_to_svg.py 转æ¢ä¸º SVG
â
SVG ç´æ¥åµå
¥ HTMLï¼<svg> æ ç¾ï¼æ base64 data URI
æ¯æçå¾è¡¨ç±»åï¼
| å¾è¡¨ç±»å | 触åå ³é®è¯ | å ç´ ç»å |
|---|---|---|
| ç³»ç»æ¶æå¾ | æ¶æãç³»ç»ãå¾®æå¡ | ç©å½¢+ç®å¤´+æ°æ®åºå¾æ |
| æ°æ®æµç¨å¾ | æµç¨ãæ°æ®æµã管é | ç©å½¢+ç®å¤´+å¤çèç¹ |
| æ¶åºå¾ | æ¶åºã交äºãè°ç¨ | ç©å½¢+è线ç®å¤´ |
| ER å¾ | å®ä½ãå ³ç³»ãæ°æ®åº | ç©å½¢+è±å½¢+è¿æ¥çº¿ |
| ç½ç»ææ | ç½ç»ãææãèç¹ | æ¤å+ç©å½¢+è¿çº¿ |
| ç»ä»¶å¾ | ç»ä»¶ã模åãä¾èµ | ç©å½¢+ä¾èµç®å¤´ |
èæ¬ç¨æ³ï¼
# åºæ¬è½¬æ¢
python3 scripts/excalidraw_to_svg.py input.excalidraw -o output.svg
# è¾åºä¸º base64 data URIï¼éåç´æ¥åµå
¥ HTMLï¼
python3 scripts/excalidraw_to_svg.py input.excalidraw --base64
# è¾åºä¸º HTML img æ ç¾
python3 scripts/excalidraw_to_svg.py input.excalidraw --embed
# æè²ä¸»é¢
python3 scripts/excalidraw_to_svg.py input.excalidraw --theme dark -o output.svg
HTML åµå ¥æ¹å¼ï¼
<!-- æ¹å¼1ï¼ç´æ¥åµå
¥ SVGï¼æ¨èï¼å¯ç¼©æ¾ï¼ -->
<div class="diagram-container">
<svg viewBox="0 0 800 600">
<!-- SVG å
容 -->
</svg>
</div>
<!-- æ¹å¼2ï¼base64 data URI -->
<img src="data:image/svg+xml;base64,..." alt="ç³»ç»æ¶æå¾">
<!-- æ¹å¼3ï¼å¤é¨æä»¶å¼ç¨ -->
<img src="diagrams/architecture.svg" alt="ç³»ç»æ¶æå¾">
èªå¨è¯å«è§åï¼
LLM 伿 ¹æ®é¡µé¢å 容èªå¨å¤ææ¯å¦éè¦çæææ¯å¾è¡¨ï¼
| å 容ç¹å¾ | å¾è¡¨ç±»å |
|---|---|
| å å«”æ¶æ”ã”ç»ä»¶”ã”æå¡” | ç³»ç»æ¶æå¾ |
| å å«”æµç¨”ã”æ¥éª¤”ã”â” | æµç¨å¾ |
| å å«”æ°æ®åº”ã”表”ã”åæ®µ” | ER å¾ |
| å å«”API”ã”请汔ã”å应 | æ¶åºå¾ |
| å 嫔模å”ã”ä¾èµ”ã”import” | ç»ä»¶ä¾èµå¾ |
ä¸éè¦é å¾
| æ¹æ¡ | å®ç°æ¹å¼ | éç¨é£æ ¼ | ç¹ç¹ |
|---|---|---|---|
| N1 徿 æ¹æ¡ | Iconify 徿 åº | å ¨é¨ | çæå¿«éãè§è§ä¸°å¯ |
| N2 ä¿¡æ¯å¾è¡¨ | èªå¨çææµç¨å¾/æ¶é´çº¿ | A3/A5/E2 | éåæ°æ®åæµç¨ |
| N3 å ä½è£ 饰 | CSS è²å/çº¿æ¡ | C1/C3/C4 | ç°ä»£æå¼º |
| N4 纯æå+徿 | æç+åä½+è½»é徿 | A2/C3/Muji | æç®ä½ä¸åè° |
éè¦ï¼v5.1ï¼ï¼å³ä½¿éæ© N4 纯æåæ¹æ¡ï¼ä¹åºé»è®¤æ·»å è½»é级 Iconify 徿 è£ é¥°ï¼é¿å 页é¢è¿äºåè°ã徿 åºï¼
- æ¾ç½®å¨æ 颿ä½ä¸ºè§è§éç¹
- ç¨äºå表项åçè£ é¥°
- éæ©ä¸å 容主é¢ç¸å ³ç徿
- ä¿æå å¶ï¼æ¯é¡µ 1-3 ä¸ªå¾æ å³å¯
Iconify 徿 èªå¨å¹é è§å
| 页é¢ç±»å | æç´¢å ³é®è¯ç¤ºä¾ |
|---|---|
| å°é¢é¡µ | rocket, star, lightbulb |
| æ¦å¿µä»ç» | brain, idea, puzzle |
| æ°æ®å±ç¤º | chart, graph, analytics |
| æµç¨æ¥éª¤ | arrow-right, flow, process |
| é®é¢/ææ | warning, alert, question |
| è§£å³æ¹æ¡ | check, shield, tool |
| éå¥é¡µ | quote, message, speech |
| ç»å°¾é¡µ | heart, thumbs-up, celebrate |
ð¨ 飿 ¼ç³»ç»ï¼16+ ç§ï¼
飿 ¼å¿«ééæ©è¡¨
| ç¼å· | 飿 ¼åç§° | é è²ç¹å¾ | éç¨åºæ¯ |
|---|---|---|---|
| Classic/Professional | |||
| A1 | TED æ¼è®² | 大å¾+ç²¾ç®æåãæ·±è² overlay | åäºãæ¼è®² |
| A2 | Apple Keynote | æç®ç½åºã大æ é¢ãçç½>60% | 产ååå¸ |
| A3 | Typical PPT | æ·±è+æµ ç°ãæ 忍¡æ¿ | å塿±æ¥ |
| A4 | Gamma | ç°ä»£å¡çãåè§ãæåé´å½± | åä¸è·¯æ¼ |
| A5 | Consulting | æ·±è+éãçè·æå½±ãæ°æ®é©±å¨ | æç¥å¨è¯¢ |
| Editorial/Publishing | |||
| B1 | Editorial | æå¿æçã衬线åä½ãåæ | åçæ äº |
| B2 | Swiss Style | ç½æ ¼ç³»ç»ãæ 衬线ãä¸å¯¹ç§° | 设计ä½å |
| B3 | Newspaper | æ¥çº¸çå¼ãé»ç½ç°+åç¹ç¼ | æ°é»èµè®¯ |
| Design/Art | |||
| C1 | Bauhaus | å ä½è²åã红é»èä¸åè² | èºæ¯æè² |
| C2 | Kinfolk | 温æç±³è²/æ£/æ©æ¦ãè¶çè´¨æ | çæ´»æ¹å¼ |
| C3 | Muji | ç½ç°ä¸ºä¸»ãè¶ ç»çº¿æ¡ãæ¥å¼ç®çº¦ | æç®åç |
| C4 | Brutalist | åå§ç²ç·ã大åä½ãé«å¯¹æ¯ | å é设计 |
| Tech/Future | |||
| D1 | Neo-Tokyo | éè¹ç´«/ç²ãæé»åºãæ éèºæ¯ | ç§æäº§å |
| D2 | Dark Mode | æ·±ç°åºãå·è强è°è²ãç®æ´è¾¹æ¡ | å¼åè å·¥å · |
| D3 | 红é»ç½ç§æ | #E63946红+纯é»+çº¯ç½ | å½äº§ç§æ |
| Education/Creative | |||
| E1 | å¡é 2.5D | æå¹³+é´å½±ãå¤å½©ãåæ¶¦å¾æ | å¿ç«¥æè² |
| E2 | Education | è²å½©ç¼ç ãäºå¨å ç´ æç¤º | å¨çº¿è¯¾ç¨ |
ð¨ 飿 ¼ CSS åé宿´å®ä¹
A1 – TED æ¼è®²é£æ ¼
:root {
--primary: #E62B1E;
--primary-light: #FF4136;
--secondary: #2C2C2C;
--accent: #FFFFFF;
--bg-page: #1A1A1A;
--bg-card: #2C2C2C;
--bg-section: #333333;
--text-heading: #FFFFFF;
--text-body: #E0E0E0;
--text-muted: #999999;
--border: #444444;
}
ç¹å¾ï¼æ·±è²èæ¯ãå¤§å°ºå¯¸å ¨å±å¾çãoverlay åéæé»è²å å æåãåå·å·¨å¤§ï¼Hero 80px+ï¼ãå页信æ¯å¯åº¦æä½ï¼1 ä¸ªæ ¸å¿è§ç¹ï¼
A2 – Apple Keynote 飿 ¼
:root {
--primary: #1D1D1F;
--primary-light: #424245;
--secondary: #6E6E73;
--accent: #0071E3;
--bg-page: #FFFFFF;
--bg-card: #FFFFFF;
--bg-section: #F5F5F7;
--text-heading: #1D1D1F;
--text-body: #424245;
--text-muted: #86868B;
--border: #D2D2D7;
}
ç¹å¾ï¼æç®ç½åºãSan Francisco å使°è´¨ãçç½ >60%ã产åå¾å± ä¸ãè¶ å¤§æ é¢ï¼56px+ï¼ãå 乿 è¾¹æ¡
A3 – Typical PPT 飿 ¼
:root {
--primary: #2B579A;
--primary-light: #4472C4;
--secondary: #5B9BD5;
--accent: #FFC000;
--bg-page: #F0F4FA;
--bg-card: #FFFFFF;
--bg-section: #E8EEF7;
--text-heading: #1F3864;
--text-body: #404040;
--text-muted: #808080;
--border: #D6DCE4;
}
ç¹å¾ï¼æ·±è(#2B579A)+æµ ç°èæ¯ãæ åæ é¢+坿 é¢+æ£æå±æ¬¡ã项ç®ç¬¦å·å表ã页ç页èãæ åå¸å±
A4 – Gamma 飿 ¼
:root {
--primary: #0EA5E9;
--primary-light: #38BDF8;
--secondary: #00CEC9;
--accent: #F59E0B;
--bg-page: #FAFEFF;
--bg-card: #FFFFFF;
--bg-section: #F0F9FF;
--text-heading: #2D3436;
--text-body: #545454;
--text-muted: #A0A0A0;
--border: #ECECEC;
--card-radius: 16px;
--card-shadow: 0 2px 12px rgba(14,165,233,0.08);
}
ç¹å¾ï¼ç°ä»£å¡çå¼å¸å±ãåè§ 16pxãæåæå½±ã天èè²(#0EA5E9)强è°ãé度çç½ãåä¸è·¯æ¼æ
A5 – Consulting 飿 ¼
:root {
--primary: #1E3A5F;
--primary-light: #2D5F8A;
--secondary: #4A90A4;
--accent: #D4A843;
--accent-warm: #C17F24;
--bg-page: #FAFBFC;
--bg-card: #FFFFFF;
--bg-section: #F0F4F8;
--text-heading: #0F2137;
--text-body: #3A4F66;
--text-muted: #7A8FA3;
--border: #E2E8F0;
}
ç¹å¾ï¼æ·±è+éãæ°æ®å¡çå¯éãçè·æå½±å¾è¡¨ãæ¡æ¶æ¨¡åå¾ãå¤åå¹¶æãKPI 大æ°å
B1 – Editorial æå¿é£æ ¼
:root {
--primary: #1A1A1A;
--primary-light: #333333;
--secondary: #666666;
--accent: #C0392B;
--bg-page: #FEFEFE;
--bg-card: #FFFFFF;
--bg-section: #F5F5F0;
--text-heading: #1A1A1A;
--text-body: #333333;
--text-muted: #888888;
--border: #E0E0E0;
--font-heading: 'Playfair Display', 'Noto Serif SC', Georgia, serif;
--font-body: 'Source Sans Pro', 'Noto Sans SC', sans-serif;
}
ç¹å¾ï¼è¡¬çº¿æ é¢+æ è¡¬çº¿æ£æãåæ æçã大é¢ç§¯çç½ãpull-quote 大å¼ç¨ãé»ç½æå½±é å¾ãé¦å䏿²
B2 – Swiss Style 飿 ¼
:root {
--primary: #D0021B;
--primary-light: #E63946;
--secondary: #2C2C2C;
--accent: #D0021B;
--bg-page: #FFFFFF;
--bg-card: #FFFFFF;
--bg-section: #F2F2F2;
--text-heading: #2C2C2C;
--text-body: #404040;
--text-muted: #808080;
--border: #CCCCCC;
--font-heading: 'Helvetica Neue', 'Arial', sans-serif;
}
ç¹å¾ï¼ä¸¥æ ¼ç½æ ¼ç³»ç»ãHelvetica æ 衬线ã红è²è²å¸¦åå²ãä¸å¯¹ç§°å¸å±ãä¿¡æ¯å±æ¬¡åæ
B3 – Newspaper 飿 ¼
:root {
--primary: #1A1A1A;
--primary-light: #333333;
--secondary: #555555;
--accent: #B22222;
--bg-page: #F5F1EB;
--bg-card: #FFFDF7;
--bg-section: #F0ECE3;
--text-heading: #1A1A1A;
--text-body: #333333;
--text-muted: #777777;
--border: #D4CFC5;
--font-heading: 'Playfair Display', 'Times New Roman', serif;
}
ç¹å¾ï¼æ¥çº¸çå¼ã夿 æåãæ¥å¤´å¤§æ é¢ãåå²çº¿ãé»ç½ç°+åè²ç¹ç¼ãå¼ç¨æ¡
C1 – Bauhaus 飿 ¼
:root {
--primary: #E63B2E;
--primary-light: #FF5A4F;
--secondary: #2B4FA2;
--accent: #F5C300;
--bg-page: #FFFFFF;
--bg-card: #FFFFFF;
--bg-section: #F7F7F7;
--text-heading: #1A1A1A;
--text-body: #333333;
--text-muted: #888888;
--border: #E0E0E0;
}
ç¹å¾ï¼å ä½è²åï¼çº¢é»èä¸åè²ï¼ãç²çº¿æ¡ç½æ ¼ãä¸è§åè²åæ¼æ¥ãçæ§ææ
C2 – Kinfolk 飿 ¼
:root {
--primary: #9B7B5E;
--primary-light: #B8A08A;
--secondary: #8FA387;
--accent: #D4AAA0;
--bg-page: #FAF7F2;
--bg-card: #FFFCF7;
--bg-section: #F3EDE5;
--text-heading: #5A4A3A;
--text-body: #6B5E52;
--text-muted: #A09585;
--border: #E5DDD3;
}
ç¹å¾ï¼è«å °è¿ªè²è°ãèªç¶å 影质æãè¶çé¢ç²æã温æç±³è²/æ£è²/æ©æ¦ã大éå¼å¸çç½
C3 – Muji 飿 ¼
:root {
--primary: #5C5C5C;
--primary-light: #7A7A7A;
--secondary: #8B7355;
--accent: #B8A08A;
--bg-page: #F7F5F0;
--bg-card: #FFFFFF;
--bg-section: #F0EDE8;
--text-heading: #3A3A3A;
--text-body: #5C5C5C;
--text-muted: #999999;
--border: #E5E0D8;
}
ç¹å¾ï¼ç½ç°ä¸ºä¸»ãè¶ ç»çº¿æ¡ï¼0.5pxï¼ãæ¥å¼ç®çº¦ãèªç¶æè´¨çº¹çæç¤ºãæè´çç½
C4 – Brutalist 飿 ¼
:root {
--primary: #000000;
--primary-light: #333333;
--secondary: #555555;
--accent: #FF3D00;
--bg-page: #FFFFFF;
--bg-card: #FFFFFF;
--bg-section: #F0F0F0;
--text-heading: #000000;
--text-body: #333333;
--text-muted: #777777;
--border: #000000;
}
ç¹å¾ï¼å¤§åéºæ»¡ãç²è¾¹æ¡ï¼3px+ï¼ãé«å¯¹æ¯é»ç½ãåå§ç²ç·ãææç”ä¸å®ç¾”æ
D1 – Neo-Tokyo 飿 ¼
:root {
--primary: #FF2D6B;
--primary-light: #FF5A8A;
--secondary: #00B4D8;
--accent: #39FF14;
--bg-page: #0A0A0F;
--bg-card: #141420;
--bg-section: #1A1A2E;
--text-heading: #FFFFFF;
--text-body: #C0C0D0;
--text-muted: #6A6A80;
--border: rgba(255,255,255,0.08);
}
ç¹å¾ï¼æ·±é»åº(#0A0A0F)+éè¹ç²(#FF2D6B)/é(#00B4D8)/绿(#39FF14)ãæ éèºæ¯çº¹çãæ¥å¼æç
D2 – Dark Mode 飿 ¼
:root {
--primary: #3B82F6;
--primary-light: #60A5FA;
--secondary: #64748B;
--accent: #06B6D4;
--bg-page: #0F172A;
--bg-card: #1E293B;
--bg-section: #1E293B;
--text-heading: #F1F5F9;
--text-body: #94A3B8;
--text-muted: #475569;
--border: rgba(148,163,184,0.15);
}
ç¹å¾ï¼æ·±ç°åº(#0F172A)ãå·è(#3B82F6)强è°è²ãç®æ´è¾¹æ¡ã代ç 飿çãç»ç«¯æ
D3 – 红é»ç½ç§æé£æ ¼
:root {
--primary: #E63946;
--primary-light: #FF5A65;
--secondary: #1A1A1A;
--accent: #E63946;
--bg-page: #FFFFFF;
--bg-card: #FFFFFF;
--bg-section: #F5F5F5;
--text-heading: #000000;
--text-body: #1A1A1A;
--text-muted: #808080;
--border: #E0E0E0;
}
ç¹å¾ï¼ä¸¥æ ¼çº¢é»ç½ä¸è²ãå ä½è¿æ¥çº¿ï¼çµè·¯é£ï¼ãçè·è§è§å¾å½¢ãé«å¯¹æ¯
E1 – å¡é 2.5D 飿 ¼
:root {
--primary: #4A90E2;
--primary-light: #6BB5FF;
--secondary: #10B981;
--accent: #F39C12;
--accent-warm: #FFD93D;
--bg-page: #F0F7FF;
--bg-card: #FFFFFF;
--bg-section: #E8F4FD;
--text-heading: #2C3E50;
--text-body: #4A5568;
--text-muted: #A0AEC0;
--border: #D6E8F7;
}
ç¹å¾ï¼æå¹³+æåé´å½±ãè+绿+æ©å¤å½©åè°ãåæ¶¦å¾æ ãQ çè§è²ãçè· 2.5D è§è§
E2 – Education 飿 ¼
:root {
--primary: #2563EB;
--primary-light: #3B82F6;
--secondary: #10B981;
--accent: #F59E0B;
--highlight: #EF4444;
--bg-page: #FFF7ED;
--bg-card: #FFFFFF;
--bg-section: #FEF3C7;
--text-heading: #1E293B;
--text-body: #4B5563;
--text-muted: #9CA3AF;
--border: #FDE68A;
}
ç¹å¾ï¼è²å½©ç¼ç ç¥è¯ç¹ï¼è=æ¦å¿µã绿=æ¡ä¾ãæ©=éç¹ã红=注æï¼ãäºå¨å ç´ æç¤ºãæ¸ æ°å±æ¬¡
ð¼ é å¾ç³»ç»
â v5.2 åæé 徿åï¼é¶ææ¬æ¹æ¡ï¼
æ ¸å¿ç念ï¼ä¼å 使ç¨åæèªå¸¦å¾çï¼é使æ¬ï¼æé«å 容ç¸å ³æ§ã
工使µç¨ï¼
ç½é¡µ URL è¾å
¥
â
fetch_webpage.py --download-images
â
âââ æºè½æå页é¢å¾ç
â âââ è¿æ»¤ï¼å¾æ ã广åã头åãlogo
â âââ è¿æ»¤ï¼å°ºå¯¸è¿å°ï¼<200x150pxï¼
â âââ è¿æ»¤ï¼æä»¶è¿å°ï¼<10KBï¼
â âââ ä¼å
ï¼article åºåå
ãæ alt 屿§ã大尺寸
â
âââ ä¸è½½å°æ¬å°
â âââ ~/Desktop/ppt_images/image_xxx.jpg
â
âââ çææ å°å
³ç³»
âââ {local_path, url, alt, context, priority}
èæ¬ä½¿ç¨ï¼
# æåç½é¡µå¹¶ä¸è½½å¾ç
python3 scripts/fetch_webpage.py "https://example.com/article" \
--download-images \
--image-dir ~/Desktop/ppt_images/ \
-o content.json --pretty
# è¾åºç¤ºä¾
{
"title": "æç« æ é¢",
"slides": [...],
"images": {
"images": [
{
"local_path": "/Users/xxx/Desktop/ppt_images/image_abc123.jpg",
"filename": "image_abc123.jpg",
"url": "https://example.com/photo.jpg",
"alt": "æç« é
å¾æè¿°",
"context": "å¾çå¨å´çæåä¸ä¸æ",
"priority": 15
}
],
"total_found": 8,
"total_downloaded": 5,
"output_dir": "/Users/xxx/Desktop/ppt_images/"
}
}
å¾çä¼å 级è¯åï¼
| æ¡ä»¶ | å å |
|---|---|
| å¨ article åºåå | +10 |
| æ alt 屿§ | +5 |
| 宽度 â¥600px æé«åº¦ â¥400px | +3 |
| æä¸ä¸ææè¿° | +2 |
é å¾éæ©çç¥ï¼v5.2 ä¼åï¼ï¼
1. åæé
å¾ï¼é¶ææ¬ï¼
âââ 妿忿åéå¾ç â ç´æ¥ä½¿ç¨
âââ ä¼ç¹ï¼å
容ç¸å
³æ§å¼ºãæ API ææ¬
2. Unsplashï¼ä½ææ¬ï¼
âââ åææ 徿å¾çä¸è¶³ â æç´¢ Unsplash
âââ ä¼ç¹ï¼é«è´¨éãå
è´¹ï¼50次/å°æ¶ï¼
3. AI çæï¼æææ¬ï¼
âââ éè¦ç¹å®é£æ ¼å¾ç â AI çæ
âââ 缺ç¹ï¼éè¦ API Keyãæè´¹ç¨
4. 徿 è¡¥å
ï¼é¶ææ¬ï¼
âââ å§ç»ä½¿ç¨ Iconify 徿 丰å¯è§è§
âââ ä¼ç¹ï¼å¿«éãå
è´¹ãè§è§ä¸°å¯
é 徿¥æºé项
| ç¼å· | 飿 ¼ | æ¥æº | ç¹å¾ |
|---|---|---|---|
| I1 | æ é å¾ | – | 纯æåæç |
| I2 | Editorial Photo | Unsplash | ç¼è¾é£æ ¼ç §çãé«åè´¨æå½± |
| I3 | Kinfolk æè° | Unsplash | 温æè¶çè´¨æãçæ´»æ¹å¼ |
| I4 | 红é»ç½ç§æ | ZMark AI | é«å¯¹æ¯ç§æé£æå¾ |
| I5 | å¡é 2.5D | ZMark AI | æå¹³å¡éãçè·è§è§ |
| I6 | 3D 渲æ | ZMark AI | ç«ä½æ¸²ææå¾ |
| I7 | æ½è±¡èºæ¯ | ZMark AI | èºæ¯æç» |
Unsplash API éæ
ç¯å¢åé: UNSPLASH_ACCESS_KEYï¼å¿
éï¼
èæ¬: scripts/fetch_unsplash.py
# æç´¢ç
§ç
python3 scripts/fetch_unsplash.py search "business technology" --orientation landscape --count 5
# æ¹é为幻ç¯çè·åé
å¾
python3 scripts/fetch_unsplash.py batch slides.json --style editorial -o images.json
Unsplash 使ç¨è§åï¼
- å¿ é¡»å¨å¾çéè¿æ¾ç¤ºæå½±å¸ç½²å
- ç½²åæ ¼å¼ï¼
Photo by [Name] on Unsplashï¼å«é¾æ¥ï¼ - æ·»å UTM åæ°ï¼
?utm_source=ppt_designer&utm_medium=referral
飿 ¼-æç´¢å ³é®è¯æ å°ï¼
| é å¾é£æ ¼ | Unsplash æç´¢ä¿®é¥°è¯ |
|---|---|
| I2 Editorial Photo | editorial magazine artistic |
| I3 Kinfolk | lifestyle warm film grain cozy |
| TED æ¼è®²é å¾ | dramatic dark cinematic |
| Apple Keynote é å¾ | minimal clean white product |
| Consulting é å¾ | corporate business professional |
| Newspaper é å¾ | documentary journalism photojournalism |
页é¢ç±»åé å¾è§å
| 页é¢ç±»å | æ¯å¦é å¾ | çç¥ |
|---|---|---|
| å°é¢é¡µ | å¿ é¡» | å ¨å±/åå±å¤§å¾ |
| éå¥é¡µ | å¿ é¡» | æ°å´èæ¯å¾ |
| ç»å°¾é¡µ | å¿ é¡» | åç»æ§æ°å´å¾ |
| å 容页ï¼é¿ï¼ | æ¨è | å¾ææ··æ |
| å 容页ï¼çï¼ | å¯é | å°å¾ç¹ç¼ |
| æ°æ®é¡µ | ä¸é å¾ | å¾è¡¨å³è§è§ |
AI é å¾æç¤ºè¯ç³»ç»ï¼ZMarkï¼
ä¿ç v2.4 ç 9 ç§ AI 飿 ¼æç¤ºè¯æ¨¡æ¿ï¼è¯¦è§ scripts/generate_images.pyï¼ã
ð¬ 翻页å¨ç»ç³»ç»ï¼6 ç§çæ£ä¸åçå¨ç»ï¼
å¨ç»ææå®ä¹
æ¯ç§å¨ç»æå®å ¨ä¸åç CSS transition/animationï¼è§è§æææªç¶ä¸åã
1. Fadeï¼æ·¡å ¥æ·¡åºï¼
.transition-fade .slide-leaving {
animation: fadeOut 0.6s ease forwards;
}
.transition-fade .slide-entering {
animation: fadeIn 0.6s ease forwards;
}
@keyframes fadeOut { from { opacity: 1; } to { opacity: 0; } }
@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }
2. Slideï¼æ°´å¹³æ»å¨ï¼
.transition-slide .slide-leaving {
animation: slideOutLeft 0.5s ease forwards;
}
.transition-slide .slide-entering {
animation: slideInRight 0.5s ease forwards;
}
@keyframes slideOutLeft {
from { transform: translateX(0); opacity: 1; }
to { transform: translateX(-100%); opacity: 0; }
}
@keyframes slideInRight {
from { transform: translateX(100%); opacity: 0; }
to { transform: translateX(0); opacity: 1; }
}
3. Cinematicï¼çµå½±æï¼ç¼©æ¾+模ç³+éæåº¦ï¼
.transition-cinematic .slide-leaving {
animation: cinematicOut 0.8s ease forwards;
}
.transition-cinematic .slide-entering {
animation: cinematicIn 0.8s ease forwards;
}
@keyframes cinematicOut {
from { transform: scale(1); opacity: 1; filter: blur(0); }
to { transform: scale(1.15); opacity: 0; filter: blur(8px); }
}
@keyframes cinematicIn {
from { transform: scale(0.8); opacity: 0; filter: blur(8px); }
to { transform: scale(1); opacity: 1; filter: blur(0); }
}
4. Cutï¼ç¬é´åæ¢ï¼
.transition-cut .slide-leaving {
display: none;
}
.transition-cut .slide-entering {
opacity: 1;
}
5. Flipï¼3D 翻转ï¼
.transition-flip .slides-viewport {
perspective: 1200px;
}
.transition-flip .slide-leaving {
animation: flipOut 0.6s ease forwards;
transform-style: preserve-3d;
backface-visibility: hidden;
}
.transition-flip .slide-entering {
animation: flipIn 0.6s ease forwards;
transform-style: preserve-3d;
backface-visibility: hidden;
}
@keyframes flipOut {
from { transform: rotateY(0deg); opacity: 1; }
to { transform: rotateY(-90deg); opacity: 0; }
}
@keyframes flipIn {
from { transform: rotateY(90deg); opacity: 0; }
to { transform: rotateY(0deg); opacity: 1; }
}
6. Zoomï¼ä¸å¿ç¼©æ¾èç¦ï¼
.transition-zoom .slide-leaving {
animation: zoomOut 0.5s ease forwards;
}
.transition-zoom .slide-entering {
animation: zoomIn 0.5s ease forwards;
}
@keyframes zoomOut {
from { transform: scale(1); opacity: 1; }
to { transform: scale(0.3); opacity: 0; }
}
@keyframes zoomIn {
from { transform: scale(2); opacity: 0; }
to { transform: scale(1); opacity: 1; }
}
ç¿»é¡µå¼æ JavaScript
class SlideEngine {
constructor() {
this.slides = document.querySelectorAll('.slide');
this.current = 0;
this.total = this.slides.length;
this.transitioning = false;
this.transitionStyle = localStorage.getItem('ppt-transition') || 'fade';
this.init();
}
init() {
this.slides.forEach((s, i) => {
s.style.display = i === 0 ? '' : 'none';
s.classList.toggle('slide-active', i === 0);
});
this.updateNav();
this.bindKeys();
this.bindTouch();
}
async goTo(index) {
if (index < 0 || index >= this.total || index === this.current || this.transitioning) return;
this.transitioning = true;
const leaving = this.slides[this.current];
const entering = this.slides[index];
const viewport = document.querySelector('.slides-viewport');
// Apply transition class
viewport.className = `slides-viewport transition-${this.transitionStyle}`;
entering.style.display = '';
leaving.classList.add('slide-leaving');
entering.classList.add('slide-entering');
// Wait for animation
const duration = this.getDuration();
await new Promise(r => setTimeout(r, duration));
leaving.style.display = 'none';
leaving.classList.remove('slide-active', 'slide-leaving');
entering.classList.remove('slide-entering');
entering.classList.add('slide-active');
this.current = index;
this.transitioning = false;
this.updateNav();
}
getDuration() {
const durations = { fade: 600, slide: 500, cinematic: 800, cut: 50, flip: 600, zoom: 500 };
return durations[this.transitionStyle] || 600;
}
next() { this.goTo(this.current + 1); }
prev() { this.goTo(this.current - 1); }
setTransition(style) {
this.transitionStyle = style;
localStorage.setItem('ppt-transition', style);
document.querySelectorAll('.style-btn').forEach(btn => {
btn.classList.toggle('active', btn.dataset.style === style);
});
}
bindKeys() {
document.addEventListener('keydown', e => {
if (e.key === 'ArrowRight' || e.key === 'ArrowDown' || e.key === ' ') { e.preventDefault(); this.next(); }
if (e.key === 'ArrowLeft' || e.key === 'ArrowUp') { e.preventDefault(); this.prev(); }
});
}
bindTouch() {
let startX = 0;
document.addEventListener('touchstart', e => { startX = e.touches[0].clientX; });
document.addEventListener('touchend', e => {
const diff = e.changedTouches[0].clientX - startX;
if (Math.abs(diff) > 50) { diff > 0 ? this.prev() : this.next(); }
});
}
updateNav() {
document.querySelectorAll('.nav-dot').forEach((dot, i) => {
dot.classList.toggle('active', i === this.current);
});
const counter = document.querySelector('.slide-counter');
if (counter) counter.textContent = `${this.current + 1} / ${this.total}`;
}
}
// Auto-play controller
class AutoPlayController {
constructor(engine, interval = 5000) {
this.engine = engine;
this.interval = interval;
this.timer = null;
this.isPlaying = false;
}
toggle() { this.isPlaying ? this.stop() : this.start(); }
start() {
if (this.isPlaying) return;
this.isPlaying = true;
this.updateBtn();
this.timer = setInterval(() => {
if (this.engine.current < this.engine.total - 1) this.engine.next();
else this.stop();
}, this.interval);
}
stop() {
this.isPlaying = false;
if (this.timer) { clearInterval(this.timer); this.timer = null; }
this.updateBtn();
}
setSpeed(ms) {
this.interval = ms;
if (this.isPlaying) { this.stop(); this.start(); }
}
updateBtn() {
const btn = document.querySelector('.autoplay-toggle');
if (btn) {
btn.innerHTML = this.isPlaying
? '<span class="iconify" data-icon="ph:pause-circle-bold"></span>'
: '<span class="iconify" data-icon="ph:play-circle-bold"></span>';
}
}
}
æ§å¶é¢æ¿ HTMLï¼v5.1 å¢å¼ºçï¼
åè½ç¹æ§ï¼
- èªå¨ææ¾æé®ï¼ææ¾/æå忢ï¼
- é度æ§å¶ï¼æ ¢/ä¸/å¿«ï¼
- 6 ç§å¨ç»åæ¢æé®
- é¡µç æ¾ç¤º
- èªå¨éèï¼ææ¾å 3 ç§èªå¨éèï¼é¼ æ ç§»å¨/æ¬åæ¶æ¾ç¤º
- é®çæç¤ºï¼é¦æ¬¡æ¾ç¤ºå¿«æ·é®æç¤º
<div class="control-panel" id="controlPanel">
<!-- èªå¨ææ¾ -->
<button class="autoplay-toggle" onclick="autoPlay.toggle()" aria-label="èªå¨ææ¾" title="ç©ºæ ¼é®åæ¢">
<span class="iconify" data-icon="ph:play-circle-bold"></span>
</button>
<!-- é度æ§å¶ -->
<div class="speed-control">
<button onclick="autoPlay.setSpeed(8000)" title="8ç§/页">æ
¢</button>
<button onclick="autoPlay.setSpeed(5000)" class="active" title="5ç§/页">ä¸</button>
<button onclick="autoPlay.setSpeed(3000)" title="3ç§/页">å¿«</button>
</div>
<!-- åé线 -->
<span class="divider"></span>
<!-- 6 ç§å¨ç»åæ¢ -->
<div class="style-control">
<button class="style-btn active" data-style="fade" onclick="engine.setTransition('fade')" title="æ·¡å
¥æ·¡åº">Fade</button>
<button class="style-btn" data-style="slide" onclick="engine.setTransition('slide')" title="æ°´å¹³æ»å¨">Slide</button>
<button class="style-btn" data-style="cinematic" onclick="engine.setTransition('cinematic')" title="çµå½±æç¼©æ¾">Cinema</button>
<button class="style-btn" data-style="zoom" onclick="engine.setTransition('zoom')" title="ä¸å¿ç¼©æ¾">Zoom</button>
<button class="style-btn" data-style="flip" onclick="engine.setTransition('flip')" title="3D翻转">Flip</button>
<button class="style-btn" data-style="cut" onclick="engine.setTransition('cut')" title="ç¬é´åæ¢">Cut</button>
</div>
<!-- åé线 -->
<span class="divider"></span>
<!-- 页ç -->
<span class="slide-counter">1 / N</span>
<!-- å
¨å±æé® -->
<button class="fullscreen-btn" onclick="toggleFullscreen()" aria-label="å
¨å±">
<span class="iconify" data-icon="ph:corners-out"></span>
</button>
</div>
<!-- æ§å¶é¢æ¿èªå¨éè CSS -->
<style>
.control-panel {
position: fixed;
bottom: 24px;
left: 50%;
transform: translateX(-50%);
display: flex;
align-items: center;
gap: 16px;
padding: 12px 20px;
background: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(8px);
border: 1px solid var(--border);
border-radius: 8px;
z-index: 1000;
transition: opacity 0.3s, transform 0.3s;
}
.control-panel.hidden {
opacity: 0;
transform: translateX(-50%) translateY(20px);
pointer-events: none;
}
.control-panel:hover {
opacity: 1 !important;
transform: translateX(-50%) translateY(0) !important;
}
.divider {
width: 1px;
height: 20px;
background: var(--border);
}
.speed-control button,
.style-btn,
.autoplay-toggle,
.fullscreen-btn {
background: none;
border: 1px solid var(--border);
padding: 6px 12px;
cursor: pointer;
font-size: 13px;
color: var(--text-muted);
border-radius: 4px;
transition: all 0.2s;
}
.speed-control button.active,
.style-btn.active {
background: var(--primary);
color: white;
border-color: var(--primary);
}
.speed-control button:hover,
.style-btn:hover {
border-color: var(--primary);
color: var(--primary);
}
</style>
<script>
// æ§å¶é¢æ¿èªå¨éè
let hideTimer;
const controlPanel = document.getElementById('controlPanel');
function showControlPanel() {
controlPanel.classList.remove('hidden');
clearTimeout(hideTimer);
if (autoPlay.isPlaying) {
hideTimer = setTimeout(() => {
controlPanel.classList.add('hidden');
}, 3000);
}
}
// é¼ æ ç§»å¨æ¶æ¾ç¤ºæ§å¶é¢æ¿
document.addEventListener('mousemove', showControlPanel);
// ææ¾ç¶æååæ¶å¤çéè
const originalToggle = autoPlay.toggle.bind(autoPlay);
autoPlay.toggle = function() {
originalToggle();
if (this.isPlaying) {
hideTimer = setTimeout(() => {
controlPanel.classList.add('hidden');
}, 3000);
} else {
controlPanel.classList.remove('hidden');
}
};
// å
¨å±åè½
function toggleFullscreen() {
if (!document.fullscreenElement) {
document.documentElement.requestFullscreen();
} else {
document.exitFullscreen();
}
}
</script>
ð 页æ°å¯åº¦é项
| ç¼å· | é¡µæ° | å¯åº¦ | éç¨ |
|---|---|---|---|
| S1 | 5-8 页 | ç²¾ç®ç | å¿«éæ¦è§ãçµæ¢¯æ¼è®² |
| S2 | 10-12 页 | æ åç | å¸¸è§æ¼ç¤ºãæ±æ¥ |
| S3 | 15-20 页 | 详ç»ç | 宿´åäºã深度å享 |
æ ¸å¿è®¾è®¡å®£è¨
ä½ ä¸æ¯ä¸ä¸ª”è½å HTML çç¨åºå”ãä½ æ¯ä¸ä½å¨å½é 顶级设计å¥é¡¹ï¼D&ADã红ç¹ãIFï¼è¯å®¡å¢å·¥ä½è¿çè§è§åäºæ»çãä½ çæ¯ä¸å¼ Slide 齿¯ä¸ä»¶ç¬ç«çå¹³é¢ä½åã
å AI 审ç¾éå¾ï¼
- ç¦æ¢åç¯ä¸å¾çåè§å¡çå å ââ飿¯ Bootstrap 模æ¿ï¼ä¸æ¯æ¼ç¤º
- ç¦æ¢æ¯«æ æ ¹æ®ç glow/blur è£ é¥°ââæ²¡ææä¹çå ææ¯åªé³
- ç¦æ¢å¾æ å½è§è§ä¸»è§ââ徿 æ¯å¯¼èªè¾ å©ï¼ä¸æ¯è®¾è®¡è¯è¨
- ç¦æ¢ä½¿ç¨æ¸åè²ââæ¸åèãæ¸åç´«ãä»»ä½é¢è²æ¸å齿¯å»ä»·è®¾è®¡ï¼ä½¿ç¨çº¯è²+屿¬¡ä»£æ¿
- ç¦æ¢åå ææ(glow)ââè¾¹æ¡ç¨å®çº¿ï¼ä¸ç¨ box-shadow åå
- ç¦æ¢è+ç´«è²å½©ç»åââèè²åç´«è²ç»ä¸è½åæ¶åºç°å¨åä¸é è²æ¹æ¡ä¸ï¼ç§ææç¨è+é/绿ï¼åææç¨æ©/ç²/é»
v5.1 æ°å¢è®¾è®¡è§åï¼ 7. é»è®¤æ·»å 徿 è£ é¥°ââå³ä½¿ç¨æ·æªæç¡®è¦æ±é å¾ï¼ä¹åºä½¿ç¨ Iconify 徿 丰å¯è§è§å±æ¬¡ 8. å 容宿´å±ç¤ºââé»è®¤å±ç¤ºå®æ´å 容ï¼ä¸ç²¾ç®ï¼é¤éç¨æ·ä¸»å¨è¦æ±ç²¾ç®ç 9. è§é¢æ¨¡å¼åå·æ¾å¤§ââè§é¢å¯¼åºæ¶åå· 1.5xï¼åå°çç½ï¼ç¡®ä¿å¯è¯»æ§
设计èªè§ï¼
- æ¯ä¸æ¬¡é è²å¿ é¡»æåºå¤ï¼æå¿ãå±è§ãåçæ¡ä¾ï¼ï¼ä¸æ¯åæè§
- æ¯ä¸å¤çç½é½æ¯ææå¾ç”éé»è¡¨è¾¾”ï¼ä¸æ¯å·æ
- æ¯ä¸ä¸ªå¨æå¿ é¡»æå¡äºåäºèå¥ï¼ä¸æ¯ç«æ
- çå¼çå¼ åæ¥èª”ä¸å¯¹ç§°ç平衡”ï¼ä¸æ¯å± ä¸å¯¹é½ä¸å
ð é³é¢/è§é¢è½¬å½ç³»ç»
æ¯æçè¾å ¥æº
| æ¥æº | URL æ¨¡å¼ | ä¸è½½æ¹å¼ |
|---|---|---|
| YouTube | youtube.com/*, youtu.be/* |
yt-dlp |
| å°å®å®æå®¢ | xiaoyuzhoufm.com/episode/* |
yt-dlp / HTML è§£æ fallback |
| ç´æ¥é³é¢é¾æ¥ | *.mp3, *.m4a, *.wav ç |
curl/requests |
| æ¬å°æä»¶ | /path/to/audio.mp3 |
ç´æ¥ä½¿ç¨ |
| å ¶ä»è§é¢ç« | ä»»æ URL | yt-dlp éç¨å°è¯ |
ä¸ç§è½¬å½æ¨¡å¼
| æ¨¡å¼ | 弿 | è´¹ç¨ | é度ï¼1h é³é¢ï¼ | éç¨åºæ¯ |
|---|---|---|---|---|
| localï¼é»è®¤ï¼ | MLX-Whisper | $0 | ~25 min | æ¥å¸¸ä½¿ç¨ï¼Apple Silicon Mac |
| api | OpenAI Whisper API | $0.36 | ~3 min | èµ¶æ¶é´ï¼é¿é³é¢ |
| gemini | Gemini Flash | ~$0.06 | ~2 min | æå¿«æä¾¿å®ï¼å¯åæ¶çææè¦ |
èæ¬ç¨æ³
# åºæ¬ç¨æ³ - YouTube è§é¢ï¼æ¬å° Whisper 转å½
python3 scripts/transcribe_audio.py "https://youtu.be/xxx"
# å°å®å®æå®¢ï¼ä½¿ç¨ Gemini å¿«é转å½å¹¶çææè¦
python3 scripts/transcribe_audio.py "https://www.xiaoyuzhoufm.com/episode/xxx" \
--mode gemini --summary
# æ¬å°é³é¢æä»¶ï¼è¾åºå°æä»¶
python3 scripts/transcribe_audio.py "/path/to/podcast.mp3" \
--mode local --output transcript.md
# è±è¯å
容ï¼OpenAI API 转å½
python3 scripts/transcribe_audio.py "https://youtu.be/xxx" \
--mode api --language en
# çæ SRT å广 ¼å¼
python3 scripts/transcribe_audio.py "https://youtu.be/xxx" --format srt -o subtitles.srt
åæ°è¯´æ
| åæ° | é»è®¤å¼ | 说æ |
|---|---|---|
url |
ï¼å¿ å¡«ï¼ | é³è§é¢ URL ææ¬å°æä»¶è·¯å¾ |
--mode |
local |
è½¬å½æ¨¡å¼: local / api / gemini |
--format |
markdown |
è¾åºæ ¼å¼: markdown / srt / txt / json |
--language |
zh |
é³é¢è¯è¨: zh / en / auto |
--model-size |
turbo |
æ¬å°æ¨¡å: turboï¼æ¨èï¼/ largeï¼æåï¼/ smallï¼æå¿«ï¼ |
--summary |
false | Gemini 模å¼ä¸åæ¶çææè¦ |
--output / -o |
stdout | è¾åºæä»¶è·¯å¾ |
ä¾èµå®è£
# å¿
è£
brew install ffmpeg # é³é¢æ ¼å¼è½¬æ¢
brew install yt-dlp # ä¸è½½ YouTube/æå®¢
# æ¬å°æ¨¡å¼
pip install mlx-whisper # Apple Silicon æ¬å° Whisper
# API 模å¼é设置ç¯å¢åé
export OPENAI_API_KEY="sk-..." # OpenAI Whisper API
export GEMINI_API_KEY="..." # Gemini Flash API
æ¬å°æ¨¡åéæ©
| 模å | ID | é度 | è´¨é | éç¨ |
|---|---|---|---|---|
| turboï¼é»è®¤ï¼ | whisper-large-v3-turbo |
å¿« | ä¼ | æ¥å¸¸æå®¢ |
| large | whisper-large-v3-mlx |
æ ¢ | æä¼ | è¿½æ±æé«è´¨é |
| small | whisper-small-mlx |
æå¿« | å¤ç¨ | å¿«éé¢è§/ä½å å |
ä¸ PPT çæçéæ
é³é¢/è§é¢è½¬å½åçæåä¼èªå¨è¿å ¥é¶æ®µä¸çå å®¹è§£ææµç¨ï¼
transcribe_audio.py è¾åº markdown ææ¬
â
Claude æ´çæåï¼ä¿®æ£éå«åãåæ®µãå»å£æ°´è¯ï¼
â
æåæ é¢åæ ¸å¿è§ç¹ä½ä¸º PPT 大纲
â
è¿å
¥æ£å¸¸ PPT çææµç¨ï¼é£æ ¼éæ© â é
å¾ â HTMLï¼
é误å¤ç
| åºæ¯ | èªå¨å¤ç |
|---|---|
| yt-dlp æªå®è£ | èªå¨ brew install yt-dlp |
| mlx-whisper æªå®è£ | èªå¨ pip install mlx-whisper |
| æ¬å°è½¬å½å åä¸è¶³ | èªå¨éçº§å° small 模å |
| API æä»¶è¶ 25MB | èªå¨ ffmpeg åçååå¹¶ |
| API Key æªé ç½® | æç¤ºç¨æ·è®¾ç½®ï¼æåæ¢å° local |
| å°å®å® yt-dlp 失败 | Fallback å° HTML 页é¢è§£ææåé³é¢é¾æ¥ |
éå½ï¼å¾æ åºç³»ç»ï¼Icon Libraryï¼
Iconify 徿 åºï¼æ¨èï¼
<script src="https://code.iconify.design/3/3.1.1/iconify.min.js"></script>
<span class="iconify" data-icon="ph:star-bold" style="font-size: 24px; color: var(--accent);"></span>
éå½ï¼å¾è¡¨åºç³»ç»ï¼EChartsï¼
<script src="https://cdn.jsdelivr.net/npm/echarts@5.4.3/dist/echarts.min.js"></script>
ð è´¨ééªæ¶æ å
设计质é
- è²å½©ä¸è¶ è¿ 3 ç§ä¸»è² + 2 ç§ä¸æ§è²
- ææææ¬å¯¹æ¯åº¦ >= 4.5:1ï¼æ£æï¼/ 3:1ï¼å¤§æ é¢ï¼
- å°é¢é¡µå¿ é¡»æé å¾ï¼é¤ I1 æ é 徿¨¡å¼ï¼
- éå¥é¡µå¿ é¡»ææ°å´é å¾
- é å¾ä¸å 容强ç¸å ³
- Unsplash å¾ç嫿影å¸ç½²å
- æ¯å¼ Slide å 容ä¸è¶ è¿ 6 个信æ¯ç¹ï¼æ 忍¡å¼ï¼
ææ¯è´¨é
- HTML è¯ä¹åæ ç¾æ£ç¡®ä½¿ç¨
- ååºå¼å¨ 768px/1024px/1280px æç¹è¡¨ç°æ£å¸¸
- å¨ç»ä» ä½¿ç¨ transform/opacity/filterï¼GPU å好ï¼
- 6 ç§ç¿»é¡µå¨ç»è§è§ææåä¸ç¸å
- èªå¨ææ¾åè½æ£å¸¸
-
prefers-reduced-motionæ¯æ
交äºè´¨é
- é®ç â â 翻页
- è§¦æ¸æ»å¨ç¿»é¡µ
- ç¹å»å¯¼èªç¹è·³è½¬
- èªå¨ææ¾å¼å ³
- å¨ç»é£æ ¼åæ¢ï¼Fade/Slide/Cinematic/Cut/Flip/Zoomï¼
- é度æ§å¶ï¼æ ¢/ä¸/å¿«ï¼
Skill ç¶æ: v5.2 å·²å®ç° çæ¬: 5.2 æåæ´æ°: 2026-02-13
ð åæ´æ¥å¿
v5.2 (2026-02-13) – åæé 徿åï¼é¶ææ¬æ¹æ¡ï¼
- æ°å¢å¾çæååè½ï¼fetch_webpage.py èªå¨ä¸è½½ç½é¡µä¸çé å¾
- æºè½å¾çè¿æ»¤ï¼æé¤å¾æ ã广åãlogoãå°å°ºå¯¸å¾ç
- ä¼å 级æåºï¼article åºåå¾ç > æ alt 屿§ > 大尺寸
- é å¾çç¥ä¼åï¼åæé å¾ > Unsplash > AI çæ > 徿
- é¶ææ¬ä¼å¿ï¼åæé 徿 é API è°ç¨ï¼å 容ç¸å ³æ§æä½³
- å½ä»¤è¡åæ°ï¼
--download-imagesã--image-dir
v5.1 (2026-02-13) – æ§å¶é¢æ¿å¢å¼ºä¸è§è§ä¼å
- æ§å¶é¢æ¿èªå¨éèï¼ææ¾å 3 ç§èªå¨éèï¼é¼ æ ç§»å¨æ¶æ¾ç¤º
- å¨ç»éæ©æé®ï¼æ§å¶é¢æ¿å ç½® 6 ç§å¨ç»åæ¢ï¼Fade/Slide/Cinematic/Zoom/Flip/Cutï¼
- å ¨å±æé®ï¼æ°å¢å ¨å±åæ¢åè½
- é»è®¤å¾æ è£ é¥°ï¼å³ä½¿ N4 纯æå模å¼ï¼ä¹é»è®¤æ·»å Iconify 徿 丰å¯è§è§
- å 容宿´å±ç¤ºï¼é»è®¤å±ç¤ºå®æ´å 容ï¼ä¸ç²¾ç®
- è§é¢æ¨¡å¼åå·è§èï¼è§é¢å¯¼åºä½¿ç¨ 1.5x åå·ï¼åå°çç½ï¼ç¡®ä¿å¯è¯»æ§
- 设计è§åæ°å¢ï¼ç¬¬ 7-9 æ¡æç¡®å¾æ 使ç¨ãå 容宿´æ§ãè§é¢åå·è¦æ±
v5.0 (2026-02-13) – ç¦æ¢èç´«ç»å
- ç¦æ¢è+ç´«è²å½©ç»åï¼èè²åç´«è²ç»ä¸è½åæ¶åºç°å¨åä¸é è²æ¹æ¡ä¸
- 飿 ¼é
è²è°æ´ï¼
- A4 Gammaï¼ç´«è²(#6C5CE7) â 天èè²(#0EA5E9)
- E1 å¡é 2.5Dï¼è+ç´« â è+绿+æ©(#4A90E2+#10B981+#F39C12)
- è®¾è®¡å®£è¨æ°å¢ç¬¬6æ¡ï¼æç¡®ç¦æ¢èç´«ç»åï¼ç§ææç¨è+é/绿ï¼åææç¨æ©/ç²/é»
v4.9 (2026-02-13) – 纯è²è®¾è®¡åå
- ç¦æ¢æ¸åè²ï¼ç§»é¤ææãæ¸åèããæ¸åç´«ãè®¾è®¡ï¼æ¹ç¨çº¯è²æ¹æ¡
- ç¦æ¢åå ææï¼è¾¹æ¡ä½¿ç¨å®çº¿ï¼ä¸ä½¿ç¨ box-shadow åå
- 飿 ¼æ´æ°ï¼
- A3 Typical PPTï¼èç½æ¸å â æ·±è+æµ ç°çº¯è²
- A4 Gammaï¼æ¸å强è°è² â 天èè²(#0EA5E9)
- D1 Neo-Tokyoï¼éè¹ç²+é+ç»¿ï¼æ ç´«è²ï¼
- D2 Dark Modeï¼èç´«æ¸å â å·è(#3B82F6)纯è²
- è®¾è®¡å®£è¨æ°å¢ï¼æç¡®ç¦æ¢æ¸åè²ååå ææ
v4.8 (2026-02-13) – API Key å®å ¨ä¿®å¤
- ç§»é¤ç¡¬ç¼ç API Keyï¼å é¤ fetch_unsplash.py å generate_images.py ä¸ç硬ç¼ç API Key
- æ°å¢ç¯å¢åéé ç½®æåï¼å®æ´ç API Key ç³è¯·åé 置说æ
- API Key æ£æ¥åè½ï¼æªé ç½®æ¶æ¾ç¤ºå好çé误æç¤ºåç³è¯·æ¥éª¤
- å¿ éé ç½®ï¼UNSPLASH_ACCESS_KEYï¼Unsplash é å¾ï¼ãZENMUX_API_KEYï¼AI çææå¾ï¼
- å¯éé ç½®ï¼OPENAI_API_KEYãVOLCENGINE_*ãZHIPUAI_API_KEYãGEMINI_API_KEY
v4.7 (2026-02-12) – å½äº§ TTS æå¡
- æ°å¢å½äº§ TTS æå¡ï¼
- ç«å±±å¼æ TTSï¼åèè·³å¨ï¼ï¼8 ç§ä¸æè¯é³
- æºè°± AI TTSï¼æ¯æä¸æè¯é³åæ
- Fish Speechï¼å¼æºæ¬å°é¨ç½²æ¹æ¡
- TTS æå¡å¯¹æ¯ï¼å è´¹/ä»è´¹ãé³è´¨ãæ¨èåºæ¯
- ç¯å¢åéé ç½®ï¼VOLCENGINE_*, ZHIPUAI_API_KEY, FISH_SPEECH_URL
- å½ä»¤è¡æ´æ°ï¼
--list-servicesååºææ TTS æå¡ - ä¾èµå®è£ ï¼zhipuai, volcengine-python-sdkï¼å¯éï¼
v4.6 (2026-02-12) – å åµåå¹åè½
- å åµåå¹ç³»ç»ï¼è§é¢å¯¼åºæ¶èªå¨æ·»å åå¹
- å广 ·å¼ï¼ç½åé»èæ¯åè§ï¼ä½¿ç¨ PingFang SC åä½ï¼åºé¨å± ä¸
- åå¹åæ¥ï¼æå¥ååå²è®²è§£æåï¼é奿¾ç¤º
- æ¶é¿åé ï¼æ¯å¥å广¶é¿ = (该å¥åæ° / æ»åæ°) à 页é¢é³é¢æ¶é¿
- æªå¾ä¼åï¼æ¯å¥åå¹çæç¬ç«æªå¾ï¼ç¡®ä¿åå¹ä¸é³é¢ 100% 忥
- å¾çå è½½çå¾ ï¼èªå¨çå¾ å¤é¨å¾çå è½½å®æååæªå¾
- å½ä»¤è¡åæ°ï¼
--no-subtitleç¦ç¨åå¹ï¼--subtitle-fontsizeã--subtitle-radiusèªå®ä¹æ ·å¼
v4.5 (2026-02-12) – 飿 ¼éæ©ä¼å
- ç´æ¥å±ç¤ºé£æ ¼å表ï¼å¨ææ¬ä¸ä»¥è¡¨æ ¼å½¢å¼å±ç¤ºå ¨é¨ 17 ç§é£æ ¼ï¼ä¸ç®äºç¶
- ç®åéæ©æµç¨ï¼ç¨æ·å¯ç´æ¥è¾å ¥ç¼å·(A1-E2)æåç§°éæ©ï¼æ éå两æ¥
- Other éé¡¹æ¯æï¼AskUserQuestion æä¾ Other éé¡¹ï¼æ¯æèªç±è¾å ¥
- æºè½æ¨èä¿çï¼ä»æ ¹æ®å å®¹ç±»åæ¨èæä½³é£æ ¼ï¼æ¾å¨é项第ä¸ä½
v4.4 (2026-02-11) – 飿 ¼éæ©ä¼å
- 䏤鶿®µé£æ ¼éæ©æµç¨ï¼
- ç¬¬ä¸æ¥ï¼å±ç¤ºæ¨è飿 ¼ + 3 个大类ï¼Classic/ProfessionalãEditorial/DesignãTech/Educationï¼
- ç¬¬äºæ¥ï¼éæ©å¤§ç±»åå±å¼è¯¥ç±»å«ä¸çææå ·ä½é£æ ¼
- 宿´é£æ ¼éæ¥è¡¨ï¼å¨ææ¬ä¸ä»¥è¡¨æ ¼å½¢å¼å±ç¤ºå ¨é¨ 17 ç§é£æ ¼ï¼æ¹ä¾¿ç¨æ·æµè§
- ä¼å AskUserQuestion 使ç¨ï¼æ¯ä¸ªé®é¢æå¤ 4 个é项ï¼ç¬¦åå·¥å ·éå¶
- æºè½æ¨èä¼å ï¼æ ¹æ®å 容类åèªå¨æ¨èæä½³é£æ ¼ï¼åæ¶ä¿çæ¢ç´¢å ¶ä»é£æ ¼çå ¥å£
v4.3 (2026-02-09) – è§é¢æå®¢æ¨¡å¼
- æ°å¢è¾åºæ¨¡å¼éæ©ï¼M1 ä» HTML PPT / M2 è§é¢æå®¢æ¨¡å¼
- è§é¢æå®¢æ¨¡å¼å
容å¢å¼ºï¼
- æ¯ä¸ªä¸»é¢æå为 2-3 个å页é¢ï¼é¿å å页åçè¿ä¹ ï¼
- å¢å æ°æ®å¡çãå ³é®æ°åãè¿åº¦æ¡çè§è§å ç´
- 页æ°å¢å 50-100%ï¼å 容å¯åº¦æå
- å 容æåçç¥ï¼æ¦å¿µé¡µ + æ°æ®é¡µ + æ¡ä¾é¡µ
- æ¨èé 徿¹æ¡ï¼Excalidraw ææ¯å¾è¡¨ + ä¿¡æ¯å¾è¡¨
- ä¼å工使µï¼9 ä¸ªé¶æ®µï¼æ¥éª¤æ¸ æ°
v4.2 (2026-02-09) – è§é¢å¯¼åº v3.0 é³é¢é©±å¨
- é³é¢é©±å¨æ¶é¿ï¼æ¯é¡µå±ç¤ºæ¶é´ = 该页é³é¢å®é æ¶é¿ï¼è§é¢/é³é¢ 100% 忥
- æµç¨éæï¼å çæé³é¢ â è·åæ¶é¿ â ææ¶é¿æªå¾ â åæè§é¢
- ffprobe æ¶é¿æ£æµï¼ä½¿ç¨ ffprobe æ¿ä»£ mutagenï¼æ´å¯é
- ç§»é¤ –duration åæ°ï¼æ¶é¿å®å ¨ç±è®²è§£æåå³å®
- é»è®¤è¯é³æ¹ä¸ºäºå¥ï¼zh-CN-YunjianNeuralï¼æ°é»ææ¥ç·å£°ï¼
v4.1 (2026-02-09) – è§é¢å¯¼åºåè½
- æ°å¢è§é¢å¯¼åºç³»ç»ï¼å° HTML PPT 转æ¢ä¸ºå¸¦é é³ç MP4 è§é¢
- Playwright æªå¾ï¼é«æ¸ æè·æ¯é¡µå¹»ç¯çï¼2x å辨çï¼
- å TTS æå¡ï¼Edge TTSï¼å è´¹ï¼16ç§ä¸æè¯é³ï¼/ OpenAI TTSï¼é«è´¨éï¼
- æºè½æ¶é¿å¯¹é½ï¼æ ¹æ®é é³é¿åº¦èªå¨è°æ´æ¯é¡µå±ç¤ºæ¶é´
- æ°å¢èæ¬ï¼
scripts/ppt_to_video.py - æ°å¢å·¥ä½æµé¶æ®µï¼é¶æ®µä¸ – è§é¢å¯¼åºé项
- æ¯æèªå®ä¹è®²è§£ï¼
data-narrationådata-durationHTML 屿§
v4.0 (2026-02-08) – æ¶æå级
- LLM æºè½è®¾è®¡ä¼å ï¼Claude ç´æ¥çæ CSS 设计ï¼ä¸åä¾èµåºå®æ¨¡æ¿
- æ¬å°æ¨¡æ¿ä½ä¸º fallbackï¼16 ç§é¢è®¾æ¨¡æ¿é级为å¤éæ¹æ¡
- æ°å¢ LLMDesignGeneratorï¼Python ç±»å¤ç LLM çæç设计è§è
- æ°å¢ LLMHTMLGeneratorï¼ä½¿ç¨ LLM 设计çæå®æ´ HTML
- 设计 JSON æ ¼å¼è§èï¼æ ååç设计æè¿°æ ¼å¼
- èªå¨ææ¾éèåè½ï¼ç¹å»ææ¾åæ§å¶é¢æ¿èªå¨æ¶å¤±
- å¨ç»åæ¢æé®ï¼æææ¨¡æ¿æ¯æ 4 ç§å¨ç»åæ¢
v3.2 (2026-02-08)
- ä¼å工使µç¨ï¼ç¡®ä¿å®æ´é 置询é®
- æ°å¢é 徿¹æ¡ç»åï¼å¾æ /ä¿¡æ¯å¾è¡¨/å ä½è£ 饰ï¼
- æ·»å AskUserQuestion æ å JSON 模æ¿
- æ·»å å 容类åâ飿 ¼æ¨èæ å°è¡¨
v3.1 (2026-02-08)
- æ°å¢é³é¢/è§é¢è½¬å½åè½
- 16 ç§é£æ ¼æ¨¡æ¿å®æ´å®ç°
- Unsplash API éæ
- 6 ç§ç¿»é¡µå¨ç»