yuanflow-cli 0.1.43 → 0.1.44

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (18) hide show
  1. package/README.md +2 -0
  2. package/package.json +1 -1
  3. package/skills/yuanflow-skill/README.md +7 -0
  4. package/skills/yuanflow-skill/SKILL.md +24 -9
  5. package/skills/yuanflow-skill//350/247/206/350/247/211/345/215/241/347/211/207/347/224/237/346/210/220/SKILL.md +77 -0
  6. package/skills/yuanflow-skill//350/247/206/350/247/211/345/215/241/347/211/207/347/224/237/346/210/220/agents/openai.yaml +8 -0
  7. package/skills/yuanflow-skill//350/247/206/350/247/211/345/215/241/347/211/207/347/224/237/346/210/220/assets/templates/editorial-publishing.html +65 -0
  8. package/skills/yuanflow-skill//350/247/206/350/247/211/345/215/241/347/211/207/347/224/237/346/210/220/assets/templates/lifestyle-collage.html +49 -0
  9. package/skills/yuanflow-skill//350/247/206/350/247/211/345/215/241/347/211/207/347/224/237/346/210/220/assets/templates/product-brand.html +50 -0
  10. package/skills/yuanflow-skill//350/247/206/350/247/211/345/215/241/347/211/207/347/224/237/346/210/220/assets/templates/social-campaign.html +49 -0
  11. package/skills/yuanflow-skill//350/247/206/350/247/211/345/215/241/347/211/207/347/224/237/346/210/220/assets/templates/technical-diagram.html +45 -0
  12. package/skills/yuanflow-skill//350/247/206/350/247/211/345/215/241/347/211/207/347/224/237/346/210/220/overview.html +272 -0
  13. package/skills/yuanflow-skill//350/247/206/350/247/211/345/215/241/347/211/207/347/224/237/346/210/220/references/commercial-system.md +56 -0
  14. package/skills/yuanflow-skill//350/247/206/350/247/211/345/215/241/347/211/207/347/224/237/346/210/220/references/layout-playbook.md +98 -0
  15. package/skills/yuanflow-skill//350/247/206/350/247/211/345/215/241/347/211/207/347/224/237/346/210/220/references/quality-check.md +58 -0
  16. package/skills/yuanflow-skill//350/247/206/350/247/211/345/215/241/347/211/207/347/224/237/346/210/220/references/style-atlas.md +728 -0
  17. package/skills/yuanflow-skill//350/247/206/350/247/211/345/215/241/347/211/207/347/224/237/346/210/220/references/use-case-recipes.md +116 -0
  18. package/skills/yuanflow-skill//350/247/206/350/247/211/345/215/241/347/211/207/347/224/237/346/210/220/scripts/check_visual_card.py +92 -0
package/README.md CHANGED
@@ -5,6 +5,7 @@ YuanFlow 的 npm 包,包含两个命令入口:
5
5
  - `yuanflow-cli`:社媒 API 转 CLI,覆盖完整 registry、快捷命令、schema、dry-run 和 agent-json 输出。
6
6
  - `yuanflow-skill`:把 `YuanFlow-skill` 注入到本机支持的 AI Agent skills 目录。
7
7
  - `飞书官方技能`:YuanFlow-main 内置环境通过受控工具托管安装并调用飞书官方 `@larksuite/cli`,npm 包只提供 Skill 说明,不复制官方 CLI 源码。
8
+ - `视觉卡片生成`:作为 Skill、HTML 模板、参考文档和检查脚本随包分发,不新增独立 `yuanflow-cli visual-card` 命令。
8
9
 
9
10
  ## 安装
10
11
 
@@ -19,6 +20,7 @@ npm install -g yuanflow-cli
19
20
  ```bash
20
21
  yuanflow-cli --help
21
22
  yuanflow-skill list-agents
23
+ yuanflow-skill list-skills
22
24
  ```
23
25
 
24
26
  ## API CLI
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "yuanflow-cli",
3
- "version": "0.1.43",
3
+ "version": "0.1.44",
4
4
  "description": "YuanFlow 自媒体 API CLI 与 Skill 安装器。",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -11,6 +11,7 @@ YuanFlow Skill 是 `yuanflow-cli` 的 Agent Skill 仓库,用于把社媒平台
11
11
  - `视频拆解/`:自媒体创作场景的对标视频拆解 Skill,先查自媒体知识库对标拆解规则,再用 `qwen3-vl-plus` 上传视频并按规则拆解。
12
12
  - `YuanFlow文件中转工具/`:YuanFlow 文件中转、签名链接、对象复制 Skill,内部兼容命令走 `yuanflow-cli oss`。
13
13
  - `生图技能/`:图片生成与编辑 Skill,优先走 YuanFlow-main 内置环境的 `yuanflow_image_request`。
14
+ - `视觉卡片生成/`:小红书图文卡片、公众号封面、文章插图、海报、信息图和商业视觉方案卡生成 Skill,使用 HTML 模板、风格参考和质量检查脚本完成交付。
14
15
  - `公众号生成与发布/`:公众号文章创作、主题预览、微信内联 HTML 排版、正文图片上传和草稿箱推送 Skill。
15
16
  - `小红书运营/`:小红书选题调研、笔记搜索、账号分析、评论采集、文案创作、发布前检查和互动操作 Skill;不建议浏览器自动发布作品,除非用户明确无视平台识别和限流风险并强制要求。
16
17
  - `视频智能剪辑/`:主音频 + B-roll 素材智能剪辑 Skill,先查自媒体知识库的视频剪辑策略,保存 `strategy_snapshot.json`,再通过 ASR/forced alignment 导入 `audio_alignment.json`,按 1 秒 1 帧抽帧并回写视觉理解,由 Agent 生成 `timeline_plan` 和 EDL,交给 `yuanflow-cli video` 校验和渲染。
@@ -39,6 +40,7 @@ YuanFlow Skill 是 `yuanflow-cli` 的 Agent Skill 仓库,用于把社媒平台
39
40
  - 对自媒体对标视频、爆款视频、竞品视频做内容结构、开头钩子、脚本节奏、镜头节奏和可复用创作方法拆解;开始前先查自媒体知识库规则,视频 URL 先解析并保存本地。
40
41
  - 上传文件到 YuanFlow 文件中转、生成签名链接或复制文件对象。
41
42
  - 生成图片、编辑图片,并缓存返回 URL 或 base64 图片。生成图片必填 `prompt`,可选 `size / quality / style / n / response_format`;编辑图片必须通过 multipart 上传本地图片。
43
+ - 生成小红书图文卡片、公众号封面、文章插图、社交媒体配图、海报、信息图和商业视觉方案卡;视觉卡片生成不新增独立 CLI 命令,按 Skill 模板、参考文档和检查脚本完成。
42
44
  - 把自媒体分析、数据复盘、文案方案、账号监控、知识梳理和执行计划生成可直接打开的单页 HTML 报告。
43
45
  - 生成或改写公众号文章,进入主题选择预览后导出微信公众号编辑器可粘贴 HTML,或推送到公众号草稿箱。
44
46
  - 处理小红书单段或全流程任务,例如只写文案、只采集笔记、只分析账号、只采集评论、只做点赞收藏评论回复,或完整执行图文/视频发布流程;每轮开始前必须明确任务边界。写小红书文案前先查自媒体知识库方法论,遇到封面或正文插图生成时先确认 4:3 或 3:4 比例并调用生图技能。
@@ -115,6 +117,11 @@ yuanflow-skill list-skills
115
117
  │ └─ SKILL.md
116
118
  ├─ 生图技能
117
119
  │ └─ SKILL.md
120
+ ├─ 视觉卡片生成
121
+ │ ├─ SKILL.md
122
+ │ ├─ assets/
123
+ │ ├─ references/
124
+ │ └─ scripts/
118
125
  ├─ 公众号生成与发布
119
126
  │ ├─ SKILL.md
120
127
  │ ├─ scripts/
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: YuanFlow技能总入口
3
- description: 当用户需要处理自媒体平台接口工作流、平台数据查询、命令发现、生图、YuanFlow 文件中转、知识库查询、HTML 报告生成,或需要在 YuanFlow 子技能之间选择合适能力时使用。
3
+ description: 当用户需要处理自媒体平台接口工作流、平台数据查询、命令发现、生图、视觉卡片生成、YuanFlow 文件中转、知识库查询、HTML 报告生成,或需要在 YuanFlow 子技能之间选择合适能力时使用。
4
4
  ---
5
5
 
6
6
  # YuanFlow Skill
@@ -23,6 +23,7 @@ description: 当用户需要处理自媒体平台接口工作流、平台数据
23
23
  - `视频拆解/`
24
24
  - `YuanFlow文件中转工具/`
25
25
  - `生图技能/`
26
+ - `视觉卡片生成/`
26
27
  - `公众号生成与发布/`
27
28
  - `小红书运营/`
28
29
  - `热门内容整理/`
@@ -228,7 +229,21 @@ description: 当用户需要处理自媒体平台接口工作流、平台数据
228
229
 
229
230
  - `生图技能`
230
231
 
231
- ### 13. 走 `HTML报告生成`
232
+ ### 13. 走 `视觉卡片生成`
233
+
234
+ 遇到下面这些需求,优先进入这个子 Skill:
235
+
236
+ - 生成小红书图文卡片、公众号封面、文章插图、社交媒体配图、海报、信息图或商业视觉方案卡。
237
+ - 用户提供主题、文章、截图、照片、笔记、提纲或脚本,希望转成可复用、可检查、可商业交付的视觉卡片。
238
+ - 用户要求多风格配图、封面设计、卡片排版、视觉风格探索或 HTML 视觉模板输出。
239
+
240
+ 如果用户只要求生成图片素材或编辑图片,先用 `生图技能`;如果用户要求把完整方案整理成长文报告,改用 `HTML报告生成`。
241
+
242
+ 子 Skill 名称:
243
+
244
+ - `视觉卡片生成`
245
+
246
+ ### 14. 走 `HTML报告生成`
232
247
 
233
248
  遇到下面这些需求,优先进入这个子 Skill:
234
249
 
@@ -240,7 +255,7 @@ description: 当用户需要处理自媒体平台接口工作流、平台数据
240
255
 
241
256
  - `HTML报告生成`
242
257
 
243
- ### 14. 走 `公众号生成与发布`
258
+ ### 15. 走 `公众号生成与发布`
244
259
 
245
260
  遇到下面这些需求,优先进入这个子 Skill:
246
261
 
@@ -252,7 +267,7 @@ description: 当用户需要处理自媒体平台接口工作流、平台数据
252
267
 
253
268
  - `公众号生成与发布`
254
269
 
255
- ### 15. 走 `小红书运营`
270
+ ### 16. 走 `小红书运营`
256
271
 
257
272
  遇到下面这些需求,优先进入这个子 Skill:
258
273
 
@@ -266,7 +281,7 @@ description: 当用户需要处理自媒体平台接口工作流、平台数据
266
281
 
267
282
  - `小红书运营`
268
283
 
269
- ### 16. 走 `个人创作库`
284
+ ### 17. 走 `个人创作库`
270
285
 
271
286
  遇到下面这些需求,优先进入这个子 Skill:
272
287
 
@@ -280,7 +295,7 @@ description: 当用户需要处理自媒体平台接口工作流、平台数据
280
295
 
281
296
  - `个人创作库`
282
297
 
283
- ### 17. 走 `本地音视频转文字`
298
+ ### 18. 走 `本地音视频转文字`
284
299
 
285
300
  只有当用户明确要求使用本地音视频转文字、本地转写、本地 ASR、离线转写或本地模型把音频/视频转成文字时,才进入这个子 Skill。
286
301
 
@@ -290,7 +305,7 @@ description: 当用户需要处理自媒体平台接口工作流、平台数据
290
305
 
291
306
  - `本地音视频转文字`
292
307
 
293
- ### 18. 走 `音视频在线转文字`
308
+ ### 19. 走 `音视频在线转文字`
294
309
 
295
310
  遇到下面这些需求,优先进入这个子 Skill:
296
311
 
@@ -304,7 +319,7 @@ description: 当用户需要处理自媒体平台接口工作流、平台数据
304
319
 
305
320
  - `音视频在线转文字`
306
321
 
307
- ### 19. 走 `视觉理解`
322
+ ### 20. 走 `视觉理解`
308
323
 
309
324
  遇到下面这些需求,优先进入这个子 Skill:
310
325
 
@@ -318,7 +333,7 @@ description: 当用户需要处理自媒体平台接口工作流、平台数据
318
333
 
319
334
  - `视觉理解`
320
335
 
321
- ### 20. 走 `视频拆解`
336
+ ### 21. 走 `视频拆解`
322
337
 
323
338
  遇到下面这些需求,优先进入这个子 Skill:
324
339
 
@@ -0,0 +1,77 @@
1
+ ---
2
+ name: 视觉卡片生成
3
+ description: 当用户需要生成小红书图文卡片、公众号封面、文章插图、社交媒体配图、海报、信息图、视觉方案卡、商业风格设计图或多风格配图时使用。本 Skill 使用 HTML 模板、风格参考和质量检查脚本生成可复用、可检查、可商业交付的视觉卡片。
4
+ emoji: 🖼️
5
+ ---
6
+
7
+ # 视觉卡片生成
8
+
9
+ ## 外部 CLI 主流程
10
+
11
+ 外部 Agent 或用户直接使用本 Skill 时,优先按本 Skill 的模板和参考文档完成视觉卡片生成;如果任务中需要上传素材、生成图片、理解图片/视频或调用 YuanFlow API,再使用本地 `yuanflow-cli`。
12
+
13
+ 1. 如果本地可执行 `yuanflow-cli --help`,直接使用本地 CLI。
14
+ 2. 如果本地没有 `yuanflow-cli`,再提示用户安装 `npm install -g yuanflow-cli`。
15
+ 3. 外部 CLI 使用 `YUANCHUANG_API_TOKEN` 或 `yuanflow-cli config set-token <你的令牌>` 完成鉴权。
16
+
17
+ 不要在回复、日志或文件中暴露 token。用户主流程统一称为 YuanFlow API 和 YuanFlow 文件中转,不要求用户配置第三方平台 Key。
18
+
19
+ 本 Skill 本身不新增独立 `yuanflow-cli visual-card` 命令。它通过 Skill 说明、HTML 模板、参考文档和检查脚本完成视觉卡片生产。
20
+
21
+ ## YuanFlow-main 内置环境
22
+
23
+ 只有在 YuanFlow-main 内置环境中,才使用 `yuanflow_cli_call`、`yuanflow_image_request`、`content_workbench_update`、`artifact_files_register` 等受控工具。token、受管包路径、程序数据目录和输出目录由 YuanFlow-main 管理,不写成外部用户必备步骤。
24
+
25
+ 如果用户需要先生成图片素材,可调用 `生图技能` 或 YuanFlow-main 内置图片能力;如果需要理解用户提供的图片/视频素材,可调用 `视觉理解`;如果需要上传本地素材给在线能力使用,可调用 `YuanFlow文件中转工具`。
26
+
27
+ ## 适用输出
28
+
29
+ - 小红书图文:3:4 封面和 3-9 张正文卡片。
30
+ - 公众号封面:21:9 主封面、1:1 次封面、3:4 竖版封面。
31
+ - 文章插图:16:9、4:3、3:2 的正文配图。
32
+ - 社交媒体视觉:海报、活动图、概念图、产品卖点图、数据图、流程图。
33
+ - 设计方案卡:风格探索板、品牌视觉方向、信息架构卡片、方案对比图。
34
+
35
+ ## 生成流程
36
+
37
+ 1. 识别任务类型:封面、图文卡片、文章插图、社交配图、海报、信息图、风格探索。
38
+ 2. 读取 `references/commercial-system.md`,确认比例、尺寸、页面角色、文字限制、证据需求和质量门禁。
39
+ 3. 从 `references/style-atlas.md` 选择一个主风格和一个子风格;用户未指定时,按传播目标选择。
40
+ 4. 从 `assets/templates/` 复制最接近的 HTML 模板到任务输出目录,命名为 `index.html`。
41
+ 5. 在 `.poster` 节点上设置 `data-style`、`data-ratio`,并按页面目标调整布局模块。
42
+ 6. 参考 `references/layout-playbook.md` 和 `references/use-case-recipes.md` 组织页面结构,避免每页都变成重复的标题加卡片。
43
+ 7. 如果图片或截图是证据,优先使用用户提供的真实素材;如果需要生成图片,只把生成图作为素材,最终文字仍放在 HTML 中排版。
44
+ 8. 参考 `references/quality-check.md` 做最终检查;生成 HTML 后尽量运行检查脚本。
45
+
46
+ 检查命令:
47
+
48
+ ```bash
49
+ python scripts/check_visual_card.py <index.html>
50
+ ```
51
+
52
+ ## 风格选择规则
53
+
54
+ - 一组输出默认只使用一个主风格,除非用户明确要求做多风格探索。
55
+ - 通过风格、色板、布局、材质、图片处理和文案节奏制造变化,不靠随机装饰。
56
+ - 不使用无意义气泡、假数据、假 UI、假截图、占位文字或不可读小字。
57
+ - 小红书封面优先保证缩略图可读:主标题清楚,主体视觉明确,正文不拥挤。
58
+ - 文章插图优先服务文章论点,不做成硬广横幅。
59
+ - 不同封面比例要分别设计,不能把 21:9 直接裁成 1:1 或 3:4。
60
+
61
+ ## 资源说明
62
+
63
+ - `references/style-atlas.md`:风格体系、子风格、识别测试、反模式、HTML 骨架。
64
+ - `references/commercial-system.md`:商业交付骨架、生产标准、复用矩阵。
65
+ - `references/use-case-recipes.md`:封面、文章插图、社交配图、海报和风格探索配方。
66
+ - `references/layout-playbook.md`:按输出类型和内容模式选择布局。
67
+ - `references/quality-check.md`:最终质量检查清单。
68
+ - `assets/templates/`:可复制使用的 HTML 母版。
69
+ - `overview.html`:成熟风格系统和矩阵总览。
70
+ - `scripts/check_visual_card.py`:HTML 静态检查脚本,只依赖 Python 标准库。
71
+
72
+ ## 交付要求
73
+
74
+ - 给出输出目录路径。
75
+ - 如用户要求渲染图片,给出渲染后的图片文件路径。
76
+ - 简短说明使用的风格、比例和页面数量。
77
+ - 如果使用了网页图片或外部素材,在任务目录中记录来源链接,并在回复中说明。
@@ -0,0 +1,8 @@
1
+ interface:
2
+ display_name: "视觉卡片生成"
3
+ short_description: "生成小红书图文、封面、文章插图、海报和商业视觉卡片。"
4
+ brand_color: "#C8372D"
5
+ default_prompt: "使用 $视觉卡片生成 将主题、文章、截图、照片、笔记、提纲或脚本转成小红书图文卡片、公众号封面、文章插图、海报或商业视觉设计图。"
6
+
7
+ policy:
8
+ allow_implicit_invocation: true
@@ -0,0 +1,65 @@
1
+ <!doctype html>
2
+ <html lang="zh-CN" data-parent-style="editorial-publishing">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <title>Editorial Publishing Template</title>
7
+ <style>
8
+ :root {
9
+ --paper: #f3f0e8;
10
+ --ink: #12100d;
11
+ --muted: #716a60;
12
+ --line: rgba(18,16,13,.22);
13
+ --accent: #9b2f24;
14
+ --serif: "Songti SC", "STSong", "SimSun", serif;
15
+ --sans: system-ui, sans-serif;
16
+ --mono: ui-monospace, monospace;
17
+ }
18
+ * { box-sizing: border-box; }
19
+ body { margin: 0; padding: 48px; background: #1c1a17; font-family: var(--sans); }
20
+ .sheet { display: flex; flex-direction: column; align-items: center; gap: 42px; }
21
+ .poster { position: relative; overflow: hidden; background: var(--paper); color: var(--ink); isolation: isolate; }
22
+ .poster[data-ratio="xhs"] { width: 1080px; height: 1440px; }
23
+ .poster[data-ratio="article"] { width: 1600px; height: 900px; }
24
+ .poster[data-ratio="wide"] { width: 2100px; height: 900px; }
25
+ .paper-grain { position: absolute; inset: 0; opacity: .26; mix-blend-mode: multiply; background-image: radial-gradient(rgba(0,0,0,.06) 1px, transparent 1.5px); background-size: 4px 4px; }
26
+ .ep-pad { position: relative; z-index: 2; height: 100%; padding: 88px; display: flex; flex-direction: column; }
27
+ [data-ratio="article"] .ep-pad, [data-ratio="wide"] .ep-pad { padding: 76px 110px; }
28
+ .ep-issue, .ep-strip, .small-label { font-family: var(--mono); letter-spacing: .16em; text-transform: uppercase; color: var(--muted); }
29
+ .ep-issue { font-size: 20px; margin: 0 0 34px; }
30
+ .ep-title { font-family: var(--serif); font-weight: 500; font-size: 112px; line-height: 1.08; letter-spacing: .04em; margin: 0; max-width: 880px; }
31
+ .ep-deck { font-family: var(--serif); font-size: 32px; line-height: 1.55; color: var(--muted); max-width: 640px; }
32
+ .ep-photo { margin: 44px 0 0; height: 460px; background: #d9d0c2; overflow: hidden; border: 1px solid var(--line); }
33
+ .ep-photo.small { width: 52%; height: 360px; margin-left: auto; }
34
+ .ep-photo img, .object-frame img { width: 100%; height: 100%; object-fit: cover; display: block; }
35
+ .ep-strip { margin-top: auto; padding-top: 18px; border-top: 1px solid var(--line); display: flex; justify-content: space-between; font-size: 18px; }
36
+ .book-page { border: 18px solid rgba(155,47,36,.18); }
37
+ .vertical { writing-mode: vertical-rl; letter-spacing: .18em; }
38
+ .seal { width: 64px; height: 64px; border: 2px solid var(--accent); color: var(--accent); display: grid; place-items: center; font-family: var(--serif); margin-top: 28px; }
39
+ .newspaper { display: grid; grid-template-rows: auto auto 1fr; }
40
+ .masthead { font-family: var(--serif); font-size: 34px; letter-spacing: .18em; border-bottom: 4px double var(--ink); padding-bottom: 16px; margin: 0 0 32px; }
41
+ .news-grid { display: grid; grid-template-columns: 1fr 1fr .7fr; gap: 26px; margin-top: 40px; }
42
+ .news-grid article { border-top: 1px solid var(--line); padding-top: 18px; font-family: var(--serif); font-size: 26px; line-height: 1.55; }
43
+ .mini-chart { display: flex; gap: 18px; align-items: end; border: 1px solid var(--line); padding: 26px; }
44
+ .mini-chart span { flex: 1; height: var(--h); background: var(--accent); }
45
+ .gallery { display: grid; grid-template-columns: 1.2fr .8fr; gap: 54px; align-items: end; }
46
+ .object-frame { margin: 0; height: 620px; background: #dedbd2; }
47
+ .plaque { border-top: 1px solid var(--line); padding-top: 24px; }
48
+ .plaque h2 { font-family: var(--serif); font-size: 54px; margin: 0 0 18px; }
49
+ .plaque p { font-family: var(--serif); color: var(--muted); font-size: 26px; line-height: 1.55; }
50
+ </style>
51
+ </head>
52
+ <body>
53
+ <main class="sheet">
54
+ <section class="poster magazine-paper" data-ratio="xhs" data-style="magazine-paper">
55
+ <div class="paper-grain"></div>
56
+ <main class="ep-pad">
57
+ <p class="ep-issue">VOL. 04 / FIELD NOTE / 2026</p>
58
+ <h1 class="ep-title">在信息里<br>找到一条路</h1>
59
+ <figure class="ep-photo"><img src="assets/hero.jpg" alt=""></figure>
60
+ <div class="ep-strip"><span>观察</span><span>方法</span><span>结论</span></div>
61
+ </main>
62
+ </section>
63
+ </main>
64
+ </body>
65
+ </html>
@@ -0,0 +1,49 @@
1
+ <!doctype html>
2
+ <html lang="zh-CN" data-parent-style="lifestyle-collage">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <title>Lifestyle Collage Template</title>
7
+ <style>
8
+ :root { --paper:#f2ece6; --ink:#25211d; --muted:#82766b; --line:rgba(37,33,29,.18); --accent:#7f8d74; --serif:"Songti SC","STSong","SimSun",serif; --sans:system-ui,sans-serif; --mono:ui-monospace,monospace; }
9
+ * { box-sizing:border-box; }
10
+ body { margin:0; padding:48px; background:#1d1b19; font-family:var(--sans); }
11
+ .sheet { display:flex; flex-direction:column; align-items:center; gap:42px; }
12
+ .poster { position:relative; overflow:hidden; background:var(--paper); color:var(--ink); isolation:isolate; }
13
+ .poster[data-ratio="xhs"] { width:1080px; height:1440px; }
14
+ .poster[data-ratio="article"] { width:1600px; height:900px; }
15
+ .lc-pad { height:100%; padding:88px; display:flex; flex-direction:column; position:relative; z-index:2; }
16
+ [data-ratio="article"] .lc-pad { padding:76px 110px; }
17
+ .lc-title { font-family:var(--serif); font-size:104px; line-height:1.08; font-weight:500; margin:0 0 34px; }
18
+ .soft-photo { height:560px; margin:0; border-radius:28px; overflow:hidden; background:#d8d0c6; box-shadow:0 20px 60px rgba(37,33,29,.14); }
19
+ .soft-photo img { width:100%; height:100%; object-fit:cover; }
20
+ .note-list { display:flex; gap:18px; margin-top:auto; }
21
+ .note-list p,.specimen-tags span { padding:18px 24px; background:rgba(255,255,255,.36); border:1px solid var(--line); }
22
+ .collage-desk { --paper:#ead8ba; --ink:#2d2014; --muted:#7d6750; --accent:#315d93; }
23
+ .paper-stack { flex:1; position:relative; }
24
+ .paper-stack figure { position:absolute; width:48%; height:42%; background:#f6ead6; box-shadow:0 14px 30px rgba(45,32,20,.18); margin:0; }
25
+ .paper-stack figure:nth-child(1) { left:4%; top:10%; transform:rotate(-5deg); }
26
+ .paper-stack figure:nth-child(2) { right:8%; top:22%; transform:rotate(4deg); }
27
+ .paper-stack figure:nth-child(3) { left:22%; bottom:8%; transform:rotate(-2deg); }
28
+ .stamp,.timecode { font-family:var(--mono); letter-spacing:.14em; color:var(--accent); }
29
+ .botanical-organic { --paper:#eef0df; --ink:#172418; --muted:#62715e; --accent:#3f7d4a; }
30
+ .specimen { height:520px; margin:0 0 34px; display:grid; place-items:center; background:rgba(63,125,74,.10); border:1px solid var(--line); }
31
+ .specimen img { max-width:80%; max-height:80%; object-fit:contain; }
32
+ .specimen-tags { display:flex; gap:16px; margin-top:auto; }
33
+ .film-contact-sheet { --paper:#1b1712; --ink:#f2dec1; --muted:#b69d78; --line:rgba(242,222,193,.2); --accent:#e0a34d; }
34
+ .frames { display:grid; grid-template-columns:repeat(2,1fr); gap:22px; margin-top:auto; }
35
+ .frames figure { height:260px; margin:0; background:#30271d; border:10px solid #0b0907; }
36
+ </style>
37
+ </head>
38
+ <body>
39
+ <main class="sheet">
40
+ <section class="poster lifestyle-collage soft-studio" data-ratio="xhs" data-style="soft-studio">
41
+ <main class="lc-pad soft">
42
+ <h1 class="lc-title">周末整理<br>工作台</h1>
43
+ <figure class="soft-photo"><img src="assets/table.jpg" alt=""></figure>
44
+ <div class="note-list"><p>光线</p><p>收纳</p><p>节奏</p></div>
45
+ </main>
46
+ </section>
47
+ </main>
48
+ </body>
49
+ </html>
@@ -0,0 +1,50 @@
1
+ <!doctype html>
2
+ <html lang="zh-CN" data-parent-style="product-brand">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <title>Product Brand Template</title>
7
+ <style>
8
+ :root { --paper:#f8f7f2; --ink:#101214; --muted:#6f757c; --line:rgba(16,18,20,.16); --accent:#0d6efd; --accent2:#16a34a; --sans:system-ui,sans-serif; --serif:"Songti SC","STSong","SimSun",serif; --mono:ui-monospace,monospace; }
9
+ * { box-sizing:border-box; }
10
+ body { margin:0; padding:48px; background:#191a1b; font-family:var(--sans); }
11
+ .sheet { display:flex; flex-direction:column; align-items:center; gap:42px; }
12
+ .poster { position:relative; overflow:hidden; background:var(--paper); color:var(--ink); isolation:isolate; }
13
+ .poster[data-ratio="xhs"] { width:1080px; height:1440px; }
14
+ .poster[data-ratio="article"] { width:1600px; height:900px; }
15
+ .poster[data-ratio="wide"] { width:2100px; height:900px; }
16
+ .pb-pad { height:100%; padding:88px; display:flex; flex-direction:column; position:relative; z-index:2; }
17
+ [data-ratio="article"] .pb-pad, [data-ratio="wide"] .pb-pad { padding:76px 110px; }
18
+ .pb-title { margin:0; font-size:104px; line-height:1.04; font-weight:300; letter-spacing:-.02em; max-width:860px; }
19
+ .product-hero { flex:1; margin:44px 0; display:grid; place-items:center; background:radial-gradient(circle at center, rgba(13,110,253,.14), transparent 54%); }
20
+ .product-hero img { max-width:78%; max-height:78%; object-fit:contain; filter:drop-shadow(0 34px 42px rgba(16,18,20,.22)); }
21
+ .callouts,.feature-tags { display:flex; gap:16px; margin-top:auto; }
22
+ .callouts span,.feature-tags span { padding:16px 22px; border:1px solid var(--line); background:#fff; font-size:28px; }
23
+ .luxury-minimal { --paper:#10100f; --ink:#f4ead7; --muted:#a89777; --line:rgba(244,234,215,.18); --accent:#d0a85a; }
24
+ .luxury .pb-title { font-family:var(--serif); font-weight:500; margin-top:auto; }
25
+ .isolated { background:transparent; border:1px solid var(--line); }
26
+ .small-label { font-family:var(--mono); letter-spacing:.14em; color:var(--muted); text-transform:uppercase; }
27
+ .brand-system { --paper:#f5f3ed; --ink:#121212; --muted:#626262; --accent:#c8372d; --accent2:#243c72; }
28
+ .palette { display:flex; gap:18px; margin:54px 0; }
29
+ .palette span { width:120px; height:120px; background:var(--accent); }
30
+ .palette span:nth-child(2) { background:var(--accent2); }
31
+ .palette span:nth-child(3) { background:var(--ink); }
32
+ .component-row { display:flex; gap:18px; margin-top:auto; }
33
+ .component-row button { border:0; padding:20px 28px; background:var(--accent); color:white; font-size:24px; }
34
+ .component-row button:nth-child(2) { background:transparent; color:var(--ink); border:1px solid var(--line); }
35
+ .screen-frame { margin:44px 0 0; height:520px; border:1px solid var(--line); background:#fff; padding:28px; }
36
+ .screen-frame img { width:100%; height:100%; object-fit:contain; }
37
+ </style>
38
+ </head>
39
+ <body>
40
+ <main class="sheet">
41
+ <section class="poster product-brand product-cutout" data-ratio="xhs" data-style="product-cutout">
42
+ <main class="pb-pad">
43
+ <h1 class="pb-title">一个工具<br>解决三件事</h1>
44
+ <figure class="product-hero"><img src="assets/product.png" alt=""></figure>
45
+ <div class="callouts"><span>快</span><span>稳</span><span>可控</span></div>
46
+ </main>
47
+ </section>
48
+ </main>
49
+ </body>
50
+ </html>
@@ -0,0 +1,49 @@
1
+ <!doctype html>
2
+ <html lang="zh-CN" data-parent-style="social-campaign">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <title>Social Campaign Template</title>
7
+ <style>
8
+ :root { --paper:#fff04a; --ink:#111; --accent:#ff3b7f; --accent2:#00a1ff; --mono:ui-monospace,monospace; --sans:system-ui,sans-serif; }
9
+ * { box-sizing: border-box; }
10
+ body { margin:0; padding:48px; background:#181818; font-family:var(--sans); }
11
+ .sheet { display:flex; flex-direction:column; align-items:center; gap:42px; }
12
+ .poster { position:relative; overflow:hidden; background:var(--paper); color:var(--ink); isolation:isolate; }
13
+ .poster[data-ratio="xhs"] { width:1080px; height:1440px; }
14
+ .poster[data-ratio="poster"] { width:1200px; height:1800px; }
15
+ .poster[data-ratio="wide"] { width:2100px; height:900px; }
16
+ .sc-pad { height:100%; padding:78px; display:flex; flex-direction:column; position:relative; z-index:2; }
17
+ .sc-title { margin:0; font-size:142px; line-height:.95; font-weight:900; letter-spacing:-.03em; max-width:880px; }
18
+ .burst,.warning,.event-meta,.ticket { font-family:var(--mono); letter-spacing:.14em; text-transform:uppercase; }
19
+ .burst { align-self:flex-start; background:var(--accent); color:#fff; padding:14px 18px; transform:rotate(-4deg); margin-bottom:28px; }
20
+ .cutout-stage { flex:1; margin:38px 0; background:rgba(255,255,255,.28); border:5px solid var(--ink); display:grid; place-items:center; }
21
+ .cutout-stage img { max-width:72%; max-height:72%; object-fit:contain; }
22
+ .badge-row { display:flex; gap:16px; margin-top:auto; }
23
+ .badge-row span { border:4px solid var(--ink); padding:16px 24px; font-size:34px; font-weight:800; background:#fff; }
24
+ .neo-brutalist { --paper:#f5f5f0; --accent:#ff4a00; }
25
+ .brutal { border:8px solid var(--ink); }
26
+ .warning { background:var(--accent); padding:16px 20px; font-size:26px; margin-bottom:34px; }
27
+ .hard-rows { margin-top:auto; border-top:6px solid var(--ink); }
28
+ .hard-rows p { margin:0; padding:26px 0; border-bottom:4px solid var(--ink); font-size:46px; font-weight:900; }
29
+ .maximal-poster { --paper:#101010; --ink:#f7f03a; --accent:#f0185c; --accent2:#00d4ff; }
30
+ .repeat-word { position:absolute; inset:60px 20px auto; font-size:118px; font-weight:900; color:var(--accent); opacity:.55; line-height:.85; }
31
+ .maximal .sc-title { margin-top:auto; color:var(--ink); text-shadow:8px 8px 0 var(--accent); }
32
+ .event-key-visual { --paper:#151414; --ink:#fff1d0; --accent:#ffcf33; --accent2:#ff5a3d; }
33
+ .key-shape { width:520px; height:520px; background:linear-gradient(135deg,var(--accent),var(--accent2)); margin:auto; transform:rotate(12deg); }
34
+ .ticket { border-top:2px solid rgba(255,241,208,.4); padding-top:22px; font-size:24px; color:var(--ink); }
35
+ </style>
36
+ </head>
37
+ <body>
38
+ <main class="sheet">
39
+ <section class="poster social-campaign pop-magazine" data-ratio="xhs" data-style="pop-magazine">
40
+ <main class="sc-pad">
41
+ <p class="burst">SAVE THIS</p>
42
+ <h1 class="sc-title">这 6 个<br>真的好用</h1>
43
+ <div class="cutout-stage"><img src="assets/item.png" alt=""></div>
44
+ <div class="badge-row"><span>实测</span><span>清单</span><span>避坑</span></div>
45
+ </main>
46
+ </section>
47
+ </main>
48
+ </body>
49
+ </html>
@@ -0,0 +1,45 @@
1
+ <!doctype html>
2
+ <html lang="zh-CN" data-parent-style="technical-diagram">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <title>Technical Diagram Template</title>
7
+ <style>
8
+ :root { --paper:#fafaf8; --ink:#0a0a0a; --muted:#737373; --line:#d4d4d2; --accent:#002fa7; --sans:system-ui,sans-serif; --mono:ui-monospace,monospace; }
9
+ * { box-sizing:border-box; }
10
+ body { margin:0; padding:48px; background:#1b1b1b; font-family:var(--sans); }
11
+ .sheet { display:flex; flex-direction:column; align-items:center; gap:42px; }
12
+ .poster { position:relative; overflow:hidden; background:var(--paper); color:var(--ink); isolation:isolate; }
13
+ .poster[data-ratio="xhs"] { width:1080px; height:1440px; }
14
+ .poster[data-ratio="article"] { width:1600px; height:900px; }
15
+ .poster[data-ratio="wide"] { width:2100px; height:900px; }
16
+ .td-pad { height:100%; padding:88px; display:flex; flex-direction:column; position:relative; z-index:2; }
17
+ [data-ratio="article"] .td-pad, [data-ratio="wide"] .td-pad { padding:76px 110px; }
18
+ .td-meta,.legend,.terminal { font-family:var(--mono); letter-spacing:.14em; text-transform:uppercase; color:var(--muted); margin:0 0 28px; }
19
+ .td-title { margin:0; font-size:118px; line-height:1.04; font-weight:250; letter-spacing:-.02em; max-width:860px; }
20
+ .td-matrix { margin-top:auto; display:grid; grid-template-columns:repeat(2,1fr); gap:22px; }
21
+ .td-matrix div,.hud-grid div,.node-map span,.flow span { border:1px solid var(--line); padding:30px; font-size:34px; background:rgba(0,0,0,.03); }
22
+ .blueprint-technical { --paper:#092448; --ink:#e6f2ff; --muted:#9db9d6; --line:rgba(230,242,255,.26); --accent:#58c7ff; }
23
+ .blueprint::before { content:""; position:absolute; inset:0; opacity:.22; background-image:linear-gradient(to right,var(--ink) 1px,transparent 1px),linear-gradient(to bottom,var(--ink) 1px,transparent 1px); background-size:48px 48px; }
24
+ .node-map { margin-top:auto; display:grid; grid-template-columns:repeat(3,1fr); gap:28px; position:relative; z-index:2; }
25
+ .cyber-interface { --paper:#090b12; --ink:#edf4ff; --muted:#8aa0bf; --line:rgba(237,244,255,.22); --accent:#00e0ff; }
26
+ .cyber { background:radial-gradient(circle at 80% 20%, rgba(0,224,255,.18), transparent 34%); }
27
+ .terminal { color:var(--accent); }
28
+ .hud-grid { margin-top:auto; display:grid; grid-template-columns:repeat(3,1fr); gap:24px; }
29
+ .calm-diagram { --paper:#f7f5ef; --ink:#1f2933; --muted:#6b7280; --line:#d8d4c8; --accent:#4c6fff; }
30
+ .flow { margin-top:auto; display:grid; grid-template-columns:repeat(4,1fr); gap:20px; }
31
+ .flow span { border-color:var(--accent); text-align:center; }
32
+ </style>
33
+ </head>
34
+ <body>
35
+ <main class="sheet">
36
+ <section class="poster technical-diagram swiss-data" data-ratio="xhs" data-style="swiss-data">
37
+ <main class="td-pad">
38
+ <p class="td-meta">SYSTEM / 01</p>
39
+ <h1 class="td-title">一个流程<br>四个节点</h1>
40
+ <div class="td-matrix"><div>输入</div><div>处理</div><div>验证</div><div>输出</div></div>
41
+ </main>
42
+ </section>
43
+ </main>
44
+ </body>
45
+ </html>