design: add homepage prototypes (v1/v2), pick v1 for T-606
- prototypes/cmhub-homepage-v1.svg 「生成台」(靛蓝×琥珀,电商转化 Hero)— 选定 - prototypes/cmhub-homepage-v2.svg 「API 终端」(深色 curl→JSON)— 留作开发者页参考 - 06-tasks.md T-606 验收指向 v1 原型;progress.md 记录选型决策 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+1
-1
@@ -84,7 +84,7 @@
|
||||
| T-603 | django-admin 中文化(第 4 层·字段级) | T-602 | 给各模型**字段**加中文 `verbose_name`,使 admin 列表/编辑页的字段标签显示中文,在 T-602(1-3 层)之上做。范围覆盖 `users`/`billing`/`ai`(及 portal 相关)模型的业务字段,例如 `points_balance`→点数余额、`key_prefix`→Key 前缀、`points_delta`→点数变动、`balance_after`→变动后余额、`amount_money`→金额、`exchange_rate`→汇率、`points_granted`→到账点数、`api_type`/`capabilities`/`is_active`/`created_at` 等;`admin.py` 里自定义显示方法(`@admin.display(description=...)`)同步中文。**仅显示层**:`verbose_name` 只改展示,**不改字段名、不改代码引用、英文字段名保持不变**;产出的是 `AlterField`(metadata-only,**无 DB schema 变更**)迁移。验收:`makemigrations`(仅 AlterField,无 schema 变更)→ `migrate` → `check` 0 issues → `test` 全绿 → `/admin/` 字段标签目视中文,并在 `../progress.md` 留证据。T-605 已解除邮箱验证口径阻塞;当前待在稳定 MySQL 测试库上补跑完整验证后再标 `DONE` | TODO |
|
||||
| T-605 | 落实「免邮箱验证」策略 | T-501 | 把 `ACCOUNT_EMAIL_VERIFICATION="none"`(注册即可用、不发验证邮件、邮箱仍必填且唯一)作为**既定策略**清理落地:① `config/settings.py` 把 `ACCOUNT_EMAIL_VERIFICATION = "none"#"mandatory"` 改为干净的 `"none"`(去行内注释),并把免验证下无实际意义的 `ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION` 设为 `False`;② 更新 `apps/portal/tests.py` 里假设 mandatory 的 2 条测试(signup 不再依赖验证邮件、未验证也可直接登录),改为断言「注册后可直接登录」;③ 同步全项目文档口径(`02-requirements`/`05-coding-rules`/`api`/`04-architecture`/`03-tech-stack`/`routes`/`env`/`deployment`/`00-ai-start-here` 中「邮箱验证」→「免邮箱验证,邮箱仍唯一」)。验收:`check` 通过,`apps.portal` 26 tests OK;全量 `manage.py test` 已尝试,跑到 95/131 后因远程 MySQL 连接超时失败(WinError 10051/10060),非本任务断言失败,详见 `../progress.md` | DONE |
|
||||
| T-604 | 中文敏感词本地过滤(本地 keyword provider) | T-302, T-401 | 按 [`moderation.md`](moderation.md) 实施。**范围收紧**:T-604 只做输入 prompt 的本地敏感词快筛,不做云内容安全、不做输出审核、不做图片审核。**关键时序**:serializer 后先审 prompt,命中即 `400 content_blocked`;不得先下载 `image_url`,不得预扣点,不写 `CallRecord` / `PointsLedger`,不调上游。**核心实现**:新增 `apps.moderation`、`SensitiveWord` 模型/admin/迁移、keyword provider、归一化管线、Aho-Corasick matcher;`ahocorapy` 作为候选依赖,编码前必须验证 PyPI 可用性和 API 形状。**缓存**:matcher 进程内缓存,词库变更用共享 cache 版本号失效,不能只靠 `post_save` signal;生产依赖共享 cache。**配置**:`MODERATION_ENABLED=false` 默认 no-op;启用时 `MODERATION_PROVIDER=keyword`;MVP `SensitiveWord.action` 只支持 `block`。**验收**:`check`/`test` 全绿,覆盖 no-op、命中拦截且不扣点/不建记录/不调上游/不下载图片、归一化防绕过、词库变更后 matcher 重建;真实词库数据不进仓库,`__pycache__` 不进 Git | DONE |
|
||||
| T-606 | 公开首页 + 客户端下载入口 | T-501 | 给网站补「前门」并提供桌面端下载。**路由改造**:`/` 从「重定向到 `/dashboard`」改为**公开首页**(匿名可访问、不跳登录);已登录用户显示「进入控制台」,匿名显示「注册/登录 + 下载客户端」。**首页内容**(SSR 模板):项目一句话介绍(生成标题/图片、按点数计费)+ 三步上手(注册→充值→建 API Key→桌面端填 Key)+ 下载入口 + 文档链接。**`DownloadRelease` 模型**:`platform`(如 windows)、`version`、`file`(FileField,**前期存 `MEDIA_ROOT`、服务器托管**) + `external_url`(URLField 可选,**后续切对象存储/CDN 用,有则优先**)、`sha256`、`is_current`(每平台仅一个当前版本)、`release_notes`、时间戳;admin 可上传安装包并标记当前版本;迁移。**下载区块**:展示当前 release 的版本、下载按钮、**SHA256 校验值**、可选 release notes;无 current release 时优雅提示「暂未发布」。**托管策略**:**前期安装包放本服务器**(生产由 **Nginx 直接服务 media/下载文件、不走 Django**,与 T-403 static/media serving 一致,大文件不占 gunicorn worker);`external_url` 预留,后续切对象存储只改后台链接不改代码。**安全**:下载走 HTTPS,页面展示 SHA256 供校验;**代码签名**作为决策登记——未签名 Windows 安装包会被 SmartScreen 拦「未知发布者」、macOS 被 Gatekeeper 拦,首页先给「如何忽略警告」说明,正式签名后续补(挂 Backlog / deployment)。**含测试**:`/` 匿名 200 不跳登录、下载区展示当前 release、无 current release 优雅处理、已登录用户显示「进入控制台」。验收 `check`/`test`/`init` 全绿并在 `../progress.md` 留证据 | TODO |
|
||||
| T-606 | 公开首页 + 客户端下载入口 | T-501 | 给网站补「前门」并提供桌面端下载。**路由改造**:`/` 从「重定向到 `/dashboard`」改为**公开首页**(匿名可访问、不跳登录);已登录用户显示「进入控制台」,匿名显示「注册/登录 + 下载客户端」。**首页内容**(SSR 模板):项目一句话介绍(生成标题/图片、按点数计费)+ 三步上手(注册→充值→建 API Key→桌面端填 Key)+ 下载入口 + 文档链接。**`DownloadRelease` 模型**:`platform`(如 windows)、`version`、`file`(FileField,**前期存 `MEDIA_ROOT`、服务器托管**) + `external_url`(URLField 可选,**后续切对象存储/CDN 用,有则优先**)、`sha256`、`is_current`(每平台仅一个当前版本)、`release_notes`、时间戳;admin 可上传安装包并标记当前版本;迁移。**下载区块**:展示当前 release 的版本、下载按钮、**SHA256 校验值**、可选 release notes;无 current release 时优雅提示「暂未发布」。**托管策略**:**前期安装包放本服务器**(生产由 **Nginx 直接服务 media/下载文件、不走 Django**,与 T-403 static/media serving 一致,大文件不占 gunicorn worker);`external_url` 预留,后续切对象存储只改后台链接不改代码。**安全**:下载走 HTTPS,页面展示 SHA256 供校验;**代码签名**作为决策登记——未签名 Windows 安装包会被 SmartScreen 拦「未知发布者」、macOS 被 Gatekeeper 拦,首页先给「如何忽略警告」说明,正式签名后续补(挂 Backlog / deployment)。**含测试**:`/` 匿名 200 不跳登录、下载区展示当前 release、无 current release 优雅处理、已登录用户显示「进入控制台」。**视觉原型(已定 v1)**:按 `prototypes/cmhub-homepage-v1.svg` 落地——「生成台」方向:靛蓝=生成 / 琥珀=点数;Hero 为「商品图 + 一句话 → 吸睛标题 + 生成主图 + 点数计量」转化图;四步上手 01–04、两张能力卡、深色计费 band、下载区(版本/SHA256/未签名提示);配色、间距、结构照此原型转成 Django 模板(Bootstrap + 本地 static)。验收 `check`/`test`/`init` 全绿并在 `../progress.md` 留证据 | TODO |
|
||||
|
||||
## 里程碑
|
||||
|
||||
|
||||
@@ -1281,3 +1281,12 @@
|
||||
- 落点:`06-tasks.md` T-606(依赖 T-501);`02-requirements.md` 新增「公开首页 + 客户端下载」P1 功能行。
|
||||
- ID 说明:T-605 已用于「免邮箱验证」,故本任务用 T-606。
|
||||
- 下一步:实现 T-606(路由改造 + DownloadRelease 模型/admin/迁移 + 首页/下载 SSR 模板 + 测试)。
|
||||
|
||||
## 2026-07-06 决策:T-606 首页视觉方向定为 v1「生成台」
|
||||
|
||||
- 背景:为 T-606(公开首页 + 客户端下载)出了两版 SVG 原型,写入 `prototypes/`:
|
||||
- `cmhub-homepage-v1.svg`——「生成台」:冷调纸白 + 靛蓝(生成)×琥珀(点数),Hero 为「商品图+一句话 → 标题+主图 + 点数计量」转化图,面向电商卖家、讲价值。
|
||||
- `cmhub-homepage-v2.svg`——「API 终端」:深色控制台 + 等宽字体,Hero 为真实 `curl → JSON`,面向开发者。
|
||||
- 决策:**首页采用 v1「生成台」方向**。理由:首页第一受众是自助注册的电商卖家,v1 的「看图就懂 + 讲价值」更利于转化;v2 的终端质感更适合后续「开发者/文档页」,可保留复用,非二选一。
|
||||
- 落点:`06-tasks.md` T-606 验收要点已指向 `prototypes/cmhub-homepage-v1.svg`,要求配色/间距/结构照此原型转 Django 模板(Bootstrap + 本地 static)。
|
||||
- 说明:`prototypes/` 两个 SVG 为设计存档,未来实现 T-606 时以 v1 为准;v2 留作开发者页参考。
|
||||
|
||||
@@ -0,0 +1,294 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1440 2620" width="1440" height="2620" font-family="'Space Grotesk','PingFang SC','Microsoft YaHei','Noto Sans SC',system-ui,sans-serif">
|
||||
<defs>
|
||||
<linearGradient id="btn" x1="0" y1="0" x2="0" y2="1">
|
||||
<stop offset="0" stop-color="#6455F2"/>
|
||||
<stop offset="1" stop-color="#4335CF"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="thread" x1="0" y1="0" x2="0" y2="1">
|
||||
<stop offset="0" stop-color="#5B4BEF"/>
|
||||
<stop offset="1" stop-color="#E8A02D"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="band" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0" stop-color="#1B1740"/>
|
||||
<stop offset="1" stop-color="#2A1E5E"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="thumb" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0" stop-color="#EEF0F7"/>
|
||||
<stop offset="1" stop-color="#DDE2F0"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="thumbOut" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0" stop-color="#ECEBFF"/>
|
||||
<stop offset="1" stop-color="#FBEFD9"/>
|
||||
</linearGradient>
|
||||
<filter id="soft" x="-20%" y="-20%" width="140%" height="140%">
|
||||
<feDropShadow dx="0" dy="18" stdDeviation="30" flood-color="#1A2030" flood-opacity="0.10"/>
|
||||
</filter>
|
||||
<filter id="softsm" x="-40%" y="-40%" width="180%" height="180%">
|
||||
<feDropShadow dx="0" dy="8" stdDeviation="14" flood-color="#1A2030" flood-opacity="0.10"/>
|
||||
</filter>
|
||||
<style>
|
||||
.ink{fill:#1A2030}.soft{fill:#5A6478}.faint{fill:#8A93A6}.white{fill:#FFFFFF}
|
||||
.indigo{fill:#5B4BEF}.amber{fill:#C9821A}
|
||||
.eyebrow{font-size:13px;font-weight:600;letter-spacing:4px;fill:#5B4BEF}
|
||||
.h1{font-size:58px;font-weight:700;letter-spacing:-1.5px;fill:#161C2B}
|
||||
.lead{font-size:19px;font-weight:400;fill:#5A6478}
|
||||
.sectitle{font-size:38px;font-weight:700;letter-spacing:-0.8px;fill:#161C2B}
|
||||
.cardtitle{font-size:22px;font-weight:700;fill:#1A2030}
|
||||
.body{font-size:15.5px;font-weight:400;fill:#5A6478}
|
||||
.btn{font-size:17px;font-weight:600}
|
||||
.num{font-size:15px;font-weight:700;letter-spacing:2px;fill:#5B4BEF}
|
||||
.kicker{font-size:13px;font-weight:600;letter-spacing:2px;fill:#8A93A6}
|
||||
.mono{font-family:'JetBrains Mono','SFMono-Regular',Consolas,monospace}
|
||||
.chiptxt{font-size:14px;font-weight:500;fill:#3A3560}
|
||||
.metric{font-size:13px;font-weight:700;letter-spacing:1px}
|
||||
</style>
|
||||
</defs>
|
||||
|
||||
<!-- paper -->
|
||||
<rect width="1440" height="2620" fill="#F5F7FB"/>
|
||||
|
||||
<!-- ============ NAV ============ -->
|
||||
<g>
|
||||
<!-- wordmark: a metering glyph + cmhub -->
|
||||
<rect x="120" y="30" width="30" height="30" rx="9" fill="url(#btn)"/>
|
||||
<rect x="128" y="46" width="4" height="8" rx="2" fill="#fff"/>
|
||||
<rect x="136" y="41" width="4" height="13" rx="2" fill="#fff"/>
|
||||
<rect x="144" y="37" width="4" height="17" rx="2" fill="#E8A02D"/>
|
||||
<text x="164" y="52" font-size="22" font-weight="700" class="ink">cmhub</text>
|
||||
|
||||
<text x="470" y="51" font-size="15.5" font-weight="500" class="soft">功能</text>
|
||||
<text x="560" y="51" font-size="15.5" font-weight="500" class="soft">计费</text>
|
||||
<text x="650" y="51" font-size="15.5" font-weight="500" class="soft">文档</text>
|
||||
|
||||
<text x="1085" y="51" font-size="15.5" font-weight="600" class="ink">登录</text>
|
||||
<rect x="1160" y="26" width="160" height="40" rx="10" fill="url(#btn)"/>
|
||||
<text x="1240" y="51" text-anchor="middle" class="btn white">免费注册</text>
|
||||
</g>
|
||||
<line x1="0" y1="82" x2="1440" y2="82" stroke="#E7EBF3" stroke-width="1"/>
|
||||
|
||||
<!-- ============ HERO ============ -->
|
||||
<!-- left column -->
|
||||
<g>
|
||||
<text x="120" y="176" class="eyebrow">AI 电商生成 · 按点数计费</text>
|
||||
<text x="118" y="252" class="h1">把商品图和一句话,</text>
|
||||
<text x="118" y="322" class="h1">变成能卖货的</text>
|
||||
<text x="500" y="322" class="h1" fill="#5B4BEF">标题与主图</text>
|
||||
<text x="810" y="322" class="h1">。</text>
|
||||
|
||||
<text x="120" y="392" class="lead">cmhub 把「生成标题」「生成主图」封装成 HTTP 接口,桌面端拿</text>
|
||||
<text x="120" y="422" class="lead">API Key 直接用,按点数计费——换底层模型,价格不变。</text>
|
||||
|
||||
<!-- CTAs -->
|
||||
<rect x="120" y="466" width="196" height="56" rx="12" fill="url(#btn)"/>
|
||||
<text x="218" y="501" text-anchor="middle" class="btn white">免费注册 →</text>
|
||||
|
||||
<rect x="332" y="466" width="256" height="56" rx="12" fill="#fff" stroke="#D3D9E6" stroke-width="1.5"/>
|
||||
<path d="M362 494 v10 M357 499 l5 5 l5 -5 M354 511 h16" stroke="#1A2030" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<text x="388" y="490" font-size="15" font-weight="600" class="ink">下载 Windows 客户端</text>
|
||||
<text x="388" y="510" font-size="12.5" class="faint mono">v1.0.0 · 48 MB</text>
|
||||
|
||||
<!-- trust line -->
|
||||
<g transform="translate(120,566)">
|
||||
<circle cx="6" cy="6" r="5" fill="none" stroke="#C9821A" stroke-width="2"/>
|
||||
<text x="22" y="11" font-size="14" class="soft">注册不送点数 · 邮箱即用免验证 · 生成标题 <tspan font-weight="700" fill="#C9821A">2 点</tspan> 起</text>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
<!-- right column: 生成台 SIGNATURE -->
|
||||
<g filter="url(#soft)">
|
||||
<rect x="762" y="150" width="558" height="452" rx="22" fill="#fff"/>
|
||||
</g>
|
||||
<g>
|
||||
<!-- card header -->
|
||||
<circle cx="792" cy="192" r="4" fill="#3FCB7E"/>
|
||||
<text x="806" y="197" font-size="14" font-weight="700" class="ink">cmhub 生成台</text>
|
||||
<text x="1290" y="197" text-anchor="end" class="kicker">实时预览</text>
|
||||
<line x1="790" y1="214" x2="1292" y2="214" stroke="#EEF1F7"/>
|
||||
|
||||
<!-- INPUT -->
|
||||
<text x="790" y="248" class="kicker">输入</text>
|
||||
<rect x="790" y="260" width="502" height="76" rx="14" fill="#FAFBFE" stroke="#EBEEF6"/>
|
||||
<rect x="804" y="274" width="48" height="48" rx="10" fill="url(#thumb)"/>
|
||||
<path d="M818 312 l7 -12 l6 8 l5 -6 l6 10 z" fill="#B9C0D6"/>
|
||||
<circle cx="820" cy="290" r="4" fill="#C4CBDE"/>
|
||||
<text x="868" y="290" font-size="15" font-weight="600" class="ink">白色纯棉基础款 T 恤</text>
|
||||
<text x="868" y="313" font-size="13" class="faint">提示词:夏季清爽 · 男女同款 · 主图去背景</text>
|
||||
|
||||
<!-- pipeline: thread + 点数计量 -->
|
||||
<line x1="1041" y1="344" x2="1041" y2="378" stroke="url(#thread)" stroke-width="2.5" stroke-dasharray="3 4"/>
|
||||
<rect x="946" y="348" width="190" height="26" rx="13" fill="#FBEFD9"/>
|
||||
<path d="M962 361 h10 M967 356 v10" stroke="#C9821A" stroke-width="2" stroke-linecap="round"/>
|
||||
<text x="982" y="365" class="metric" fill="#9A6510">生成中 · 计量扣点</text>
|
||||
|
||||
<!-- OUTPUT -->
|
||||
<text x="790" y="410" class="kicker">输出</text>
|
||||
<!-- title chips -->
|
||||
<g>
|
||||
<rect x="790" y="422" width="330" height="34" rx="9" fill="#F3F2FF"/>
|
||||
<text x="806" y="444" class="chiptxt">纯棉白T恤男夏季薄款情侣装宽松半袖</text>
|
||||
<text x="1104" y="444" text-anchor="end" class="metric" fill="#5B4BEF">−2</text>
|
||||
|
||||
<rect x="790" y="464" width="330" height="34" rx="9" fill="#F3F2FF"/>
|
||||
<text x="806" y="486" class="chiptxt">日系基础款白色短袖打底衫百搭上衣</text>
|
||||
<text x="1104" y="486" text-anchor="end" class="metric" fill="#5B4BEF">−2</text>
|
||||
|
||||
<rect x="790" y="506" width="330" height="34" rx="9" fill="#F3F2FF"/>
|
||||
<text x="806" y="528" class="chiptxt">纯色圆领纯棉T恤男女同款舒适透气</text>
|
||||
<text x="1104" y="528" text-anchor="end" class="metric" fill="#5B4BEF">−2</text>
|
||||
</g>
|
||||
<!-- generated 主图 -->
|
||||
<rect x="1138" y="422" width="154" height="118" rx="14" fill="url(#thumbOut)" stroke="#E7E3FA"/>
|
||||
<circle cx="1215" cy="470" r="22" fill="#fff" opacity="0.7"/>
|
||||
<path d="M1189 516 l20 -26 l14 16 l10 -12 l18 22 z" fill="#CFC6F2"/>
|
||||
<rect x="1150" y="522" width="70" height="9" rx="4" fill="#fff" opacity="0.8"/>
|
||||
<text x="1215" y="474" text-anchor="middle" class="metric" fill="#9A6510">主图 −10</text>
|
||||
</g>
|
||||
|
||||
<line x1="120" y1="700" x2="1320" y2="700" stroke="#E7EBF3"/>
|
||||
|
||||
<!-- ============ 上手 (real sequence → numbered) ============ -->
|
||||
<g>
|
||||
<text x="120" y="792" class="eyebrow">开始使用</text>
|
||||
<text x="120" y="846" class="sectitle">四步,在你自己的程序里生成</text>
|
||||
<text x="120" y="884" class="lead">用户端负责注册、充值、管 Key;生成走 API。运营在后台配模型和价格,调用方零改动。</text>
|
||||
|
||||
<!-- connecting line -->
|
||||
<line x1="180" y1="985" x2="1260" y2="985" stroke="#E2E6F0" stroke-width="2" stroke-dasharray="2 6"/>
|
||||
|
||||
<!-- step template -->
|
||||
<g>
|
||||
<text x="120" y="978" class="num">01</text>
|
||||
<circle cx="184" cy="985" r="7" fill="#fff" stroke="#5B4BEF" stroke-width="2.5"/>
|
||||
<text x="120" y="1030" class="cardtitle" font-size="19">注册账号</text>
|
||||
<text x="120" y="1058" class="body">邮箱 + 密码即注册即用,</text>
|
||||
<text x="120" y="1080" class="body">免验证,不送点数。</text>
|
||||
</g>
|
||||
<g>
|
||||
<text x="420" y="978" class="num">02</text>
|
||||
<circle cx="484" cy="985" r="7" fill="#fff" stroke="#5B4BEF" stroke-width="2.5"/>
|
||||
<text x="420" y="1030" class="cardtitle" font-size="19">扫码充值点数</text>
|
||||
<text x="420" y="1058" class="body">微信/支付宝扫码,</text>
|
||||
<text x="420" y="1080" class="body">按汇率换成点数。</text>
|
||||
</g>
|
||||
<g>
|
||||
<text x="720" y="978" class="num">03</text>
|
||||
<circle cx="784" cy="985" r="7" fill="#fff" stroke="#5B4BEF" stroke-width="2.5"/>
|
||||
<text x="720" y="1030" class="cardtitle" font-size="19">生成 API Key</text>
|
||||
<text x="720" y="1058" class="body">自助生成,明文只显示</text>
|
||||
<text x="720" y="1080" class="body">一次,库内只存哈希。</text>
|
||||
</g>
|
||||
<g>
|
||||
<text x="1020" y="978" class="num" fill="#C9821A">04</text>
|
||||
<circle cx="1084" cy="985" r="7" fill="#C9821A"/>
|
||||
<text x="1020" y="1030" class="cardtitle" font-size="19">桌面端填 Key 用</text>
|
||||
<text x="1020" y="1058" class="body">客户端带 Key 调接口,</text>
|
||||
<text x="1020" y="1080" class="body">生成标题与主图。</text>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
<!-- ============ 能力 ============ -->
|
||||
<g>
|
||||
<text x="120" y="1218" class="eyebrow">能做什么</text>
|
||||
<text x="120" y="1264" class="sectitle">两件事,做到能直接上架</text>
|
||||
</g>
|
||||
<!-- card A: 标题 -->
|
||||
<g filter="url(#softsm)"><rect x="120" y="1310" width="576" height="230" rx="18" fill="#fff"/></g>
|
||||
<g>
|
||||
<rect x="152" y="1342" width="52" height="52" rx="14" fill="#ECEBFF"/>
|
||||
<path d="M167 1362 h22 M167 1370 h22 M167 1378 h14" stroke="#5B4BEF" stroke-width="2.4" stroke-linecap="round"/>
|
||||
<text x="152" y="1432" class="cardtitle">生成标题</text>
|
||||
<rect x="560" y="1352" width="104" height="30" rx="15" fill="#F3F2FF"/>
|
||||
<text x="612" y="1372" text-anchor="middle" class="metric" fill="#5B4BEF">2 点 / 次起</text>
|
||||
<text x="152" y="1468" class="body">给商品生成多个吸睛中文标题,可纯文字,也可看图生成。</text>
|
||||
<text x="152" y="1494" class="body">别名调用,换底层模型价格不变;失败自动退点。</text>
|
||||
</g>
|
||||
<!-- card B: 主图 -->
|
||||
<g filter="url(#softsm)"><rect x="744" y="1310" width="576" height="230" rx="18" fill="#fff"/></g>
|
||||
<g>
|
||||
<rect x="776" y="1342" width="52" height="52" rx="14" fill="#FBEFD9"/>
|
||||
<rect x="789" y="1356" width="26" height="24" rx="5" fill="none" stroke="#C9821A" stroke-width="2.2"/>
|
||||
<circle cx="797" cy="1364" r="2.6" fill="#C9821A"/>
|
||||
<path d="M791 1378 l6 -7 l5 5 l4 -5 l6 7 z" fill="#C9821A"/>
|
||||
<text x="776" y="1432" class="cardtitle">生成主图 / 改图</text>
|
||||
<rect x="1176" y="1352" width="112" height="30" rx="15" fill="#FBEFD9"/>
|
||||
<text x="1232" y="1372" text-anchor="middle" class="metric" fill="#C9821A">10 点 / 次起</text>
|
||||
<text x="776" y="1468" class="body">传商品原图 + 提示词,同步产出电商主图(改图类需原图)。</text>
|
||||
<text x="776" y="1494" class="body">按分辨率计价,结果以 URL 返回,客户端直接下载。</text>
|
||||
</g>
|
||||
|
||||
<!-- ============ 计费 band (the one dark moment) ============ -->
|
||||
<g filter="url(#soft)"><rect x="120" y="1620" width="1200" height="300" rx="24" fill="url(#band)"/></g>
|
||||
<g>
|
||||
<text x="168" y="1698" class="eyebrow" fill="#B7AEFF">怎么计费</text>
|
||||
<text x="166" y="1752" font-size="34" font-weight="700" fill="#fff" letter-spacing="-0.5">按「操作 + 能力别名 + 分辨率」定价</text>
|
||||
<text x="168" y="1794" font-size="16.5" fill="#C9C6E8">运营在后台配价,你只认稳定别名。换供应商、换模型,你的账单口径不变。</text>
|
||||
|
||||
<!-- three honest points -->
|
||||
<g transform="translate(168,1836)">
|
||||
<circle cx="8" cy="8" r="8" fill="#2E2861"/><path d="M4 8 l3 3 l5 -6" stroke="#8B7BFF" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<text x="28" y="13" font-size="15" fill="#E4E1F7">充值→点数,充多少到多少</text>
|
||||
</g>
|
||||
<g transform="translate(508,1836)">
|
||||
<circle cx="8" cy="8" r="8" fill="#2E2861"/><path d="M4 8 l3 3 l5 -6" stroke="#8B7BFF" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<text x="28" y="13" font-size="15" fill="#E4E1F7">失败自动退点,不白扣</text>
|
||||
</g>
|
||||
<g transform="translate(820,1836)">
|
||||
<circle cx="8" cy="8" r="8" fill="#2E2861"/><path d="M4 8 l3 3 l5 -6" stroke="#8B7BFF" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<text x="28" y="13" font-size="15" fill="#E4E1F7">并发扣点安全,不超扣</text>
|
||||
</g>
|
||||
|
||||
<!-- points meter (amber) -->
|
||||
<text x="1272" y="1698" text-anchor="end" class="kicker" fill="#9A8FE0">当前余额</text>
|
||||
<text x="1272" y="1748" text-anchor="end" font-size="46" font-weight="700" fill="#F2B44B" class="mono">1,280</text>
|
||||
<text x="1272" y="1772" text-anchor="end" font-size="13" fill="#9A8FE0">点</text>
|
||||
<rect x="1020" y="1800" width="252" height="10" rx="5" fill="#2E2861"/>
|
||||
<rect x="1020" y="1800" width="176" height="10" rx="5" fill="#E8A02D"/>
|
||||
<text x="1020" y="1836" font-size="12.5" fill="#9A8FE0" class="mono">≈ 128 次标题 / 128 点消耗本月</text>
|
||||
</g>
|
||||
|
||||
<!-- ============ 下载 ============ -->
|
||||
<g>
|
||||
<text x="120" y="2016" class="eyebrow">下载客户端</text>
|
||||
<text x="120" y="2062" class="sectitle">装上桌面端,填 Key 就能生成</text>
|
||||
</g>
|
||||
<g filter="url(#softsm)"><rect x="120" y="2100" width="1200" height="180" rx="20" fill="#fff"/></g>
|
||||
<g>
|
||||
<rect x="152" y="2136" width="70" height="70" rx="18" fill="url(#btn)"/>
|
||||
<rect x="172" y="2156" width="13" height="13" rx="2" fill="#fff"/><rect x="189" y="2156" width="13" height="13" rx="2" fill="#fff"/>
|
||||
<rect x="172" y="2172" width="13" height="13" rx="2" fill="#E8A02D"/><rect x="189" y="2172" width="13" height="13" rx="2" fill="#fff"/>
|
||||
|
||||
<text x="248" y="2158" class="cardtitle">cmhub 桌面客户端</text>
|
||||
<text x="248" y="2186" font-size="14" class="soft mono">Windows 10/11 · v1.0.0 · 更新于 2026-07-06 · 48 MB</text>
|
||||
<text x="248" y="2214" font-size="13" class="faint mono">SHA256 9f2c…a17e (下载后请核对校验值)</text>
|
||||
<text x="248" y="2244" font-size="12.5" fill="#9A6510">首次安装若提示「未知发布者」,点『更多信息 → 仍要运行』——客户端正在申请代码签名。</text>
|
||||
|
||||
<rect x="1052" y="2150" width="236" height="80" rx="14" fill="url(#btn)"/>
|
||||
<path d="M1092 2182 v20 M1084 2192 l8 9 l8 -9 M1080 2214 h24" stroke="#fff" stroke-width="2.4" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<text x="1188" y="2185" text-anchor="middle" font-size="18" font-weight="700" fill="#fff">下载 .exe</text>
|
||||
<text x="1188" y="2208" text-anchor="middle" font-size="12.5" fill="#CFC9F5">前期由本站直连下载</text>
|
||||
</g>
|
||||
|
||||
<!-- ============ FOOTER ============ -->
|
||||
<line x1="120" y1="2372" x2="1320" y2="2372" stroke="#E4E8F1"/>
|
||||
<g>
|
||||
<rect x="120" y="2418" width="26" height="26" rx="8" fill="url(#btn)"/>
|
||||
<rect x="127" y="2431" width="3.4" height="7" rx="1.7" fill="#fff"/><rect x="134" y="2427" width="3.4" height="11" rx="1.7" fill="#fff"/><rect x="141" y="2424" width="3.4" height="14" rx="1.7" fill="#E8A02D"/>
|
||||
<text x="158" y="2439" font-size="18" font-weight="700" class="ink">cmhub</text>
|
||||
<text x="120" y="2470" font-size="13.5" class="faint">自助用户端 · 计费 AI 能力网关 · 运营后台,三合一。</text>
|
||||
|
||||
<text x="700" y="2426" font-size="13" font-weight="600" class="soft">产品</text>
|
||||
<text x="700" y="2454" font-size="13.5" class="faint">功能</text>
|
||||
<text x="700" y="2478" font-size="13.5" class="faint">计费说明</text>
|
||||
|
||||
<text x="880" y="2426" font-size="13" font-weight="600" class="soft">开发者</text>
|
||||
<text x="880" y="2454" font-size="13.5" class="faint">接口文档</text>
|
||||
<text x="880" y="2478" font-size="13.5" class="faint">可用模型</text>
|
||||
|
||||
<text x="1060" y="2426" font-size="13" font-weight="600" class="soft">账户</text>
|
||||
<text x="1060" y="2454" font-size="13.5" class="faint">登录</text>
|
||||
<text x="1060" y="2478" font-size="13.5" class="faint">免费注册</text>
|
||||
|
||||
<text x="1320" y="2454" text-anchor="end" font-size="12.5" class="faint">© 2026 cmhub</text>
|
||||
<text x="1320" y="2478" text-anchor="end" font-size="12.5" class="faint">粤ICP备 000000 号(占位)</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 17 KiB |
@@ -0,0 +1,254 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1440 2600" width="1440" height="2600" font-family="'Space Grotesk','PingFang SC','Microsoft YaHei','Noto Sans SC',system-ui,sans-serif">
|
||||
<defs>
|
||||
<linearGradient id="btn2" x1="0" y1="0" x2="0" y2="1">
|
||||
<stop offset="0" stop-color="#8071FF"/><stop offset="1" stop-color="#5B49E8"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="glow" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0" stop-color="#1A2136"/><stop offset="1" stop-color="#141A2B"/>
|
||||
</linearGradient>
|
||||
<radialGradient id="halo" cx="0.5" cy="0.3" r="0.8">
|
||||
<stop offset="0" stop-color="#2A2560" stop-opacity="0.55"/>
|
||||
<stop offset="1" stop-color="#0E131F" stop-opacity="0"/>
|
||||
</radialGradient>
|
||||
<filter id="lift" x="-30%" y="-30%" width="160%" height="160%">
|
||||
<feDropShadow dx="0" dy="24" stdDeviation="40" flood-color="#000000" flood-opacity="0.45"/>
|
||||
</filter>
|
||||
<filter id="liftsm" x="-40%" y="-40%" width="180%" height="180%">
|
||||
<feDropShadow dx="0" dy="12" stdDeviation="22" flood-color="#000000" flood-opacity="0.4"/>
|
||||
</filter>
|
||||
<style>
|
||||
.mono{font-family:'JetBrains Mono','SFMono-Regular',Consolas,monospace}
|
||||
.txt{fill:#E7EBF5}.mut{fill:#8892A8}.dim{fill:#5B6478}
|
||||
.indigo{fill:#8B7CFF}.amber{fill:#F4B152}.mint{fill:#4FD6A0}
|
||||
.eyebrow{font-size:13px;font-weight:600;letter-spacing:4px;fill:#8B7CFF}
|
||||
.h1{font-size:60px;font-weight:700;letter-spacing:-1.6px;fill:#F1F3FA}
|
||||
.lead{font-size:18px;font-weight:400;fill:#9AA3B8}
|
||||
.sectitle{font-size:38px;font-weight:700;letter-spacing:-0.8px;fill:#F1F3FA}
|
||||
.body{font-size:15.5px;font-weight:400;fill:#93a}
|
||||
.body2{font-size:15.5px;font-weight:400;fill:#93A0B6}
|
||||
.kick{font-size:12px;font-weight:600;letter-spacing:2px;fill:#5B6478}
|
||||
.code{font-size:14.5px}.ln{font-size:13px;fill:#3C465C}
|
||||
.metric{font-size:13px;font-weight:700;letter-spacing:1px}
|
||||
.num{font-size:15px;font-weight:700;letter-spacing:2px}
|
||||
</style>
|
||||
</defs>
|
||||
|
||||
<!-- deep console background -->
|
||||
<rect width="1440" height="2600" fill="#0E131F"/>
|
||||
<rect x="620" y="0" width="820" height="760" fill="url(#halo)"/>
|
||||
|
||||
<!-- ============ NAV (window chrome vibe) ============ -->
|
||||
<g>
|
||||
<circle cx="130" cy="46" r="6" fill="#F4B152"/>
|
||||
<circle cx="150" cy="46" r="6" fill="#4FD6A0"/>
|
||||
<circle cx="170" cy="46" r="6" fill="#8B7CFF"/>
|
||||
<text x="196" y="52" font-size="21" font-weight="700" class="txt">cmhub</text>
|
||||
<text x="272" y="52" font-size="13" class="mono dim">/ 生成 API</text>
|
||||
|
||||
<text x="560" y="51" font-size="15" class="mut">功能</text>
|
||||
<text x="650" y="51" font-size="15" class="mut">计费</text>
|
||||
<text x="740" y="51" font-size="15" class="mut">文档</text>
|
||||
|
||||
<text x="1092" y="51" font-size="15" font-weight="600" class="txt">登录</text>
|
||||
<rect x="1168" y="26" width="152" height="40" rx="10" fill="url(#btn2)"/>
|
||||
<text x="1244" y="51" text-anchor="middle" font-size="15.5" font-weight="600" fill="#fff">免费注册</text>
|
||||
</g>
|
||||
<line x1="0" y1="84" x2="1440" y2="84" stroke="#1C2436"/>
|
||||
|
||||
<!-- ============ HERO ============ -->
|
||||
<!-- left -->
|
||||
<g>
|
||||
<rect x="120" y="150" width="238" height="30" rx="15" fill="#161D2E" stroke="#293350"/>
|
||||
<circle cx="140" cy="165" r="4" fill="#4FD6A0"/>
|
||||
<text x="154" y="170" font-size="12.5" class="mono mut">HTTP 接口 · 拿 Key 就调</text>
|
||||
|
||||
<text x="118" y="256" class="h1">你的程序,</text>
|
||||
<text x="118" y="326" class="h1">一次调用,</text>
|
||||
<text x="118" y="396" class="h1"><tspan fill="#8B7CFF">标题</tspan> 和 <tspan fill="#F4B152">主图</tspan> 就到。</text>
|
||||
|
||||
<text x="120" y="452" class="lead">生成标题、生成主图,全封装成 HTTP 接口。桌面端带一把</text>
|
||||
<text x="120" y="480" class="lead">API Key 直接调,按点数计费——换底层模型,价格不变。</text>
|
||||
|
||||
<rect x="120" y="524" width="188" height="56" rx="12" fill="url(#btn2)"/>
|
||||
<text x="214" y="559" text-anchor="middle" font-size="17" font-weight="600" fill="#fff">免费注册 →</text>
|
||||
|
||||
<rect x="324" y="524" width="250" height="56" rx="12" fill="#141A2A" stroke="#2A3450"/>
|
||||
<path d="M356 552 v11 M350 557 l6 6 l6 -6 M347 571 h18" stroke="#E7EBF5" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<text x="384" y="548" font-size="15" font-weight="600" class="txt">下载 Windows 客户端</text>
|
||||
<text x="384" y="568" font-size="12.5" class="mono dim">v1.0.0 · 48 MB</text>
|
||||
|
||||
<text x="120" y="626" font-size="13.5" class="mono dim">注册即用 · 免邮箱验证 · 失败自动退点 · 生成标题 <tspan class="amber" font-weight="700">2 点</tspan> 起</text>
|
||||
</g>
|
||||
|
||||
<!-- right: SIGNATURE — API terminal (curl → JSON) -->
|
||||
<g filter="url(#lift)"><rect x="640" y="146" width="680" height="470" rx="16" fill="url(#glow)"/></g>
|
||||
<g>
|
||||
<!-- title bar -->
|
||||
<path d="M640 162 a16 16 0 0 1 16 -16 h648 a16 16 0 0 1 16 16 v26 h-680 z" fill="#10151F"/>
|
||||
<circle cx="664" cy="166" r="5" fill="#39435C"/>
|
||||
<circle cx="682" cy="166" r="5" fill="#39435C"/>
|
||||
<circle cx="700" cy="166" r="5" fill="#39435C"/>
|
||||
<text x="980" y="171" text-anchor="middle" font-size="12.5" class="mono dim">generate-title · request</text>
|
||||
<line x1="640" y1="188" x2="1320" y2="188" stroke="#1E2740"/>
|
||||
|
||||
<!-- gutter -->
|
||||
<rect x="640" y="188" width="46" height="428" fill="#0C111B"/>
|
||||
<g class="mono ln" text-anchor="end">
|
||||
<text x="672" y="228">1</text><text x="672" y="256">2</text><text x="672" y="284">3</text>
|
||||
<text x="672" y="312">4</text><text x="672" y="340">5</text><text x="672" y="368">6</text>
|
||||
<text x="672" y="396">7</text><text x="672" y="424">8</text><text x="672" y="452">9</text>
|
||||
<text x="672" y="480">10</text><text x="672" y="508">11</text><text x="672" y="536">12</text>
|
||||
<text x="672" y="564">13</text>
|
||||
</g>
|
||||
|
||||
<!-- code -->
|
||||
<g class="mono code">
|
||||
<text x="702" y="228"><tspan class="mint">$</tspan> <tspan class="txt">curl -X POST cm.833729.com/api/v1/generate/title \</tspan></text>
|
||||
<text x="722" y="256" class="mut">-H <tspan class="amber">"Authorization: Bearer sk_cmhub_••••"</tspan> \</text>
|
||||
<text x="722" y="284" class="mut">-d <tspan class="amber">'{"prompt":"白色纯棉基础款T恤"}'</tspan></text>
|
||||
|
||||
<text x="702" y="340" class="dim">// 200 OK</text>
|
||||
<text x="702" y="368" class="mut">{</text>
|
||||
<text x="722" y="396"><tspan class="indigo">"titles"</tspan><tspan class="mut">: [</tspan><tspan class="amber">"纯棉白T恤男夏季薄款…"</tspan><tspan class="mut">, …],</tspan></text>
|
||||
<text x="722" y="424"><tspan class="indigo">"alias"</tspan><tspan class="mut">: </tspan><tspan class="amber">"title-standard"</tspan><tspan class="mut">,</tspan></text>
|
||||
<text x="722" y="452"><tspan class="indigo">"model_used"</tspan><tspan class="mut">: </tspan><tspan class="amber">"gpt-5.5"</tspan><tspan class="mut">,</tspan></text>
|
||||
<!-- highlighted points line -->
|
||||
<rect x="702" y="466" width="600" height="26" rx="6" fill="#241E12"/>
|
||||
<text x="722" y="484"><tspan class="indigo">"points_cost"</tspan><tspan class="mut">: </tspan><tspan class="mint" font-weight="700">2</tspan><tspan class="dim">, ← 本次扣点</tspan></text>
|
||||
<text x="722" y="516"><tspan class="indigo">"points_balance"</tspan><tspan class="mut">: </tspan><tspan class="mint" font-weight="700">98</tspan></text>
|
||||
<text x="702" y="544" class="mut">}<tspan class="txt">▋</tspan></text>
|
||||
</g>
|
||||
<!-- status strip -->
|
||||
<line x1="640" y1="578" x2="1320" y2="578" stroke="#1E2740"/>
|
||||
<text x="662" y="600" font-size="12" class="mono dim">200 · 128 ms</text>
|
||||
<text x="1298" y="600" text-anchor="end" font-size="12" class="mono"><tspan class="mint">●</tspan> <tspan class="dim">Bearer 鉴权 · 只认 Key</tspan></text>
|
||||
</g>
|
||||
|
||||
<line x1="120" y1="712" x2="1320" y2="712" stroke="#1C2436"/>
|
||||
|
||||
<!-- ============ 四步上手 ============ -->
|
||||
<g>
|
||||
<text x="120" y="800" class="eyebrow">开始使用</text>
|
||||
<text x="120" y="852" class="sectitle">四步,在你的程序里生成</text>
|
||||
<text x="120" y="890" class="lead">用户端负责注册、充值、管 Key;生成走 API。后台配模型和价,调用方零改动。</text>
|
||||
|
||||
<line x1="176" y1="992" x2="1256" y2="992" stroke="#212A40" stroke-dasharray="2 7"/>
|
||||
|
||||
<g class="mono">
|
||||
<text x="120" y="984" class="num indigo">01</text>
|
||||
<circle cx="180" cy="992" r="7" fill="#0E131F" stroke="#8B7CFF" stroke-width="2.5"/>
|
||||
<text x="120" y="1036" font-size="19" font-weight="700" class="txt" font-family="system-ui">注册账号</text>
|
||||
<text x="120" y="1064" class="body2" font-family="system-ui">邮箱 + 密码即注册即用,</text>
|
||||
<text x="120" y="1086" class="body2" font-family="system-ui">免验证,不送点数。</text>
|
||||
</g>
|
||||
<g class="mono">
|
||||
<text x="420" y="984" class="num indigo">02</text>
|
||||
<circle cx="480" cy="992" r="7" fill="#0E131F" stroke="#8B7CFF" stroke-width="2.5"/>
|
||||
<text x="420" y="1036" font-size="19" font-weight="700" class="txt" font-family="system-ui">扫码充值点数</text>
|
||||
<text x="420" y="1064" class="body2" font-family="system-ui">微信 / 支付宝扫码,</text>
|
||||
<text x="420" y="1086" class="body2" font-family="system-ui">按汇率换成点数。</text>
|
||||
</g>
|
||||
<g class="mono">
|
||||
<text x="720" y="984" class="num indigo">03</text>
|
||||
<circle cx="780" cy="992" r="7" fill="#0E131F" stroke="#8B7CFF" stroke-width="2.5"/>
|
||||
<text x="720" y="1036" font-size="19" font-weight="700" class="txt" font-family="system-ui">生成 API Key</text>
|
||||
<text x="720" y="1064" class="body2" font-family="system-ui">明文只显示一次,</text>
|
||||
<text x="720" y="1086" class="body2" font-family="system-ui">库内只存哈希。</text>
|
||||
</g>
|
||||
<g class="mono">
|
||||
<text x="1020" y="984" class="num amber">04</text>
|
||||
<circle cx="1080" cy="992" r="7" fill="#F4B152"/>
|
||||
<text x="1020" y="1036" font-size="19" font-weight="700" class="txt" font-family="system-ui">桌面端填 Key 用</text>
|
||||
<text x="1020" y="1064" class="body2" font-family="system-ui">客户端带 Key 调接口,</text>
|
||||
<text x="1020" y="1086" class="body2" font-family="system-ui">生成标题与主图。</text>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
<!-- ============ 能力 (endpoint cards) ============ -->
|
||||
<g>
|
||||
<text x="120" y="1226" class="eyebrow">两个端点</text>
|
||||
<text x="120" y="1272" class="sectitle">调两个接口,产出能上架</text>
|
||||
</g>
|
||||
<g filter="url(#liftsm)"><rect x="120" y="1318" width="576" height="228" rx="16" fill="#151B2A"/></g>
|
||||
<g>
|
||||
<rect x="152" y="1350" width="238" height="30" rx="8" fill="#0F1420"/>
|
||||
<text x="168" y="1370" class="mono" font-size="13.5"><tspan class="mint">POST</tspan> <tspan class="txt">/generate/title</tspan></text>
|
||||
<rect x="580" y="1350" width="86" height="30" rx="15" fill="#241E12"/>
|
||||
<text x="623" y="1370" text-anchor="middle" class="metric amber">2 点起</text>
|
||||
<text x="152" y="1436" font-size="22" font-weight="700" class="txt">生成标题</text>
|
||||
<text x="152" y="1472" class="body2">给商品生成多个吸睛中文标题,可纯文字也可看图。</text>
|
||||
<text x="152" y="1498" class="body2">传能力别名,换底层模型价格不变;失败自动退点。</text>
|
||||
</g>
|
||||
<g filter="url(#liftsm)"><rect x="744" y="1318" width="576" height="228" rx="16" fill="#151B2A"/></g>
|
||||
<g>
|
||||
<rect x="776" y="1350" width="252" height="30" rx="8" fill="#0F1420"/>
|
||||
<text x="792" y="1370" class="mono" font-size="13.5"><tspan class="mint">POST</tspan> <tspan class="txt">/generate/image</tspan></text>
|
||||
<rect x="1200" y="1350" width="90" height="30" rx="15" fill="#241E12"/>
|
||||
<text x="1245" y="1370" text-anchor="middle" class="metric amber">10 点起</text>
|
||||
<text x="776" y="1436" font-size="22" font-weight="700" class="txt">生成主图 / 改图</text>
|
||||
<text x="776" y="1472" class="body2">传商品原图 + 提示词,同步产出电商主图(改图需原图)。</text>
|
||||
<text x="776" y="1498" class="body2">按分辨率计价,结果以 URL 返回,客户端直接下载。</text>
|
||||
</g>
|
||||
|
||||
<!-- ============ 计费 (amber meter panel) ============ -->
|
||||
<g filter="url(#lift)"><rect x="120" y="1626" width="1200" height="300" rx="20" fill="#12182699"/></g>
|
||||
<rect x="120" y="1626" width="1200" height="300" rx="20" fill="none" stroke="#232C42"/>
|
||||
<g>
|
||||
<text x="168" y="1702" class="eyebrow">怎么计费</text>
|
||||
<text x="166" y="1756" font-size="33" font-weight="700" fill="#F1F3FA" letter-spacing="-0.5">按「操作 + 能力别名 + 分辨率」定价</text>
|
||||
<text x="168" y="1798" font-size="16" class="body2">运营在后台配价,你只认稳定别名。换供应商、换模型,你的账单口径不变。</text>
|
||||
|
||||
<g class="mono" font-size="14.5">
|
||||
<text x="168" y="1852"><tspan class="mint">✓</tspan> <tspan class="body2" font-family="system-ui">充值→点数,充多少到多少</tspan></text>
|
||||
<text x="500" y="1852"><tspan class="mint">✓</tspan> <tspan class="body2" font-family="system-ui">失败自动退点,不白扣</tspan></text>
|
||||
<text x="800" y="1852"><tspan class="mint">✓</tspan> <tspan class="body2" font-family="system-ui">并发扣点安全,不超扣</tspan></text>
|
||||
</g>
|
||||
|
||||
<text x="1272" y="1700" text-anchor="end" class="kick">当前余额</text>
|
||||
<text x="1272" y="1752" text-anchor="end" font-size="46" font-weight="700" class="amber mono">1,280</text>
|
||||
<text x="1272" y="1774" text-anchor="end" font-size="13" class="dim">点</text>
|
||||
<rect x="1020" y="1802" width="252" height="10" rx="5" fill="#20283C"/>
|
||||
<rect x="1020" y="1802" width="176" height="10" rx="5" fill="#F4B152"/>
|
||||
<text x="1020" y="1838" font-size="12.5" class="mono dim">≈ 128 次标题 · 本月已消耗 128 点</text>
|
||||
</g>
|
||||
|
||||
<!-- ============ 下载 ============ -->
|
||||
<g>
|
||||
<text x="120" y="2022" class="eyebrow">下载客户端</text>
|
||||
<text x="120" y="2068" class="sectitle">装上桌面端,填 Key 就能生成</text>
|
||||
</g>
|
||||
<g filter="url(#liftsm)"><rect x="120" y="2106" width="1200" height="180" rx="18" fill="#151B2A"/></g>
|
||||
<g>
|
||||
<rect x="152" y="2142" width="70" height="70" rx="18" fill="url(#btn2)"/>
|
||||
<rect x="172" y="2162" width="13" height="13" rx="2" fill="#fff"/><rect x="189" y="2162" width="13" height="13" rx="2" fill="#fff"/>
|
||||
<rect x="172" y="2178" width="13" height="13" rx="2" fill="#F4B152"/><rect x="189" y="2178" width="13" height="13" rx="2" fill="#fff"/>
|
||||
|
||||
<text x="248" y="2164" font-size="22" font-weight="700" class="txt">cmhub 桌面客户端</text>
|
||||
<text x="248" y="2192" class="mono" font-size="13.5" fill="#93A0B6">Windows 10/11 · v1.0.0 · 更新 2026-07-06 · 48 MB</text>
|
||||
<text x="248" y="2220" class="mono" font-size="13" fill="#5B6478">SHA256 9f2c…a17e (下载后请核对校验值)</text>
|
||||
<text x="248" y="2250" font-size="12.5" class="amber">首次安装若提示「未知发布者」,点『更多信息 → 仍要运行』——客户端正在申请代码签名。</text>
|
||||
|
||||
<rect x="1052" y="2156" width="236" height="80" rx="14" fill="url(#btn2)"/>
|
||||
<path d="M1092 2188 v20 M1084 2198 l8 9 l8 -9 M1080 2220 h24" stroke="#fff" stroke-width="2.4" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<text x="1188" y="2191" text-anchor="middle" font-size="18" font-weight="700" fill="#fff">下载 .exe</text>
|
||||
<text x="1188" y="2214" text-anchor="middle" font-size="12.5" fill="#CFC9F5">前期由本站直连下载</text>
|
||||
</g>
|
||||
|
||||
<!-- ============ FOOTER (editor status bar) ============ -->
|
||||
<rect x="0" y="2400" width="1440" height="200" fill="#0B0F18"/>
|
||||
<g>
|
||||
<circle cx="130" cy="2452" r="6" fill="#F4B152"/><circle cx="150" cy="2452" r="6" fill="#4FD6A0"/><circle cx="170" cy="2452" r="6" fill="#8B7CFF"/>
|
||||
<text x="196" y="2458" font-size="18" font-weight="700" class="txt">cmhub</text>
|
||||
<text x="120" y="2492" class="mono" font-size="13" fill="#5B6478">自助用户端 · 计费 AI 能力网关 · 运营后台,三合一。</text>
|
||||
|
||||
<text x="740" y="2446" font-size="13" font-weight="600" class="mut">开发者</text>
|
||||
<text x="740" y="2474" font-size="13.5" class="dim">接口文档</text>
|
||||
<text x="740" y="2498" font-size="13.5" class="dim">可用模型</text>
|
||||
<text x="920" y="2446" font-size="13" font-weight="600" class="mut">账户</text>
|
||||
<text x="920" y="2474" font-size="13.5" class="dim">登录</text>
|
||||
<text x="920" y="2498" font-size="13.5" class="dim">免费注册</text>
|
||||
|
||||
<text x="1320" y="2474" text-anchor="end" class="mono" font-size="12" fill="#4A5468">© 2026 cmhub · v1.0.0</text>
|
||||
<text x="1320" y="2498" text-anchor="end" class="mono" font-size="12" fill="#4A5468">粤ICP备 000000 号(占位)</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 17 KiB |
Reference in New Issue
Block a user