这次我们来看一个偏整活的本地部署玩法把“普瑞赛斯”这个角色形象用 AI 绘画批量生成再配合脚本替换网页素材做出一种“普瑞赛斯入侵整个互联网”的视觉效果。先说明边界这里的“入侵”不是攻击真实网站也不是绕过任何平台限制而是一种本地测试玩法在自己的静态页面里把角色素材铺满整个页面模拟“全网都被这个角色占领”的观感。整个链路可以拆成三件事本地跑 ComfyUI 出图、用 API 批量生成、把图片替换进静态网页目录。不需要公网服务器不需要真实网站权限普通桌面机就能做。显存占用取决于模型规模和分辨率通常 8G 显存起步能满足中低分辨率测试更小的模型可以再往下压具体以本机实测为准。本文会按部署顺序给出环境准备、启动方式、功能测试、接口调用、资源占用观察和常见问题排查。适合想在本地批量生成角色图并做网页素材替换实验的读者。如果你只是想快速出一张角色图本文的批量与网页替换部分也可以直接跳过只看 ComfyUI 启动和测试部分即可。1. 核心能力速览这个玩法的本质是一套组合工具链核心能力可以概括为角色生成、批量出图、网页替换。能力项说明目标效果在本地测试页面中批量使用“普瑞赛斯”角色素材形成角色铺满页面的视觉效果核心组件ComfyUIAI 绘画工作流 Python 脚本批量生成和素材替换部署位置本机 HTTP 服务测试环境显存需求需按实际模型确定通常 8G 显存可先做中低分辨率测试启动方式命令行启动 ComfyUI浏览器访问 WebUI再另开静态页服务支持平台Windows / Linux 均可NVIDIA GPU 优先也可尝试 CPU 推理接口能力ComfyUI 原生 API可通过 HTTP 提交绘画任务批量能力通过脚本循环提交多个提示词支持批量出图网页替换通过文件复制或脚本替换静态站点资源目录实现适合场景角色主题页面演示、本地批量出图测试、ComfyUI API 研究、二创测试上表里的显存数字是参考值不是固定结论。实际占用要看加载的是完整 checkpoint、LoRA 还是 SDXL 模型也要看分辨率和批量数。后面会给出观察方法读者不要照搬某个参数要以自己的nvidia-smi输出为准。从实现上看这个项目最值得关注的点有两处一是 ComfyUI 的 API 批量提交能力二是静态网页资源替换的低成本实现。前三步先追求单张图片能跑通再考虑批量最后才是“铺满网页”。2. 适用场景与使用边界这一类“角色入侵网页”的玩法在本地测试环境里可以做很多变体。先看适用场景。如果你在做角色二创想生成一套风格统一的头像或者立绘ComfyUI 批量生成非常合适。如果你在搭一个角色主题站的 Demo不想手动画几十张图就适合用脚本自动出图后塞进页面。如果你在研究 ComfyUI 的 API 请求和返回逻辑这个玩法也能当练习项目因为每一步都可以用 HTTP 请求和本地文件目录验证。再说清楚不适合什么场景。不建议拿这套流程去篡改真实网站页面也不建议通过浏览器插件去替换某个线上网站的内容来制造“全网被入侵”的效果。那已经超出技术演示范围涉及破坏性和合规风险。本文后续所有步骤默认只针对你自己创建的本地静态站点浏览器访问地址只使用127.0.0.1或局域网内受控地址。还要强调素材合规问题。“普瑞赛斯”如果是某个游戏或作品里的角色形象那么相关图片、立绘、模型权重都可能涉及版权。个人在本地学习、测试、制作非商用 Demo通常属于灰色边界但发布到公开社区、打包传播、商用变现都需要确认版权授权。尤其是角色 LoRA、Checkpoint 这类权重文件如果在公开渠道下载要先看模型页面的用户协议再决定能不能作为文章素材。涉及真人肖像时必须获得当事人授权这一点不能绕过。3. 环境准备与前置条件做这套流程不需要购买服务器但需要准备一个可运行的 ComfyUI 环境。下面按“必要项”和“建议项”列一个通用清单。3.1 硬件与操作系统操作系统Windows 10/11、Linux 都可以。Windows 用户注意路径中尽量不要有中文和特殊符号否则容易在模型加载时报错。GPUNVIDIA 显卡是体验最好的方案需要安装对应版本的显卡驱动。AMD 显卡和纯 CPU 环境也能跑但速度会慢很多。显存先不要追求高分辨率。8G 显存做 512x768、20 步左右的测试一般不会有压力。如果显存只有 4G 到 6G可以降低分辨率、减少批量数或使用轻量模型。内存建议 16G 起步加载大模型时内存占用会比较明显。磁盘ComfyUI 本体加基础模型、LoRA预留 20G 以上空间比较稳妥。如果是 SDXL 系列模型占用还会更大。3.2 软件依赖ComfyUI 依赖 Python、PyTorch、CUDA 环境。具体版本不能一概而论一般建议先看项目官方 README。下面给出一套通用检查命令。python --version nvidia-smi git --version如果python命令指向的是 Windows 商店版本或 Anaconda 环境建议为项目单独创建虚拟环境避免依赖冲突。python -m venv comfyenvWindows 激活comfyenv\Scripts\activateLinux 激活source comfyenv/bin/activate激活后安装依赖。ComfyUI 的依赖文件通常叫requirements.txt安装命令为pip install -r requirements.txt如果网络环境一般可以加上国内 PyPI 镜像例如pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple这只是通用模板实际路径和虚拟环境名称需要按自己的目录替换。3.3 模型文件准备ComfyUI 默认会从models/checkpoints、models/loras等目录加载模型。你需要准备一个大模型文件例如某个 Stable Diffusion 系列的 checkpoint 或 safetensors 文件。如果想把角色特征固定下来可以准备角色 LoRA并放到models/loras。如果没有现成 LoRA也可以靠提示词和 ControlNet 控制角色特征但稳定性会差一些。模型文件名不要用中文不用带空格路径简单一点更好。下载模型时注意看模型说明确认是允许合法使用的权重。如果角色素材受版权保护只建议做个人学习测试不做公开传播和商业使用。4. 安装部署与启动方式这一节先跑通 ComfyUI再启动本地静态网页服务。整个过程不用一键包直接命令操作比较适合想理解内部流程的读者。4.1 获取 ComfyUI从 ComfyUI 官方仓库克隆到本地或者下载官方整合包。仓库方式更接近本项目实践git clone https://github.com/comfyanonymous/ComfyUI.git cd ComfyUI如果你在国内网络环境克隆速度慢可以先把仓库内容打包下载到本地再解压。解压后确认目录结构里至少包含main.py、requirements.txt、models等目录。4.2 启动 ComfyUI进入 ComfyUI 根目录后启动主服务python main.py --listen 127.0.0.1 --port 8188参数解释--listen 127.0.0.1只监听本机避免局域网访问。--port 8188默认 Web 端口。如果被占用换成8189或其他空闲端口。如果显存比较紧张可以加--lowvram参数启动具体以项目支持的参数为准。启动成功后终端会输出类似To see the GUI go to: http://127.0.0.1:8188的提示。浏览器打开这个地址就能看到 ComfyUI 的节点工作台。这一步常见的问题是端口被占用。可以先查端口netstat -ano | findstr 8188Linux 使用ss -lntp | grep 8188如果端口被占用换一个端口重新启动即可。4.3 导入或搭建基础工作流ComfyUI 打开后是一个空白画布。你可以从本地导入已有的工作流 JSON 文件也可以在模板里选一个基础文生图工作流。一般包含这几个节点CheckpointLoader、CLIPTextEncode、KSampler、VAEDecode、SaveImage。如果没有现成模板最快的办法是从社区找一个基础文生图工作流 JSON拖进浏览器加载。注意 JSON 文件里可能带有绝对路径导入后要检查 Checkpoint 节点选择的模型是否存在于本地models/checkpoints目录。验证 ComfyUI 基本可用可以先在提示词框里填一段测试文本设置较小的分辨率点击 Queue Prompt 跑一张图。能生成第一张图说明环境已经通了后面再上批量任务。4.4 启动本地静态网页服务为了做“入侵整个互联网”的页面效果我们需要一个本地网页。可以新建一个site目录里面放index.html和assets资源目录。然后在site目录下启动静态服务cd site python -m http.server 8080浏览器访问http://127.0.0.1:8080如果端口冲突可以换8081。这个静态服务只在本机生效不会影响外部任何网站。页面里的图片路径统一指向assets目录后续把生成的图片复制进去即可。5. 功能测试与效果验证功能测试按“单张生成 - 批量生成 - 网页替换”三个层次展开。每个层次都给出操作步骤、预期结果和失败排查思路。5.1 单张角色图生成测试测试目的确认 ComfyUI 能出图且角色特征基本可控。操作步骤在 ComfyUI 中选择一个基础文生图工作流。在正向提示词中填写角色描述例如priestess character, 1girl, upper body, detailed face, best quality在负向提示词中填写常见噪声词例如lowres, bad anatomy, bad hands, extra fingers, blurry设置分辨率例如 512x768。步数可以先设 20。点击 Queue Prompt。预期结果数秒到数分钟后输出目录下出现一张 PNG 图片画面上是一个符合提示词描述的二次元角色。判断标准图片能正常生成不是纯噪声或黑图。角色的面部、服装、姿势没有明显形变。角色特征与“普瑞赛斯”参考素材接近或者至少风格统一。常见失败原因模型文件没有加载成功提示找不到.safetensors文件。显存不足生成时报 OOM。提示词语法错误例如多写了中括号导致解析异常。输出目录不存在或者保存图片时磁盘已满。如果单张角色图里有明显的 AI 痕迹比如手部崩坏、眼睛错位可以换更好的基础模型或者在负向提示词里补充bad hands, bad eyes。角色特征不明显的话优先查 LoRA 有没有加载以及 LoRA 的权重比例是否太低。5.2 角色一致性测试测试目的批量生成时让所有图片中的角色保持统一风格而不是每一张都像不同的人。操作步骤准备一张或多张角色参考图。在工作流中加入 ControlNet 或 IPAdapter 节点把参考图接入控制网络。固定参考图、固定正向提示词中的角色描述。只随机改变后面的场景词比如cyberpunk street、library、snowfield。连续生成 5 到 10 张图对比角色脸部特征。预期结果不同场景下角色的发型、瞳色、服装主要特征保持一致。判断标准角色不再是每张图都变脸。场景有变化但人物主体可识别。如果只靠提示词无法保持一致性就需要 LoRA 或训练角色版本。如果角色一致性很差优先检查 ControlNet 的权重设置。权重太高会导致构图被参考图锁死权重太低又等于没用。具体数值需要按模型调整没有通用答案。另一个方向是检查 LoRA 是否生效可以在采样器之外加一个 LoRA 加载节点手动调节权重到 0.7 到 0.9 之间测试。5.3 批量生成测试测试目的通过脚本循环提交多个任务而不是在网页里手动一张一张点。操作步骤在 ComfyUI 里搭好一个完整的文生图工作流。通过菜单导出工作流 API 格式 JSON通常是一个包含节点和连线信息的 JSON 文件。用 Python 脚本读取这个 JSON修改其中的提示词、种子、文件名然后批量提交到 ComfyUI 的/promptAPI。等待生成完成后检查输出目录中的图片数量。一个通用脚本模板如下import json import time import requests server http://127.0.0.1:8188 with open(workflow_api.json, encodingutf-8) as f: workflow json.load(f) prompts [ priestess character, standing in cyberpunk street, best quality, priestess character, sitting in a library, best quality, priestess character, walking in snowfield, best quality, ] for i, prompt in enumerate(prompts): # 这里需要按你导出的工作流实际节点ID去修改 # 假设正向提示词节点ID是 6 workflow[6][inputs][text] prompt # 假设种子节点ID是 6也可以单独处理 workflow[6][inputs][seed] 1000 i payload {prompt: workflow} resp requests.post(f{server}/prompt, jsonpayload, timeout30) print(i, resp.status_code, resp.text) time.sleep(2)在这个模板里workflow[6]的节点 ID 只是占位示意。实际使用前要先打印工作流 JSON找到保存提示词的节点 ID再替换成你自己的节点结构。节点 ID 写错会导致提交失败这是批量任务最常见的坑。预期结果脚本依次向 ComfyUI 提交多个任务返回状态码 200。判断标准终端输出的返回 JSON 里包含prompt_id。若干分钟后输出目录中图片数量等于提交任务数。图片之间的角色风格一致没有出现某一张完全生成失败。批量失败时先不要无限提交。可以在脚本里加上日志和简单重试比如请求失败后间隔 5 秒重试一次最多重试 3 次。5.4 网页素材替换测试测试目的把批量生成的图片替换到本地静态页面的素材目录刷新浏览器后看到全站角色图效果。操作步骤在site/assets目录下预留头像、背景图等子目录。用 Python 脚本从 ComfyUI 输出目录中挑选若干图片复制到对应子目录。刷新http://127.0.0.1:8080观察页面图片是否全部更新。简单的复制脚本模板import shutil from pathlib import Path source_dir Path(./ComfyUI/output) # 按实际路径修改 target_dir Path(./site/assets/avatars) # 按实际站点结构修改 target_dir.mkdir(parentsTrue, exist_okTrue) images sorted(source_dir.glob(*.png)) for idx, img in enumerate(images[:20]): target target_dir / favatar_{idx:03d}.png shutil.copy(img, target) print(target)如果你用的图片较多可以只复制前 20 张避免页面加载过慢。网页 HTML 中建议统一使用相对路径例如assets/avatars/avatar_000.png这样以后换目录不用改太多页面代码。预期结果刷新页面后所有头像都被替换成角色图背景图、卡片图也只要把路径指到新文件就能形成“角色布满网页”的效果。判断标准浏览器看到的图片不再是旧占位图。图片显示完整没有裂开。页面响应速度正常没有被超大图片拖慢。如果图片裂开优先检查路径是否大小写一致以及静态服务是否在site目录下启动。如果浏览器缓存了旧图按 CtrlF5 强制刷新。6. 接口 API 与批量任务ComfyUI 自带 HTTP API这是做“批量任务”和后续自动化的关键。直接通过浏览器手动点击最多算半自动接上 API 之后才能把图片生成嵌入到一个完整的批处理流程里。6.1 常用接口路径ComfyUI 的 API 路径以下面几个为核心GET /返回系统信息。POST /prompt提交一个工作流执行请求。GET /history/prompt_id查询任务执行状态和结果。GET /view?filenamexxxsubfolderyyy获取输出图片。不同版本接口可能有差异但一般稳定包含/prompt和/history。实际调用前先启动服务再用浏览器访问http://127.0.0.1:8188确认服务正常。6.2 提交一个简单任务如果你已经从 ComfyUI 导出了 API 格式工作流 JSON可以用 curl 测试curl -X POST http://127.0.0.1:8188/prompt \ -H Content-Type: application/json \ -d workflow_api.json这个命令把整个工作流 JSON 作为请求体发送。如果返回内容包含{ prompt_id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx }说明任务已经进入队列。6.3 Python 批量提交示例下面是通用批量提交模板可以改编成文件、循环、并发控制。import json import time import requests server http://127.0.0.1:8188 def submit_workflow(workflow, prompt_id_tag): payload {prompt: workflow} response requests.post(f{server}/prompt, jsonpayload, timeout30) if response.status_code 200: data response.json() prompt_id data.get(prompt_id, ) print(f{prompt_id_tag}: {prompt_id}) return prompt_id else: print(f{prompt_id_tag}: {response.status_code} {response.text}) return None with open(workflow_api.json, encodingutf-8) as f: base_workflow json.load(f) prompt_list [ priestess character, classroom, best quality, priestess character, seaside, best quality, priestess character, spaceship, best quality, ] for idx, text in enumerate(prompt_list): workflow json.loads(json.dumps(base_workflow)) # 找到实际的正向提示词节点ID后修改 workflow[6][inputs][text] text # 找到实际的种子节点ID后修改 workflow[6][inputs][seed] 2000 idx submit_workflow(workflow, ftask-{idx}) time.sleep(1.5)批量任务的建议不要一次性提交几百个任务到 ComfyUI 的队列里容易让显存耗尽后大量任务排队失败。建议每次提交 2 到 4 个任务等前一批完成后继续下一批。脚本里要记录任务状态可以用GET /history查询status.completed确认任务真正成功后再提交下一批。失败任务要保留现场信息包括提示词、种子、时间方便复现。6.4 查询任务状态提交任务后可以用/history查询执行状态。示例import requests server http://127.0.0.1:8188 prompt_id 你要查询的prompt_id resp requests.get(f{server}/history/{prompt_id}, timeout30) print(resp.json())返回结果中如果包含completed说明任务已经执行完成。如果包含error需要进一步查看输出信息。没有材料依据时这里不要猜具体的错误结构直接看返回即可。7. 资源占用与性能观察这套流程里最关键的资源是显存其次是磁盘空间。批量任务如果没有控制好参数很容易把显存塞满。7.1 怎么看显存占用启动 ComfyUI 之前先开一个终端窗口运行nvidia-smi生成任务开始后过几秒再运行一次观察 GPU 显存使用量和 GPU 利用率。Memory-Usage一栏可以看到当前用了多少显存。如果提交批量任务可以在任务队列跑起来时多观察几次因为采样阶段和 VAE 解码阶段的显存占用会波动。不同显卡、不同模型、不同分辨率显存占用差异很大。不要看到别人说 8G 能跑就直接把分辨率拉满。稳妥的做法是在自己机器上做一个梯度测试先用 512x512再用 768x768分别观察显存。显存不够时优先降低批量大小和分辨率。7.2 CPU 推理与 GPU 推理如果没有 NVIDIA GPU或者驱动没配好ComfyUI 可能会退回 CPU 推理。CPU 推理不是不能跑但速度慢很多生成一张 512x768 的图可能需要几分钟到十几分钟。批量任务如果只用 CPU建议把任务拆得更小避免长时间排队。判断当前用的是什么推理设备可以在启动日志里看是否加载了 CUDA或者用nvidia-smi看生成时 GPU 显存有没有变化。如果生成时 GPU 显存纹丝不动大概率是 CPU 推理或被关掉了 GPU 加速。7.3 影响性能的参数分辨率分辨率翻倍显存占用接近指数上升。步数步数影响耗时不一定明显影响显存。批量大小批量值越大显存占用越高。ControlNet多个 ControlNet 会显著增加显存开销。模型类型SDXL 相比 SD1.5 更吃显存和显存带宽。LoRA会额外占用少量显存但通常不是主要瓶颈。降低显存占用的通用思路把分辨率降到 512x768 或更低。批量大小设为 1。启动时加--lowvram。使用轻量模型或 SD1.5 系列。关闭其他占用显存的软件比如游戏、浏览器高负载页面。7.4 端口与进程残留ComfyUI 和静态网页服务如果直接关闭终端窗口有时进程还留在后台端口会一直被占用。再启动时会报Address already in use。排查方法netstat -ano | findstr 8188找到占用端口的 PID 后按需结束进程。Windows 下taskkill /PID 进程号 /F如果只是端口冲突最简单的办法是换一个端口重新启动不一定非要结束旧进程。8. 常见问题与排查方法8.1 依赖安装失败问题现象可能原因排查方式解决方案requirements 安装时报错Python 版本不兼容或缺少编译环境查看错误堆栈切换 Python 版本使用虚拟环境重新安装PyTorch 安装太慢网络问题查看下载进度换国内 PyPI 镜像或直接下载对应 wheel 文件No module named torch虚拟环境未激活检查当前 python 路径激活虚拟环境后重新安装依赖8.2 模型文件加载失败问题现象可能原因排查方式解决方案找不到 checkpoint 文件文件没放到对应目录检查models/checkpoints目录放入模型文件后点刷新按钮文件名乱码中文字符或空格检查路径重命名为英文、无空格文件名加载模型时内存不足模型太大或内存不够查看进程内存占用换小模型或增加虚拟内存8.3 启动与访问问题问题现象可能原因排查方式解决方案浏览器打不开 WebUI服务未启动或端口错误检查终端日志和端口按日志提示换端口重新启动页面显示连接被拒绝服务进程异常退出看后台报错根据报错修复后重启静态网页图片裂开图片路径不对查看浏览器控制台元素路径改 HTML 中相对路径8.4 显存不足与生成失败问题现象可能原因排查方式解决方案torch.cuda.OutOfMemoryError分辨率太高或批量太大用 nvidia-smi 查看显存降低分辨率、批量设为 1、加 --lowvram长时间不出图队列拥挤或任务卡住查看 ComfyUI 队列 API清空队列重启服务出图全黑或全灰采样器配置错误或模型异常修改步数和采样器恢复默认采样参数换基础模型测试8.5 批量任务不稳定问题现象可能原因排查方式解决方案部分任务提交失败网络抖动或节点 ID 写错查看脚本报错修正 JSON 节点 ID增加重试生成结果突然崩坏提示词冲突或种子异常对比前后提示词固定角色描述小范围改场景输出图片缺图保存节点路径不对检查输出目录设置统一输出目录脚本内核对文件数量9. 最佳实践与使用建议这类“本地 AI 出图 批量替换网页素材”的实验最容易翻车的地方不是技术而是流程管理。给几条具体建议。第一条第一次跑通全流程时所有参数都用最小档。分辨率 512x512步数 15 到 20批量数 1角色提示词只保留最核心的关键词。先确认整条命令链能走通再逐渐加大工作量。即使项目本身很熟练新换一台机器也建议先小参数验证。第二条文件目录要分层管理。建议至少分成四个目录原始提示词和素材、ComfyUI 输出图、筛选后的网页素材、站点 HTML。界面预览用的图片尽量挑生成质量高、角色一致性强的图而不是所有输出图都直接塞进页面。按批次命名例如batch01_000.png方便回退和复现。第三条批量任务必须加日志。每提交一个任务记录当前时间、提示词、种子、请求返回状态、生成的图片文件名。没有日志一旦某个任务失败你很难判断是网络问题、显存问题还是提示词问题。最简单的方式是在 Python 脚本里把信息追加到run.log文本文件。第四条接口服务不要裸奔在公网。ComfyUI 默认监听127.0.0.1是合适的。如果确实需要局域网访问也要限制访问来源。始终记住这个服务只服务你的测试环境不承担公网业务。第五条涉及角色和版权素材时必须先确认授权。“普瑞赛斯”形象如果是游戏、小说、动画等作品的版权内容本地自娱自乐是一回事发到公开平台、打包分享、商用变现是另一回事。发布前再问自己一句这些素材的授权允许我这么用吗尤其是使用了社区下载的角色 LoRA要回到模型发布页面看用户协议。第六条网页替换实验只在本地静态页面里做。如果后续想做成自动更新页面可以把site目录交给版本控制用 CI 或本地定时脚本重新跑批量生成。但不要用浏览器插件去改真实网站的界面也别拿这套流程促进任何绕过平台限制的行为。10. 总结与下一步这次实验的核心不是“入侵”这个噱头而是一条可复用的本地链路ComfyUI 生成角色图、API 批量提交、脚本替换静态网页素材。整个过程都在本机完成改造成本低验证路径清晰。建议你按顺序验证功能。第一步先跑通一张角色图确认模型加载、显存占用和输出目录都正常。第二步把工作流导出成 API JSON用 Python 提交第二张、第三张验证批量任务是否稳定。第三步才考虑搭建一个本地静态页面把生成图批量复制到资源目录刷新浏览器查看效果。最容易踩的坑有三个模型文件路径不匹配、批量脚本里的节点 ID 写错、显存不足导致任务排队后集体失败。前两个问题靠日志和打印工作流 JSON 就能解决第三个问题靠小参数测试和分批提交规避。后续可以继续扩展的方向包括给角色训练专属 LoRA让一致性更稳定用 IPAdapter 做角色参考图控制把生成任务封装成 Web 服务通过请求参数动态传入提示词或者用定时脚本定期刷新本地站点让“角色铺满页面”的素材持续更新。这些方向都以本地测试和合法授权为前提逻辑清晰后这套流程可以直接升级成个人自动化实验室。建议收藏备用后面需要用的时候照着排错就够了。