ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

我在 6GB 显存的游戏本上,做了一个完全离线的 AI 漫画工作室

我在 6GB 显存的游戏本上,做了一个完全离线的 AI 漫画工作室 起因事情的开始很简单我想让自己写的小故事变成漫画但又不想把东西交给任何在线服务。市面上的方案基本是两条路要么用在线 AI 绘画平台提示词、参考图、生成结果全在别人服务器上要么自己在本地拼工具链——但本地方案通常停留在能出一张图从图到一本漫画中间的活全得手工干角色每格长得都不一样、场景对不上、对白要自己在 PS 里往上加、排版一页页手动拼。我真正想要的是一个流水线给一段剧本最后拿到一本 PDF。于是就有了这个项目QwenImage Comic一个跑在自己电脑上的 AI 漫画工作室。先看成品。下面这 8 页《水漫金山寺》从剧本、角色立绘、场景概念图、分镜图到排版成页全部由本地模型生成没有一步经过网络第 1 页第 2 页第 3 页第 6 页更多页面和完整界面截图见 GitHub 仓库。它到底做了什么核心是六步工作流每一步的智能部分都由本地模型完成步骤做什么谁干的① 剧本粘贴手写剧本或给个梗概让 AI 写 / 润色超 4 页自动分幕续写Qwen3-VL-8B② 角色从剧本里提取人物 → 按人设自绘立绘固定种子保证一致性Qwen3-VL-8B Qwen-Image 2.1③ 场景提取场景设定卡 → 生成场景概念图Qwen3-VL-8B Qwen-Image 2.1④ 分镜智能拆格自动绑定角色与场景AI 失败时有规则兜底Qwen3-VL-8B⑤ 出图逐格生成角色立绘 场景概念图一起喂给模型融合Qwen-Image 2.1⑥ 排版拼页 自动气泡 / 拟声词 / 页码 → 一键导出整部 PDFPIL剧本格式刻意做得很好写一行就是一格第 1 页 【远景】雨夜的旧城区霓虹在积水里碎成一片。 [特写] 小雨的眼睛。「这就是最后一战了吗」 林默别回头跟我走。 [音效轰隆] 雷声滚过楼群。 第2页 [动作] 两人在巷道里狂奔。[景别]指定镜头、「对白」/角色名台词识别成气泡、[音效xx]生成拟声词角标。不写景别就按节奏自动轮换。除了漫画工作室主界面还有独立的文生图 / 图生图提示词、负面词、尺寸预设、步数、CFG、种子锁定、批量张数图生图支持拖拽参考图和重绘强度任务队列走 SSE 实时推进度图库能搜索、收藏、按参数复现。技术栈前端 原生 HTML / CSS / JS无构建步骤改完刷新就见效 后端 FastAPI SQLite 出图 Qwen-Image-2.1-Uncensored-GGUF经 ComfyUI ComfyUI-GGUF 加载 文本 Qwen3-VL-8B复用出图模型自带的文本编码器 排版 Pillow气泡、拟声词、页码、拼页、合成 PDF规模后端约8700 行 Python前端约3500 行漫画模块49 个接口另有5 个回归测试文件覆盖融合通道、PDF 导出、跨机器数据迁移等易错路径。硬件门槛低到有点意外RTX 2060 6GB我自己的游戏本实测可跑代价是慢——768×768 / 8 步约18 分钟一张。六个真正花时间的坑工具链搭起来不难难的是让它真的跑通。下面这些是项目里最有价值的部分也是我在别的地方没找到答案、靠自己一点点啃出来的。坑 1Qwen-Image 2.1 根本进不了 diffusers最开始我走的是标准路线diffusersAutoPipelineForText2Image。结果直接加载失败。原因Qwen-Image 2.1 是新架构qwen_image21而 diffusers——包括当时的最新版——只支持到上一代qwen_image。我在 diffusers 源码里翻了一遍确实没有对应的 pipeline 实现。把能试的都试了之后结论是Python 生态里目前唯一可用的通道是 ComfyUI。ComfyUI 0.37 已经原生支持这个架构配上 leejet 的ComfyUI-GGUF插件就能直接加载 GGUF 量化权重。于是整个推理层被换成了 ComfyUI后端在启动时把 ComfyUI 作为子进程拉起来通过 HTTP WebSocket 与它交互。这一步的附带发现进度必须走 WebSocket。ComfyUI 在采样期间 HTTP 请求会被阻塞靠轮询 HTTP 拿进度是拿不到的只能挂 WebSocket 收progress消息。坑 26GB 显存怎么塞下 9.35GB 的文本编码器模型总共有 14.6GB拆开看是这样的qwen-image-2.1-UC-Q4_K_M.gguf 4.60 GB 扩散模型 qwen3vl_8b_int8_convrot.safetensors 9.35 GB 文本编码器 qwen_image_2.1_vae_bf16.safetensors 0.68 GB VAE问题很明显光文本编码器就 9.35GB比我的显存还大 50%。解法是把文本编码器整体放到 CPU 上.env里的TEXT_ENCODER_DEVICEcpu。文本编码只在每次采样前跑一遍放到 CPU 上损失的时间可以接受但直接省下 9~17GB 显存。剩下的 4.6GB 扩散模型 VAE 才放得进 6GB 显存。配合--lowvram启动参数和VAE_TILTING大图分块解码防 OOM6GB 能跑通。代价就是慢Q4_K_M 在这个配置下约152 秒/步8 步就是 20 分钟上下。所以我把单张推理超时设成了 2400 秒——默认的几十秒会直接把任务掐死。顺带一个反直觉的结论512×512 / 4 步出的图基本不能看768×768 / 8 步才是实用下限。在小显存上用小图快速试构图满意了再重绘是唯一效率可接受的打法。坑 3角色一致性——拼贴是死路得用官方多参考图通道这是整个项目最核心的技术点我走了两条死路才找对。死路一低去噪强度 img2img。思路是拿角色立绘 场景图拼成一张参考图然后低重绘强度跑 img2img。结果很残忍——低去噪时构图完全由参考图主导物理上不可能融合。立绘拼贴上去出来还是只有人物场景图铺满出来只有背景。这条路根本不通后来我把拼贴函数直接删了。死路二干脆纯文生图。角色长相每次都不一样一致性全丢。正确的解法是 Qwen-Image 2.1 官方的多参考图编辑通道ComfyUI 里的TextEncodeQwenImage21节点image_1 场景概念图cover_fit铺满目标尺寸。注意——这里它同时决定了输出尺寸image_2…N 各个角色的立绘长边限制 512pxlatent 用节点输出的空 latent而不是从参考图 latent 出发关键参数CFG1、denoise1、euler/simple。CFG1 意味着负面提示词不生效别再写反提示词了提示词里用image_1/image_2指代参考图并明确要求自然融入场景、禁止拼贴/禁止并排这样模型是边看参考图边重画而不是照着参考图描。两三个角色融进雨夜天台这类场景实测是成立的。这里还有两个必须记住的细节传了vae之后参考图走的是 VAE latent 拼接不是视觉塔 token 路径keep_visionFalse别指望模型理解参考图语义它是按 latent 对齐的。角色形象图要用半身立绘不要全身设定图。脸的像素占比直接决定 img2img 能不能锁住长相——全身图里脸太小锁不住。还有一个坑值得单独拎出来当没有任何可用立绘时绝对不要退化成纯场景融合。模型收到保持 image_1 构图的指令却没有人物参考会原样复刻一张空背景给你。这种情况必须老老实实退成文生图。我在另一台机器上复现过这个问题最后是靠日志里那行[comic] 分镜#N 景别 → 2.1融合X张参考图 / 文生图原因才定位清楚的——给降级路径留一行日志比什么都值。坑 4不下载语言模型蹭出图模型的文本编码器漫画工作流里到处需要文本能力解析剧本、提取角色、提取场景、智能分镜、写剧本、润色。标准做法是再下一个语言模型但 14.6GB 的模型已经够占地方了。我注意到一件事Qwen-Image 2.1 的文本编码器本身就是 Qwen3-VL-8B——一个完整的 8B 模型。那为什么不用它ComfyUI 里用CLIPLoader(typeqwen_image)把编码器加载进来接一个TextGenerate节点就能直接做文本生成。于是零额外模型体积拿到了一个能用的 8B 文本模型。踩的坑也很典型图节点不挂输出节点SaveText会直接报prompt_no_outputsdevice 必须填default填cpu会报Expected a cuda device这个报错信息挺误导人的采样参数要用点号扁平键sampling_mode.temperature结构化提取比如把剧本解析成 JSON用sampling_modeoff贪心解码最稳。速度约1.8 秒/字CPU 推理写一整套剧本要十几分钟。所以所有 AI 文本步骤都做成了单并发后台任务前端轮询状态、可随时取消不阻塞界面。坑 5绝对不要把拼装结果回写进拼装的输入字段这个是设计错误不是技术难点但造成的破坏最大值得单说。场景概念图这一块我最初的设计是AI 提取出场景提示词 → 存进prompt字段 → 生成时读取prompt拼装成完整提示词 →把完整提示词也写回prompt。看起来很自然对吧结果就是每生成一次就套一层包装画风描述、background concept art、location setting各多一份。生成三次之后提示词长到 1045 字出图必坏。修复方式是把输入和输出彻底分开prompt AI 提取的核心提示词唯一输入前端可编辑last_prompt 实际使用的完整提示词只用来展示不参与任何拼装这条教训我想扩大到所有类似场景只要一个字段既是拼装的输入又是拼装的输出它一定会套娃。现在就写死一条规矩——拼装结果只允许写进只读展示字段。坑 6别把 MB 级 base64 塞进 SQLite这是最惊险的一次事故。分镜融合任务需要把参考图传给引擎。当时图省事直接把参考图的 base64 塞进了任务参数存进 SQLite 的jobs.params_json。单个任务记录4~5MB。跑了一段时间后漫画接口开始集体报错database disk image is malformed数据库坏了。排查过程记一下因为它救了我一次用?moderoimmutable1打开数据库这会跳过 WAL 文件直接读主库结果能正常读、integrity_check返回 ok。这说明主库是好的坏的是app.db-wal。把-wal/-shm移出目录先备份三件套数据库立刻恢复正常数据完好。根因修复分两步第一步大字段外置。新增blobs.py任何超过 4KB 的字符串参数写到data/blobs/job_id/n文件里数据库里只留一个blob:job_id/n占位符。任务执行时展开结束后释放启动时清理孤儿。接线点只有两处——创建任务时 pack、执行任务时 unpack。第二步给历史库瘦身。启动迁移把已结束任务里的超长参数换成说明文本然后VACUUM。这里有个细节差点让我白干WAL 模式下只VACUUM是不够的主库文件不会变小。必须在VACUUM之后再执行PRAGMA wal_checkpoint(TRUNCATE)。结果156.8MB → 1.37MB。几个顺手做掉的工程细节数据全部落项目目录。数据库、出图、导出 PDF 都在data/下删掉data/就是完全重置。素材路径统一存相对路径data/...不存绝对路径——这样整个项目目录可以整体拷到另一台电脑继续用。跨机器拷库的兜底 bug。有一次从另一台电脑拷了数据库过来导出 PDF 报成品页文件缺失。原因是那条兜底逻辑写成了path _resolve_stored_path(record[path]) or _resolve_stored_path(record[url])_resolve_stored_path返回的是一个 Path 对象——即使文件不存在对象本身也是真值导致or后面的 URL 兜底永远轮不到。修复是改成按候选顺序返回第一个真实存在的文件。教训记住A or B兜底必须验证 A 真的可用能构造出对象 ≠ 文件存在。出图按项目归档。漫画的图落outputs/comics/项目名_id尾6位/项目改名图片不搬家同名项目靠 id 后缀区分。启动时自动把历史遗留的散落文件归位幂等、同名不覆盖。前端缓存。StaticFiles 挂载的 JS/CSS 默认不带Cache-Control浏览器启发式缓存会让改了前端没生效。现在/static强制 no-cacheindex.html里的资源引用带?vmtime指纹。PDF 导出防重复。每次排版都会新增一批成品页所以导出时每个页码只取最新一份按页码升序合并。DPI 按页宽/210mm 反推1240px → 150dpi ≈ A4。黑白版在合成时转灰度文件名带_黑白版。怎么装完整步骤在仓库 README这里给最短路径。先试水不需要显卡、不装模型、不装 torchgit clone https://github.com/wyfirstname/qwenimage-comic.git cd qwenimage-comic # Windows 双击 start.batLinux/macOSbash start.sh脚本会自动建虚拟环境、装 Web 依赖、生成.env、起服务。打开 http://127.0.0.1:8000 右上角显示「占位模式」就是跑通了——界面、队列、图库、漫画全流程都能点只是出图是占位图。要真实出图再补三步# 1. 推理依赖约 3GB含 torch .venv\Scripts\pip install -r backend\requirements-inference.txt # 2. clone ComfyUI GGUF 插件并让它复用本项目的 models/ 目录 git clone --depth 1 https://github.com/comfyanonymous/ComfyUI comfyui .venv\Scripts\pip install -r comfyui\requirements.txt git clone --depth 1 https://github.com/leejet/ComfyUI-GGUF comfyui/custom_nodes/ComfyUI-GGUF copy scripts\extra_model_paths.yaml comfyui\extra_model_paths.yaml # 3. 下载模型14.6GB走 hf-mirror 国内镜像支持断点续传 download_models.bat然后改.envENGINE_MODEcomfy TEXT_ENCODER_DEVICEcpu # 6GB 显存必开 INFER_TIMEOUT_SECONDS2400 # 小显存出图慢超时要留够重启start.bat即可。启动时会自动把 ComfyUI 作为子进程拉起来不需要手动开 ComfyUI、不需要手动点加载模型。说明几件事关于模型许可。出图模型基于 Qwen Research License我用的社区转换版本许可状态更模糊商用请自行确认条款。另外这个版本移除了内置安全检查器输出完全取决于提示词——使用者需要对生成内容负全部责任本地生成也不等于可以自由传播对外发布前请自行做合规审查。项目保留了NSFW_FILTER开关和生成记录建议按需开启。关于速度。6GB 显存是真能跑但也是真的慢单格约 18 分钟一页四格就是一小时出头。如果你有 12GB 以上显存把COMFYUI_EXTRA_ARGS里的--lowvram删掉、下载 Q5_K_M 或 Q6_K 档体验会好很多。关于完全离线。只有安装和下载模型需要联网运行时所有请求都指向127.0.0.1。生成的图、剧本、数据库、导出的 PDF 全在本机不留任何外发通道。最后这个项目最让我满意的不是能出图——而是从一段文字到一本装订好的 PDF中间没有一步需要我手工补。角色长相、场景氛围、对白气泡、页码排版全都是流水线自己走完的。代码已经开源在 GitHubGitHub - wyfirstname/qwenimage-comic: 使用qwenimage2.1开发的一款漫画制作工具6-16g显存16G显存最佳 · GitHub如果你也在折腾本地 AI 绘画、或者只是想要一个不联网的漫画工具欢迎拿去看看。项目还有一些粗糙的地方尤其是低显存下的速度Issue 和 PR 都很欢迎。如果这个项目帮到了你给个 Star ⭐ 就是最大的鼓励。
返回列表