Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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备注
openaiOPENAI_API_KEY / --api-key模型必传
openrouterOPENROUTER_API_KEY / --api-keyhttps://openrouter.ai/api/v1模型必传,可自定义 base-url
deepseekDEEPSEEK_API_KEY / --api-keyhttps://api.deepseek.com模型必传,可自定义 base-url
geminiGOOGLE_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>,包含 xmlnsviewBox,设置 width/height
  • <script>foreignObject> 或外部引用
  • 包含 <title> 提升可访问性
  • 内容居中、可缩放,优先几何图形而非巨大 path 数据
  • 生成后会进行基础清洗与校验(见 src/lib/validate.ts

常见问题(FAQ / Troubleshooting)

  1. 运行时报“找不到包 @langchain/google-genai/@langchain/community

    • 按“可选依赖”章节安装所需包;或更换 provider(如 openai/openrouter/deepseek/ollama)。
  2. npm 装包时 ERESOLVE unable to resolve dependency tree

    • 试用 --legacy-peer-deps,或改用 pnpm/yarn。
  3. 报错 “Missing API key”

    • 对应提供商需要设置 API Key。用 --api-key 传入或在 .env 中设置相应环境变量。
  4. 输出 SVG 无法预览或显示错位

    • 尝试让 --prompt 更具体或减少复杂度;或调整尺寸;也可手工检查 xmlnsviewBox 是否正确。