1. 为什么我决定把生图从 OpenAI 搬到本地显卡
写文章最痛苦的不是写字,是配图。文章写得行云流水,一到配图就卡壳:找免费图库风格太土,自己画没那手艺,用 AI 生图提示词调半天不说,月底一看 API 账单心都在滴血。尤其是用 Claude Code 配合 baoyu-skills 这类内容插件之后,封面图、文章插图、小红书卡片一键生成确实爽,但它默认走的是 OpenAI 的 gpt-image-1.5 或 Gemini 的图像接口,一张图几毛钱,一篇文章配下来两顿早饭钱就没了。
我试过把生图环节整个换成本地显卡跑,思路其实不复杂:Claude Code 负责理解文章、拆解配图需求,TaoToken 统一 Key/API 通道负责把模型调用稳定接进来,真正画图那一步交给本地显卡上的开源模型。这样既保留了 baoyu-skills 的“设计思维”,又把最烧钱的环节变成电费成本。这篇就把 settings.json 配置骨架、baoyu-skills 和 wwg-image-gen 的调用示例、以及怎么验证本地出图和通道连通,一步步写清楚。适合有一张 8G 显存以上显卡、已经在用 Claude Code 写内容、想摆脱按张计费的人。
2. TaoToken 前置:统一 Key 与 API 通道怎么接
本地生图解决的是“画”的问题,但 Claude Code 本身要调用大模型来理解文章、生成提示词、调度 skill,这部分仍然需要一个稳定的 API 通道。TaoToken 在这里的角色就是统一入口:一个 Key 走通模型对话、coding-plan、console 管理,不用在多个平台之间来回切。
先到官网注册并拿到 Key:
https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=拿到 Key 之后,进控制台创建 API Key,建议单独建一个给 Claude Code 用,方便后面排查问题时区分调用来源:
https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewriteAPI Key 管理页在这里,可以随时新建、禁用、查看用量:
https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite如果你后面要跑长期编码任务或者 Agent 流程,可以看下 Coding Plan,额度模型和按量调用不太一样:
https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite接入文档在这里,settings.json 里各个字段的含义、base_url 怎么写、模型名怎么填,都以文档为准:
https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewriteAPI 基础地址统一用:
https://taotoken.net/api注意这个地址后面不加 UTM 参数,直接作为 base_url 填进配置即可。Claude Code 走 Anthropic 协议接入时,参考这个入口:
https://taotoken.net/ClaudeCodeAnthropic?utm_source=taotoken_aicg_blog_end&utm_content=ClaudeCodeAnthropic&utm_campaign=rewrite3. 可复制配置:settings.json 骨架与本地生图插件
Claude Code 的配置文件一般在用户目录下的.claude/settings.json,Windows 是C:\Users\你的用户名\.claude\settings.json,macOS/Linux 是~/.claude/settings.json。下面这份骨架可以直接抄,把sk-开头的 Key 换成你自己的:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_AUTH_TOKEN": "sk-你的TaoToken密钥", "ANTHROPIC_MODEL": "claude-sonnet-4-5-20250929", "ANTHROPIC_SMALL_FAST_MODEL": "claude-haiku-4-5-20251001" }, "permissions": { "allow": [ "Bash(node:*)", "Bash(python:*)", "Read", "Write", "Edit" ] } }几个字段说明一下。ANTHROPIC_BASE_URL固定填https://taotoken.net/api,不要带斜杠结尾。ANTHROPIC_AUTH_TOKEN就是刚才在 api-keys 页面拿到的 Key。ANTHROPIC_MODEL是主模型,负责理解文章和生成提示词;ANTHROPIC_SMALL_FAST_MODEL是轻量模型,处理一些快速判断,能省一点额度。模型名以接入文档里列出的为准,别自己拼。
配置好之后,把 baoyu-skills 装到 Claude Code 的 skills 目录。先确认本机有 Node.js:
node -v npm -v然后按 baoyu-skills 的说明安装,装完检查目录结构,应该能看到skills/baoyu-cover-image、skills/baoyu-article-illustrator、skills/baoyu-xhs-images这几个文件夹。
接下来是本地生图插件 wwg-image-gen。把它复制到同一个 skills 目录下,然后改script/providers/local.ts里的 baseUrl,指向你本地启动的生图服务地址,一般是:
const baseUrl = "http://127.0.0.1:8000";本地服务用一键包启动,双击启动api.bat,终端会加载 Zimage 模型并监听端口。看到类似Uvicorn running on http://127.0.0.1:8000的输出就说明服务起来了。显存建议 8G 及以上,6G 也能跑但出图慢,核显就别折腾了。
4. 验证请求:本地出图与通道连通怎么测
配置写完别急着跑整篇文章,先做两个最小验证。
第一个验证:TaoToken 通道是否通。在 Claude Code 里随便问一句,看它能不能正常回:
claude -p "用一句话说明什么是本地生图"如果返回正常文本,说明ANTHROPIC_BASE_URL和 Key 都没问题。如果报 401,回去检查 Key 有没有复制全、有没有多余空格;如果报连接超时,检查 base_url 是不是写成了带斜杠或者带了别的路径。
第二个验证:本地生图服务是否通。直接用 curl 打一下本地接口:
curl -X POST http://127.0.0.1:8000/generate \ -H "Content-Type: application/json" \ -d '{"prompt":"一只赛博朋克风格的猫,霓虹灯背景","steps":20,"width":512,"height":512}'返回里如果有图片路径或者 base64 字段,说明本地服务正常。这一步能过,再进 Claude Code 跑 skill。
第三个验证:baoyu-skills 调用本地插件。准备一个测试 markdown 文件test.md,内容随便写几段,然后执行:
/baoyu-cover-image test.md正常流程是:Claude Code 读文章 → 生成封面提示词 → 调用 wwg-image-gen → wwg-image-gen 转发到本地 8000 端口 → 本地显卡出图 → 图片写回文章目录。终端里会看到进度条,跑完后目录下多出一张cover.png。打开看一眼,如果画风和提示词对得上,整条链路就通了。
想单独测模型对话能力,可以走模型对话入口:
https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=model-chat&utm_campaign=rewrite5. 本篇常见错排查
报错一:ANTHROPIC_AUTH_TOKENinvalid。最常见的原因是 Key 复制时带了换行或者前后空格。把 Key 重新粘一遍,确认没有多余字符。另外确认用的是 api-keys 页面新建的 Key,不是控制台登录密码。
报错二:本地服务启动后端口被占用。启动api.bat闪退或者提示Address already in use,说明 8000 端口被别的程序占了。改local.ts里的 baseUrl 端口,同时改启动脚本里的监听端口,两边保持一致。
报错三:出图是黑图或者纯色。一般是显存不够或者模型没加载完。等终端出现模型加载完成的提示再发请求。如果显存 8G 以下,把出图分辨率降到 512x512,steps 降到 15 试试。
报错四:skill 找不到。Claude Code 提示skill not found,检查 skills 目录层级。正确结构是.claude/skills/wwg-image-gen/SKILL.md,不是.claude/skills/wwg-image-gen/wwg-image-gen/SKILL.md,多套一层就找不到。
报错五:通道通了但生图超时。本地出图本身比云端慢,尤其是第一次加载模型。把 skill 里的超时时间调大,或者先在终端手动跑一次 curl 预热模型,再走 Claude Code。
排障过程中如果怀疑是 Key 或通道问题,直接去 api-keys 页面看调用记录,有没有请求打进来、返回码是多少,一目了然:
https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite6. 长期用下去的几个建议
如果你只是偶尔配几张图,按上面的配置跑就够了。但如果打算长期用 Claude Code 写内容、跑 Agent 流程,建议把模型调用和生图分开管理:模型调用走 TaoToken 统一通道,生图走本地显卡,两边互不影响。长期编码或者 Agent 任务多的话,可以看下 Coding Plan 的额度模式,比纯按量调用更可控:
https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite本地生图这块,Zimage 对中文提示词的理解确实比国外模型顺,像“赛博朋克风的肉夹馍”这种描述它能直接画出来,不用反复调英文 prompt。出图质量稳定之后,可以把常用风格固化成几个提示词模板,放在 skill 里复用,省得每次重新描述。
最后提醒一句:本地生图唯一的成本是电费,但显卡长时间满载要注意散热。跑批量配图的时候,中间留点间隔,别让显卡一直满负荷。整条链路跑通之后,你会发现配图这件事从“花钱买图”变成了“顺手出图”,写作节奏完全不一样了。