AI SVG Logo Generator
基于 Node.js + TypeScript + LangChain 的命令行与库,使用 LLM 生成干净、可扩展的 SVG Logo。支持多模型提供商:OpenAI、OpenRouter、DeepSeek、Gemini、Ollama
功能特性
- 简洁的 CLI:使用单一
--prompt描述风格与需求 - TypeScript API,可集成到你的应用/脚本
- 多提供商支持:
openai|openrouter|deepseek|gemini|ollama - SVG 安全校验与基础清洗:确保输出为单个
<svg>,无脚本/外部引用 - 可设置输出尺寸、模型和提供商
目录结构
src/
cli.ts # 命令行入口
generator.ts # 生成器(核心逻辑)
index.ts # 库导出
lib/
prompt.ts # 系统提示词与用户提示词构造
providers.ts # 多提供商工厂(OpenAI/OpenRouter/DeepSeek/Gemini/Ollama)
validate.ts # SVG 校验与清洗
types/
ambient.d.ts # 可选依赖的模块声明(防类型报错)
环境要求
- Node.js >= 18.18
安装
git clone <your-repo-url>
cd ai_logo_gen
npm install
环境变量(仅 API Key)
cp .env.example .env
# 打开 .env,只需设置 API Key(仅此项),其他参数用 CLI 传参:
# OPENAI_API_KEY=sk-...
# OPENROUTER_API_KEY=...
# DEEPSEEK_API_KEY=...
# GOOGLE_API_KEY=... # 或 GEMINI_API_KEY=...
- provider / model / base-url 一律通过 CLI 或函数参数传递。
构建
npm run build
CLI 使用
通用参数:
Usage: logo-gen [options]
Generate an SVG logo using LangChain + OpenAI
Options:
-p, --prompt <string> Logo design brief (style/brand/colors/motifs in one text)
-W, --width <number> Width (default: 512)
-H, --height <number> Height (default: 512)
-o, --out <path> Output SVG file path (default: "logo.svg")
--provider <name> LLM provider: openai|openrouter|deepseek|gemini|ollama (default: "openai")
--model <string> Model id for selected provider
--base-url <string> Custom base URL for API (OpenRouter/DeepSeek/Ollama)
--api-key <string> API key override
-h, --help display help for command
示例:
node dist/cli.js \
--prompt "终端脚本管理工具的应用图标,极简现代扁平风格,方形圆角,主色调为深蓝色和亮青色,中央是一个抽象的'$'符号与字母'X'巧妙融合,象征命令行与脚本执行,简洁干净,无文字,高对比度,白色或透明背景,矢量图形风格,适合作为App图标或网站favicon,要有弧度设计" \
--provider deepseek \
--model deepseek-chat \
--api-key xxx
--width 512 --height 512 \
--out logo.svg
可选:全局链接命令,直接使用 logo-gen
npm link
logo-gen --provider openai --model gpt-4o-mini \
--api-key $OPENAI_API_KEY \
--prompt "minimal logo for Acme with triangle motif" \
--out logo.svg
库使用(TypeScript)
import { generateSvgLogo } from "ai_logo_gen";
const svg = await generateSvgLogo(
{
prompt: "minimal, geometric mark, green + black, brand: Acme",
width: 512,
height: 512,
},
{
provider: "openai",
model: "gpt-4o-mini",
apiKey: process.env.OPENAI_API_KEY,
}
);
// svg 字符串可直接写入 .svg 文件
提供商与模型
| Provider | 需要的环境变量/参数 | 默认 Base URL | 备注 |
|---|---|---|---|
| openai | OPENAI_API_KEY / --api-key | — | 模型必传 |
| openrouter | OPENROUTER_API_KEY / --api-key | https://openrouter.ai/api/v1 | 模型必传,可自定义 base-url |
| deepseek | DEEPSEEK_API_KEY / --api-key | https://api.deepseek.com | 模型必传,可自定义 base-url |
| gemini | GOOGLE_API_KEY 或 GEMINI_API_KEY / --api-key | — | 需安装额外依赖,模型必传 |
| ollama | 无(本地推理) | http://localhost:11434 | 模型必传,可自定义 base-url |
可选依赖(Gemini/Ollama)
项目对 Gemini 与 Ollama 采用“按需动态导入”。若你使用下列 provider,需自行安装对应包:
-
Gemini:
npm i @langchain/google-genai @google/generative-ai # 如遇依赖冲突: npm i @langchain/google-genai @google/generative-ai --legacy-peer-deps -
Ollama:
npm i @langchain/community
未安装时,运行会给出明确提示,指引安装相应包。
SVG 输出规范
- 仅输出单个
<svg>...</svg>,包含xmlns与viewBox,设置width/height - 无
<script>、foreignObject>或外部引用 - 包含
<title>提升可访问性 - 内容居中、可缩放,优先几何图形而非巨大 path 数据
- 生成后会进行基础清洗与校验(见
src/lib/validate.ts)
常见问题(FAQ / Troubleshooting)
-
运行时报“找不到包
@langchain/google-genai/@langchain/community”- 按“可选依赖”章节安装所需包;或更换 provider(如 openai/openrouter/deepseek/ollama)。
-
npm 装包时
ERESOLVE unable to resolve dependency tree- 试用
--legacy-peer-deps,或改用 pnpm/yarn。
- 试用
-
报错 “Missing API key”
- 对应提供商需要设置 API Key。用
--api-key传入或在.env中设置相应环境变量。
- 对应提供商需要设置 API Key。用
-
输出 SVG 无法预览或显示错位
- 尝试让
--prompt更具体或减少复杂度;或调整尺寸;也可手工检查xmlns、viewBox是否正确。
- 尝试让