Chat2SVG
CVPR 2025 收录的文本转矢量图形框架,融合大模型与扩散模型三阶段流水线生成专业级 SVG
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
CVPR 2025 收录的文本转矢量图形框架,融合大模型与扩散模型三阶段流水线生成专业级 SVG
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
2025 年,一篇 CVPR 论文引来开发者社区的广泛讨论——Chat2SVG,一种将大型语言模型(LLM)与图像扩散模型相结合的文本转矢量图形(Text-to-SVG)框架。它的核心思路听起来很直观:让 LLM 先写一段粗略的 SVG 代码作为"骨架",再交给扩散模型和优化器进行细节增强,最终输出可直接用于印刷、设计、动画的高质量矢量图形。
这个项目的出现,直击长期以来 Text-to-SVG 领域的一个核心矛盾:矢量图形的精度要求与 AI 生成的不确定性之间存在天然张力。像素图像可以用扩散模型自由生成,但 SVG 本质上是一组结构化的几何指令(路径、贝塞尔曲线、填充色),随意生成的 SVG 很可能语义混乱、比例失调、颜色溢出。Chat2SVG 的三阶段流水线,正是为解决这一问题而设计的。

图1:Chat2SVG 生成效果展示,左列为文本提示,中列为 LLM 生成的 SVG 模板,右列为最终优化结果。
Chat2SVG 的作者是 Ronghuan Wu,项目托管于 GitHub(kingnobro/Chat2SVG),原始论文于 2024 年底提交至 arXiv(arXiv:2411.16602),并在 2025 年 CVPR(IEEE 计算机视觉与模式识别大会)正式发表。项目目前约 239 颗 GitHub Stars、34 个 Forks,主要语言为 Python。
在正式发表前,SVG 生成领域已有不少尝试,但大多数方法面临三个共性问题:形状规则性差(生成的多边形不规整、曲线不平滑)、泛化能力弱(对简单类别有效,复杂场景崩溃)、表达力有限(难以渲染渐变色、纹理、复杂遮挡关系)。Chat2SVG 尝试通过 LLM + 扩散模型的混合路线同时解决这三个问题。
Chat2SVG 的工作流程分为三个阶段,每个阶段对应一个独立的子项目目录,层层递进:
这是整个流程的起点。给定一个文本提示(如"一只猫坐在草地上"),系统调用 Claude 或 GPT-4 等大语言模型,分三步完成:
生成多个 SVG 变体后,系统使用 ImageReward 或 CLIP 模型自动打分排序,挑选质量最佳的进入下一阶段。这一步在 1_template_generation/main.py 中实现。
生成的 SVG 模板虽然结构正确,但往往过于"几何化"——所有元素都是简单的色块,缺乏真实感。第二阶段的目标是为这些色块赋予纹理和细节。
核心流程:
第二阶段在 2_detail_enhancement/main.py 中完整实现,支持调节增强强度(strength 参数)、SAM 采样密度(points_per_side)等。
经过前两阶段,SVG 的内容和结构已经比较完整,但曲线的平滑度、点的数量可能仍不理想。第三阶段使用 DeepSVG(基于 Transformer 的 SVG 生成模型)进行端到端优化:
optim_latent.svg(保留潜在空间语义)和 optim_point.svg(精确的路径点坐标)。第三阶段在 3_svg_optimization/main.py 中实现,核心依赖 diffvg( differentiable SVG renderer,可微渲染器)和 DeepSVG 模型。
项目代码组织如下:
| 目录/文件 | 作用 | 关键依赖 |
|---|---|---|
svglib/ | SVG 解析与渲染核心库(geom、svg、path、primitive、tensor) | shapely、numpy、cairosvg、matplotlib |
utils/ | LLM 调用封装(Claude/OpenAI)、工具函数 | anthropic、openai、omegaconf |
1_template_generation/ | 第一阶段:LLM 生成 SVG 模板 | transformers、CLIP、ImageReward |
2_detail_enhancement/ | 第二阶段:扩散模型增强 | diffusers、ControlNet、SAM、SDXL |
3_svg_optimization/ | 第三阶段:DeepSVG 路径优化 | DeepSVG、diffvg、kornia |
prompts.yaml | LLM 生成 SVG 的系统提示词模板 | — |
svglib 核心库(最值得关注的技术模块):svglib/svg.py 实现了 SVG 文档的类封装,支持路径组(SVGPathGroup)、基础图形(SVGPath、SVGRectangle、SVGCircle、SVGEllipse、SVGLine 等);svglib/svg_path.py 实现了完整的 SVG path 命令解析器,支持 M/L/C/A/Z 等所有标准命令;svglib/geom.py 实现了基础几何计算(Point、Bbox、RotationMatrix);svglib/tensor.py 实现了 SVG 到张量表示的转换,是与深度学习模型对接的桥梁。
utils/gpt.py 封装了与 LLM 的交互逻辑,默认后端支持 Claude 和 Wildcard(第三方代理)。Session 类实现了多轮对话管理,支持发送文本提示和图像参考。
requirements.txt 列出 35+ 个依赖,涵盖:深度学习(transformers、diffusers、accelerate、torch)、计算机视觉(opencv-python、scikit-image、pillow)、SVG 处理(cairosvg、shapely、svgwrite)、向量优化(diffvg、deepsvg、kornia)等。
Chat2SVG 不适合快速部署,原因有三:
依赖链极长:除了 Python 包,还需要手动安装 diffvg(需要 cmake + ffmpeg + 编译)和 picosvg;diffvg 本身是 CUDA 扩展,必须与 PyTorch CUDA 版本严格匹配。
GPU 强制要求:第二阶段的 SDXL + ControlNet 推理需要 8GB+ 显存,第三阶段的 DiffVG 渲染同样需要 GPU 加速(代码注释显示消耗 <4GB)。
无容器化支持:项目没有提供 Dockerfile 或 docker-compose.yml,无法通过容器一键部署。所有安装步骤都需要手动在 Conda 环境中执行。
估算完整安装时间为 2 小时以上,涉及:conda 环境创建 → PyTorch CUDA 安装 → 35+ Python 包 → diffvg 编译 → picosvg 安装 → 模型权重下载(多个 GB)。
除了文本生成,Chat2SVG 还支持自然语言编辑现有 SVG。用户可以对已有的 SVG 提出修改需求(如"把背景改成蓝色"、"把圆形改成三角形"),系统会调用 LLM 理解指令并在 SVG 源码层面进行精确修改,同时保持整体语义一致。这一功能基于论文中描述的"Text-Guided SVG Editing"机制。
论文坦诚提及了几个局限:
Chat2SVG 代表了 AI 生成内容(AIGC)从位图向矢量图扩展的一个重要方向。它展示了混合范式(LLM + Diffusion + 传统图形学)的可行性,也为设计自动化、游戏美术、UI 原型生成等场景提供了新的技术选型。随着更多类似工作的出现,"用自然语言描述就能得到可编辑的设计稿"或许很快不再是想象。
Star 趋势:项目于 2025 年 CVPR 期间(6月前后)获得较多关注,当前 239 Stars 反映了学术界对该工作的认可,高于同期大多数纯工程开源项目。