English · 简体中文
一个给 AI Agent 用的生图技能。装好之后,你用平时说话的方式告诉你的 Agent,它就会替你打开 Qwen Studio(千问,chat.qwen.ai),把你要的画面填进去,等画完,把全尺寸原图存到你电脑的「图片」文件夹里。
不需要 API Key,不按张收费,不用注册任何第三方服务。
装好之后,跟你的 Agent(Claude Code、Codex、WorkBuddy……都行)说人话就行:
用千问帮我画一张:樱花树下的和服少女,二次元插画,3:4
剩下的——打开网页、选模型、填提示词、等出图、存原图——全是它替你干。你在网页上能用什么模型,它就能用什么模型;网页给你多大尺寸的图,它就存多大的图。
"帮你点网页"的技能到处都是。真正决定画质好坏的,是交给网页的那句话怎么写。
这个技能自带一份实测过的提示词配方(references/prompt-recipes.md,针对 Qwen-Image 3.0):
- 两套公式 —— 视觉类:
主体 → 景别 → 视角 → 镜头 → 光线 → 风格 → 质感;信息类(海报 / 信息图 / 分镜 / UI)按创意简报七段写,别用"美图思维" - 三档填空模板 —— 最小可用(≥120 字)/ 标准(250–400 字)/ 信息型
- 8 类现成配方,直接能抄 —— 写实人像、二次元立绘、街头时尚、风景建筑、产品商业、信息型海报、分镜多格、UI 概念图
- 六种反例及改法 —— 堆"8K / 杰作 / 大师作品"、写两个风格标签、"一个女生"就提交、描述复杂手部动作、用"不要 XX"表达排斥(网页端没有反向提示词入口,否定词会被忽略)……
- 提交前 5 秒自检表
而且这条是写进技能规则的:你只给一句话(比如"来张猫")时,Agent 必须先按模板补全再提交,不许原样丢给网页——"随手一句"和"能用的图",差别就在这。
市面上"免费生图 API"一般来自聚合站,而聚合站有两个老毛病:模型可能被悄悄换成廉价旧款,画质经常被降档。
这个技能直接驱动浏览器用网页版,绕开中间商:你账号下是什么模型就是什么模型,网页出多大图就存多大图(3:4 ≈ 1792×2400 全尺寸原图,不是缩略图)。
| 本技能(浏览器代驾) | 免费生图 API 聚合站 | |
|---|---|---|
| 模型 | 网页上是什么就是什么(现为 Qwen-Image 3.0) | 常被静默换成廉价旧款 |
| 画质 | 全尺寸原图 | 多为降档缩图 |
| 费用 | 你自己账号的免费额度 | 隐性限额,或拿质量换免费 |
| 凭据 | 登录态在你自己浏览器里 | 请求经第三方转发 |
因为 Qwen Studio(chat.qwen.ai)可以免费畅用 Qwen-Image 3.0,而国内版千问不行——额度、入口都不一样。
这个技能打的就是这个网页版,所以你能免费用上最新的 3.0。
存下来的是全尺寸原图(脚本剥掉了网页的缩略图参数),不是页面上那个小缩略图:
| 画幅 | 实际像素 | 说人话 |
|---|---|---|
| 3:4(竖屏,人物常用) | 1792 × 2400 | 约 430 万像素,是 1080P(1920×1080)的两倍多,接近 2K 竖屏 |
| 16:9(横屏,风景常用) | 2752 × 1536 | 约 423 万像素,超过 1080P,接近 2K(2560×1440) |
尺寸是从 PNG 文件头里读出来的真实数值,不是估算。
实测:一次完整生图约 50 多万 token(走 Agent 调用,含脚本往返)。
为什么能压在这个量级——因为这套流程全程不看图:
- 不截图:判定"出图完成"靠 DOM 事实(图片元素的真实尺寸、状态栏模型名、画幅标签),而不是反复截图给模型看。图片进上下文是最贵的开销之一。
- 推理在脚本里:怎么点、何时重试、如何抓原图,全写在脚本中;Agent 只发一条命令、收一行 JSON。
- 失败有结构化出口:出错返回
{"error":"..."},不用 Agent 反复试探页面找原因。
和同类项目比:其他"浏览器代驾 / Computer Use"类方案通常走「边做边截图 → 把截图和整页 DOM 回传给模型 → 模型再决策」的循环,单次常是百万级 token(按机制推算的量级,随步数与模型而变,不点具体项目)。本技能把这些判断前移到了脚本层,所以更省。
它不会帮你登录,也永远不会碰你的账号和密码。
它用的,是浏览器里已经登录着的那个千问。所以第一次用之前,先在 Tabbit 浏览器里打开 chat.qwen.ai 登录好。登录这件事,它替不了你,也不该替你。
这个技能最大的特点:它驱动的是给 Agent 用的浏览器。
这类浏览器现在还很少:Mac 上有 ego lite(lite.ego.app,目前仅 macOS),Windows 上主要是 Tabbit——本技能用的就是它。
| 后端 | 状态 | 说明 |
|---|---|---|
| Tabbit | ✅ 当前支持 | 本技能目前只在 Windows 上实测过 |
| 你自己的 Chrome / Edge(CDP 直连) | ✅ 已支持 | 复用你已有的登录态,不用再装浏览器——但要先开调试端口 + 装一次依赖,见文末两步。 |
都是发给 Agent 的话,复制粘贴就行。
第一步 · 装,把下面这句话复制给你的 Agent(右上角有复制键):
请把 https://github.com/shangshansuchi-del/qwen-free-imagegen-skill 下载到我的技能文件夹里,然后读一下 SKILL.md。
第二步 · 用,把下面这句复制给它(照抄就能看出效果,之后随便改成你想要的):
用 Qwen Studio 帮我生成一张:日系动画半身立绘,银灰渐变双马尾少女,琥珀色大眼,白色水手服配深蓝领结,樱花纷飞的校园走廊,午后金光穿过枝叶洒下光斑,柔和赛璐璐上色,发丝高光细腻,3:4
第一次跑之前:在 Tabbit 浏览器里登录好 chat.qwen.ai(见上面
两个小提醒:
- 别让它被掐断:出图要几十秒到几分钟,而很多命令行工具默认 2 分钟没结果就把进程掐了——一掐就前功尽弃,你只会看到一片空白。所以跟 Agent 说一句:「超时设成 10 分钟,别催它」
- 先体检再开跑:让 Agent 跑一次体检(见技术细节的
--doctor),一次问清楚用哪个后端、要不要配 CDP——报错一次就是白烧一轮 token,别等报错再返工 - 画完 Agent 会把图片的保存路径报给你
默认存在你电脑的「图片」文件夹下的 qwen-imagegen 子文件夹里:
- Windows:
C:\你的用户名\Pictures\qwen-imagegen - Mac / Linux:
~/Pictures/qwen-imagegen
什么都不用配置,装好就能用。 想换个地方存?跟 Agent 说一声就行(它支持指定路径,也有环境变量开关,见下面的技术细节)。
如果屏幕上什么都没显示,那就是失败了,直接再跑一次。 这不是"还在画"。
| 你看到的 | 是什么意思 |
|---|---|
| 什么都没显示 | 失败了,重跑 |
| 提示"未登录" | 浏览器里没登录千问,去登录 |
| 红色"服务访问量较大"之类的提示 | 千问临时拒绝,脚本会自动再试一次;还不行就等几分钟 |
| 提示浏览器没开 / 没有窗口 | 打开一下 Tabbit(窗口收进托盘时它会自动尝试唤起) |
scripts/qwen_image.sh 是唯一入口:预检浏览器 → 复用上次的标签组和对话(同一对话延续,不散落)→ 驱动页面选「图像生成」模式、锁定 Qwen-Image 3.0、填提示词提交 → 轮询 DOM 等完成 → 抓去掉 OSS 缩图参数的全尺寸原图 → 存 PNG → 打印结果。
成功时输出一行 JSON(width/height 从 PNG 头读出,是真实尺寸,不是页面 450px 缩略图):
{"path":"C:/you/Pictures/qwen-imagegen/qwen-20260926-001530.png","bytes":5904848,"width":1792,"height":2400,"model":"Qwen-Image 3.0","ratio":"3:4"}命令行第三参数 > 环境变量 QWEN_IMAGEGEN_OUT_DIR > 默认 ~/Pictures/qwen-imagegen
平时让 Agent 干就行;排查问题时才用:
/usr/bin/bash.exe "<技能目录>/scripts/qwen_image.sh" "<提示词>" [画幅] [输出路径]
# 超时后只补跑下载(仅限一次):
/usr/bin/bash.exe "<技能目录>/scripts/qwen_image.sh" --fetch "<输出路径>"第一步 · 给浏览器开"调试门"——CDP 不会自己生效,得让 Chrome / Edge 把门打开,Playwright 才能接管它:
用 Tabbit 的话不需要这一步:Tabbit 有自己的专用通道(本技能默认就走它)。CDP 这条路是给用 Chrome / Edge 的人准备的。
⚠️ CDP 路线的已知代价:千问可能认出这是自动化并弹出人机验证,需要你手动过一次(脚本会报verification-required明确提示)。Tabbit 路线不会触发这个——它本来就是给 Agent 用的浏览器。
-
完全退出 Chrome / Edge(托盘里也要退出,否则启动参数会被忽略)
-
带参数重新启动:
- Windows · Edge:
"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" --remote-debugging-port=9222 - Windows · Chrome:
"C:\Program Files\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222 - macOS:
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222
(调试端口没法对已经开着的浏览器事后补开,所以只能带参数重启一次)
- Windows · Edge:
-
验证门开了没:浏览器里打开
http://127.0.0.1:9222/json/version,能看到一串 JSON(里面有"Browser"字样)就成了 -
然后正常登录 chat.qwen.ai——登录态就留在你自己的浏览器里,脚本只是接过去用
嫌自己敲麻烦?让 Agent 帮你:第一次用的时候它会先跑一次体检(--doctor,见下一节),发现两个后端都不可用时,会问你一句"现在帮你把浏览器重启一次、把调试端口开好吗?"——你点头,它就关掉浏览器再带参数拉起来。**用的是你原来的用户配置,登录态不会丢。**一次就好,别等报错再返工。
第二步 · 装一次依赖(只有 CDP 这条路需要;Tabbit 用户跳过):
npm install playwright-core
在技能目录下跑一次(约 14 MB,纯库、不含浏览器)。装完 --doctor 会显示 "playwright_core":1,就算就绪。
- 这个端口只开在本机(127.0.0.1),别把它暴露到局域网或公网——那等于把浏览器控制权交给别人
- 用完把带参数的浏览器窗口关掉,门就关了
/usr/bin/bash.exe "<技能目录>/scripts/qwen_image.sh" --doctor不开浏览器、不消耗额度、秒级返回,只回答一个问题:这台机器该用哪个后端?
{"tabbit":true,"cdp_port":"closed","recommended_backend":"tabbit","next":"直接按 SKILL.md 正常调用即可,无需任何配置"}"recommended_backend":"tabbit"→ 直接用,什么都不用配"cdp"→ 浏览器调试端口已开,走 CDP 后端(开发中)"none"→ 两个都不可用,先配一个再来(见上一节)
探测顺序:① 环境变量 QWEN_IMAGEGEN_BACKEND → ② Tabbit → ③ CDP 端口(9222 / 9223)。
JS 层(generate.js + wait_download.js,共 148 行)是纯 Playwright API(page.goto / getByRole / locator / evaluateAll),没有任何 require("playwright")——page 由外部注入(Tabbit 的 nodejs 子命令把文件内容包进 async 函数体执行)。换后端不用动页面逻辑,只需适配 4 个动作:
| 动作 | Tabbit CLI | CDP / Playwright 等价 |
|---|---|---|
| 列出标签页 | tabs |
context.pages() |
| 页面内执行脚本 | nodejs |
注入 page 跑 node 脚本 / page.evaluate() |
| 关闭 / 废弃任务 | finish [--discard] |
page.close() / context.close() |
| 复用会话 | resume --group |
固定 userDataDir 的持久化 context |
空输出 = 失败,直接重跑。
| error | 处置 |
|---|---|
login-required |
浏览器未登录千问 |
provider-error |
服务端拒绝;自动重提交一次(间隔 20s,QWEN_IMAGEGEN_NO_RETRY=1 可关);仍失败等几分钟完整重跑,别用 --fetch 等 |
timeout(无横幅) |
生成多半还在跑 → 唯一可用 --fetch 续等一次的场景 |
tabbit-not-running / tabbit-no-window |
浏览器没启动 / 窗口在托盘且唤起失败(未开页面、不耗额度) |
model-not-found / version-dropdown-missing |
页面改版,见 references/ui-selectors.md |
output-dir-unwritable |
输出目录建不了,传第三参数换个地方 |
cdp-port-closed |
浏览器没开调试端口(或端口号不对,默认 9222) |
cdp-need-playwright-core |
CDP 缺依赖:在技能目录跑一次 npm install playwright-core |
verification-required |
千问弹了人机验证(自动化被识别):手动过一次验证后重跑;Tabbit 路线不会遇到 |
no-backend |
Tabbit 和 CDP 都不可用 → 先跑 --doctor 看该怎么办 |
完整契约见 SKILL.md。
| 变量 | 作用 |
|---|---|
QWEN_IMAGEGEN_OUT_DIR |
覆盖默认输出目录(优先级见上) |
QWEN_IMAGEGEN_BACKEND |
强制指定后端:tabbit 或 cdp(默认自动探测:Tabbit → CDP) |
QWEN_IMAGEGEN_CDP_PORT |
CDP 调试端口(默认 9222) |
QWEN_IMAGEGEN_CDP_KEEP_PROXY=1 |
CDP 后端保留系统代理(默认会摘掉,否则本机 127.0.0.1 也会被代理劫持) |
QWEN_IMAGEGEN_DISCARD=1 |
用完即关标签组(默认复用会话) |
QWEN_IMAGEGEN_NO_RETRY=1 |
关闭 provider-error 自动重提交 |
qwen-imagegen/
├── SKILL.md # 技能入口 + 完整错误码契约
├── scripts/
│ ├── qwen_image.sh # 主流程:后端分派、重试、输出 JSON
│ ├── runner_cdp.js # CDP 后端运行器:attach 用户自己的浏览器
│ ├── generate.js # 页面操作:选模式 / 选模型 / 填提示词 / 提交
│ └── wait_download.js # 等出图完成 + 抓全尺寸原图
└── references/
├── prompt-recipes.md # 生图提示词配方:两套公式 / 三档模板 / 8 类配方 / 六反例 / 自检表
├── cdp-backend.md # 只有走 CDP 时才读:两步配置 / 依赖 / 实现要点 / 排错
└── ui-selectors.md # 页面结构、选择器、接口抓包
- 仅供编程学习、浏览器自动化研究与个人使用,与阿里云 / 通义千问官方无关。
- 请遵守千问平台的用户服务协议与内容规范。
- 请勿用于非法、侵权、恶意刷量或商业牟利。
- 因使用本项目导致的账号封禁、功能受限或其他损失由使用者承担,作者不承担责任。
MIT