Omost 图像生成工作流完整拆解:大模型如何靠 Canvas 代码"画图"
【免费下载链接】OmostYour image is almost there!项目地址: https://gitcode.com/GitHub_Trending/om/Omost
给大模型一句"战士与巨龙搏斗",画面里的元素到底是怎么摆放的?Omost 图像生成工作流给出的答案是:让 LLM 写代码。它把模型的编码能力转成图像合成能力——模型调用一个虚拟 Canvas API,给每个元素分配区域、深度和底色,再由 SDXL 把画布变成成品图。
一条长 Prompt 为什么不够用
传统文生图是把所有信息塞进一条长 prompt,扩散模型只能"猜"每个对象放在哪,主体一多位置就乱,你只能反复重抽。Omost 换了一种中间表示:LLM 用代码明确写出"哪个区域、放什么物体、离观察者多远",画布本身因此变得可检查、可编辑。
- 你想挪动某个物体:在聊天框说"把龙从中间挪到左边",模型只重写画布代码里对应的部分,其余元素保持稳定。
- 你想排查生成结果:画布就是一段纯文本 Python,直接看哪个参数写错了,改完重新渲染。
它是一条三阶段流水线
整条链路遵循"输入 → 处理 → 输出":你的自然语言进去,LLM 产出 Canvas 代码,管道把它变成条件向量和区域掩码,SDXL 出图。
模型写出 Canvas 代码
模型被约束在一套固定 API 上(系统提示词见 lib_omost/canvas.py):set_global_description描述整张图,add_local_description逐个添加局部对象。位置用"九宫格 × 九种偏移 × 九种尺寸"的组合,共 729 个标准边界框,比像素坐标更容易被开源 LLM 稳定学会:
canvas = Canvas() canvas.set_global_description(description='warriors fighting a dragon', ...) canvas.add_local_description(location='in the center', area='a large square area', distance_to_viewer=7.0, description='a mighty dragon', ...)画布转成掩码和条件向量
canvas.process()把每个局部描述变成一组"掩码 + 文本":90×90 的掩码标记对象区域,文本先切成不超过 75 token 的独立子提示词,再贪心合并成若干"包",交给 SDXL 的两个 CLIP 编码,保证编码时不会截断语义。每个对象还会带一个 HTML 底色和深度值,深度只用于从背景到前景排序,也直接涂出一张粗略背景图。
区域注意力约束 SDXL 出图
lib_omost/pipeline.py 替换了 SDXL 的交叉注意力处理器:每一步去噪时,把区域掩码之外的注意力分数置为负无穷,强制每个区域只"看"自己的条件。这个无参数写法几乎没有风格偏移,伪代码只有三行:
sim = (q @ k.T) * mask_scale sim.masked_fill_(~mask, float('-inf')) out = sim.softmax(-1) @ v之后由 DPM++ 2M 采样器迭代去噪,VAE 解码出最终图像。
这三类情况适合用 Omost
如果你要快速验证多元素分镜,一句话描述各元素,先检查模型写的画布代码里摆位对不对,再渲染,比反复重抽快。 如果你习惯 Stable Diffusion 的参数手感,会发现界面里的 steps、CFG、负面提示词和高清重绘都很眼熟。 如果你做研究、想看懂区域引导,仓库里的注意力操作实现可以直接当作无参数基线来读。
🚀 三步跑起来
前置条件:8GB 以上显存的 NVIDIA 显卡;量化模型依赖 bitsandbytes,个别显卡跑不动量化版时换官方演示或更高显存。
- 克隆仓库:
git clone https://gitcode.com/GitHub_Trending/om/Omost && cd Omost- 安装依赖(先建 Python 3.10 环境,torch 按 CUDA 版本安装):
conda create -n omost python=3.10 && conda activate omost pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121 pip install -r requirements.txt- 启动服务:
python gradio_app.py启动后浏览器打开聊天页,输入描述,等模型给出画布代码,点 "Render the Image!" 出图。
往哪儿走
仓库当前的渲染器是无参数的注意力基线,质量损耗很小;团队表示后续可能为 Omost 训练参数化的区域引导方法。想先上手的话,跑一个"战士对巨龙"的例子,盯着画布代码随对话怎么变化,是理解这套工作流最直接的入口。
【免费下载链接】OmostYour image is almost there!项目地址: https://gitcode.com/GitHub_Trending/om/Omost
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考