@clawhub-whisky-12-b6c121a1b4
名字转艺术字 Skill,使用百度星河社区 ERNIE-Image API 将姓名或文字生成为艺术字图片。This skill should be used when users want to generate artistic text/name images, calligraphy art, styliz...
---
name: ernie-image-art-name
description: "名字转艺术字 Skill,使用百度星河社区 ERNIE-Image API 将姓名或文字生成为艺术字图片。This skill should be used when users want to generate artistic text/name images, calligraphy art, stylized name designs, or text-to-art-typography tasks. 触发词:艺术字、名字艺术字、书法字、艺术字体、文字设计、名字图片、姓名生成图片、把名字变成艺术字、文字转图片、ERNIE-Image 生图、文生图名字。"
version: 1.0.0
author: lizan
tags:
- image-generation
- ernie-image
- art-typography
- chinese
- baidu-aistudio
---
# 名字转艺术字 Skill
## 功能概述
使用百度星河社区 ERNIE-Image(文心图像大模型)API,将用户提供的姓名或文字生成为高质量的艺术字图片。支持中国风书法、烫金、霓虹、卡通、火焰、冰晶等多种风格。
## 前置条件
需要百度星河社区 Access Token:前往 https://aistudio.baidu.com/account/accessToken 获取。
## 执行流程
### Step 1:确认 Access Token
优先检查是否已配置,按以下顺序:
1. 用户本次提供的 Token(命令行 `--token`)
2. 环境变量 `AISTUDIO_ACCESS_TOKEN`
3. 配置文件 `config.json`(位于 skill 安装目录下)
**若 Token 未配置**,引导用户通过以下命令保存(只需一次):
```bash
python3 scripts/generate_art_name.py --set-token YOUR_TOKEN
```
Token 获取地址:https://aistudio.baidu.com/account/accessToken
### Step 2:确认输入参数
向用户确认:
- **名字/文字**:要生成的内容(必填)
- **风格**:从预设风格中选择(默认中国风)
- 中国风、烫金、霓虹、卡通、石刻、玫瑰、极简、火焰、冰晶、自定义
- **输出目录**(可选,默认 `./art_names`)
若用户描述不够具体,主动询问风格偏好。
### Step 3:执行生成
调用核心脚本(路径相对于 skill 安装目录):
```bash
python3 scripts/generate_art_name.py \
--name "用户名字" \
--style 风格名称 \
--output 输出目录
```
**常用参数:**
| 参数 | 说明 |
|---|---|
| `--name` / `-n` | 要生成的名字或文字(必填) |
| `--style` / `-s` | 风格:中国风/烫金/霓虹/卡通/石刻/玫瑰/极简/火焰/冰晶/自定义 |
| `--prompt` / `-p` | 自定义描述,配合 `--style 自定义` 使用 |
| `--output` / `-o` | 图片保存目录 |
| `--token` / `-t` | 临时指定 Access Token |
| `--model` / `-m` | 模型选择(默认 ERNIE-Image-Turbo) |
| `--set-token` | 将 Token 保存到配置文件(只需一次) |
| `--list-styles` | 查看所有可用风格 |
| `--show-config` | 查看当前配置 |
### Step 4:展示结果
脚本成功执行后,生成的图片会保存到本地。使用 `open_result_view` 展示图片,并询问是否需要调整风格重新生成。
## 错误处理
| 错误 | 解决方案 |
|---|---|
| Token 无效 / 401 | 引导用户重新获取 Token 并用 `--set-token` 保存 |
| 网络超时 | 重试,或将 timeout 延长至 180 秒 |
| 内容审核拦截 | 调整 Prompt 表达方式,避免敏感词 |
| 模型不可用 | 切换为 `ERNIE-Image` 或 `Stable-Diffusion-XL` |
## 参考文档
详见 `references/api_docs.md`:包含完整 API 参数说明、Prompt 写作技巧和代码示例。
## 配置管理
配置文件 `config.json` 位于 skill 安装目录下,格式如下:
```json
{
"access_token": "在这里填写你的 Access Token",
"model": "ERNIE-Image-Turbo",
"output_dir": "./art_names"
}
```
可直接编辑此文件,或用 `--set-token` 命令更新 Token。
FILE:README.md
# ernie-image-art-name
> 名字转艺术字 Skill —— 使用百度星河社区 ERNIE-Image API,将姓名或任意文字生成为高质量艺术字图片。
## ✨ 功能亮点
- **10 种预设风格**:中国风书法、烫金、霓虹、卡通、石刻、玫瑰、极简、火焰、冰晶,或完全自定义
- **精准中文文字渲染**:ERNIE-Image 在中文文字渲染方面处于行业领先水平
- **零依赖**:核心脚本仅用 Python 标准库,无需安装任何第三方包
- **灵活配置**:支持命令行参数、环境变量、配置文件三种 Token 传入方式
## 🚀 快速上手
### 1. 获取 Access Token
前往 [星河社区个人中心](https://aistudio.baidu.com/account/accessToken) 获取 Token,然后保存:
```bash
python3 scripts/generate_art_name.py --set-token YOUR_TOKEN
```
### 2. 生成艺术字
直接和 AI 说:
> 帮我把"张伟"生成一张中国风艺术字图片
或使用命令行:
```bash
# 默认中国风
python3 scripts/generate_art_name.py --name "张伟"
# 指定风格
python3 scripts/generate_art_name.py --name "张伟" --style 霓虹
# 完全自定义描述
python3 scripts/generate_art_name.py --name "张伟" --style 自定义 --prompt "蒸汽朋克风格,齿轮装饰,深棕色背景"
# 查看所有风格
python3 scripts/generate_art_name.py --list-styles
```
## 🎨 支持风格
| 风格 | 描述 |
|---|---|
| 中国风 | 毛笔书法,水墨金色,古典大气 |
| 烫金 | 金属质感,浮雕效果,豪华精致 |
| 霓虹 | 霓虹灯管,赛博朋克,发光效果 |
| 卡通 | 圆润字体,彩虹渐变,活泼可爱 |
| 石刻 | 篆刻浮雕,青铜质感,古朴沧桑 |
| 玫瑰 | 花卉装饰,浪漫粉色,优雅精致 |
| 极简 | 黑白几何,现代设计,高端简洁 |
| 火焰 | 燃烧效果,橙红火焰,动感强烈 |
| 冰晶 | 霜冻效果,蓝白透明,雪花装饰 |
| 自定义 | 配合 `--prompt` 完全自定义描述 |
## ⚙️ 参数说明
| 参数 | 简写 | 说明 |
|---|---|---|
| `--name` | `-n` | 要生成的名字或文字(必填) |
| `--style` | `-s` | 预设风格名称,默认:中国风 |
| `--prompt` | `-p` | 自定义风格描述(`--style 自定义` 时生效) |
| `--output` | `-o` | 图片保存目录,默认 `./art_names` |
| `--token` | `-t` | 临时指定 Access Token |
| `--model` | `-m` | 模型:ERNIE-Image / ERNIE-Image-Turbo / Stable-Diffusion-XL |
| `--set-token` | — | 将 Token 永久保存到配置文件 |
| `--list-styles` | — | 列出所有可用风格 |
| `--show-config` | — | 显示当前配置 |
## 🔑 Token 配置优先级
1. 命令行 `--token YOUR_TOKEN`
2. 环境变量 `export AISTUDIO_ACCESS_TOKEN=YOUR_TOKEN`
3. 配置文件 `config.json`(skill 目录下)
## 📋 依赖说明
- Python 3.6+(仅标准库,无需 pip install)
- 百度星河社区账号(免费,100万 Tokens 免费额度)
## 📄 License
MIT
FILE:references/api_docs.md
# 百度星河社区 ERNIE-Image API 参考文档
## 接口基础信息
| 项目 | 值 |
|---|---|
| 基础域名 | `https://aistudio.baidu.com/llm/lmapi/v3` |
| 文生图接口 | `POST /images/generations` |
| 完整 URL | `https://aistudio.baidu.com/llm/lmapi/v3/images/generations` |
| 接口格式 | 兼容 OpenAI images.generate 格式 |
## 认证方式
在 HTTP Header 中传递 Bearer Token:
```
Authorization: Bearer YOUR_ACCESS_TOKEN
```
**获取 Access Token 地址:** https://aistudio.baidu.com/account/accessToken
## 请求参数
### Request Body(JSON)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `model` | string | 是 | 模型名称,见下表 |
| `prompt` | string | 是 | 图像生成描述文本 |
| `response_format` | string | 否 | `url`(返回链接)或 `b64_json`(返回base64),默认 `url` |
| `n` | integer | 否 | 生成图片数量,默认 1 |
### 可用模型
| 模型名称 | 特点 |
|---|---|
| `ERNIE-Image` | 完整版,图像质量更高,生成较慢 |
| `ERNIE-Image-Turbo` | 快速版(推荐),仅8步推理,速度快 |
| `Stable-Diffusion-XL` | SDXL 模型,风格多样 |
## 响应格式
```json
{
"created": 1714000000,
"data": [
{
"url": "https://...", // response_format=url 时返回
"b64_json": "iVBORw0KGgo..." // response_format=b64_json 时返回
}
]
}
```
## 示例代码
### Python(纯标准库,无需第三方包)
```python
import urllib.request
import json
import base64
ACCESS_TOKEN = "your_access_token_here"
payload = json.dumps({
"model": "ERNIE-Image-Turbo",
"prompt": '将文字"张伟"设计成中国风书法艺术字,金色,红色背景',
"response_format": "b64_json",
"n": 1
}).encode("utf-8")
req = urllib.request.Request(
url="https://aistudio.baidu.com/llm/lmapi/v3/images/generations",
data=payload,
headers={
"Authorization": f"Bearer {ACCESS_TOKEN}",
"Content-Type": "application/json"
},
method="POST"
)
with urllib.request.urlopen(req, timeout=120) as resp:
result = json.loads(resp.read())
# 保存图片
with open("output.png", "wb") as f:
f.write(base64.b64decode(result["data"][0]["b64_json"]))
```
### Python(使用 openai 包)
```python
from openai import OpenAI
client = OpenAI(
api_key="your_access_token_here",
base_url="https://aistudio.baidu.com/llm/lmapi/v3"
)
result = client.images.generate(
model="ERNIE-Image-Turbo",
prompt='将文字"张伟"设计成中国风书法艺术字,金色,红色背景',
response_format="b64_json"
)
```
## 配置文件格式
Skill 配置文件 `config.json` 位于 skill 安装目录根路径下(即 `SKILL.md` 同级目录)。
```json
{
"access_token": "your_access_token_here",
"model": "ERNIE-Image-Turbo",
"output_dir": "./art_names"
}
```
通过脚本自动写入(推荐):
```bash
python3 scripts/generate_art_name.py --set-token YOUR_TOKEN
```
## Prompt 写作技巧(艺术字)
好的艺术字 Prompt 应包含:
1. **明确标注文字内容**:用引号将名字括起来,如 `将文字"张三"设计成...`
2. **指定字体风格**:书法、印刷体、手写体等
3. **颜色描述**:主色调、渐变方向
4. **背景/氛围**:背景颜色或场景
5. **质量要求**:高分辨率、清晰可辨、精细质感
### 示例 Prompt
```
将文字"张伟"设计成中国传统书法艺术字,毛笔字体,水墨风格,金色文字,
红色背景,古典纹样装饰,大气磅礴,文字清晰可辨,高分辨率,正方形构图
```
## 注意事项
- Access Token 有效期:登录后长期有效,但 Token 泄露需立即重置
- 免费额度:每账户 100万 Tokens
- 超时设置:建议 timeout=120 秒(模型推理时间较长)
- 生成失败常见原因:Token 无效、Prompt 触发审核、网络超时
FILE:scripts/generate_art_name.py
#!/usr/bin/env python3
"""
名字转艺术字生成脚本
使用百度星河社区 ERNIE-Image API 生成艺术字图片
用法:
python3 generate_art_name.py --name "李赞" --style 中国风
python3 generate_art_name.py --name "李赞" --style 霓虹 --output ./output
python3 generate_art_name.py --name "李赞" --token YOUR_ACCESS_TOKEN
配置优先级:
1. 命令行参数 --token
2. 环境变量 AISTUDIO_ACCESS_TOKEN
3. 配置文件 ~/.workbuddy/skills/ernie-image-art-name/config.json
"""
import argparse
import base64
import json
import os
import sys
import time
from pathlib import Path
# ──────────────────────────────────────────────────────────────────────────────
# 配置
# ──────────────────────────────────────────────────────────────────────────────
CONFIG_FILE = Path(__file__).parent.parent / "config.json"
DEFAULT_CONFIG = {
"access_token": "",
"model": "ERNIE-Image-Turbo",
"output_dir": "./art_names"
}
API_BASE_URL = "https://aistudio.baidu.com/llm/lmapi/v3"
# 预设风格库
STYLE_PRESETS = {
"中国风": "中国传统书法艺术字,毛笔字体,水墨风格,金色或红色文字,古典纹样背景,大气磅礴",
"烫金": "豪华烫金艺术字,金属质感,深色背景,立体浮雕效果,精致华丽",
"霓虹": "霓虹灯管艺术字,发光效果,赛博朋克风格,深夜城市背景,色彩鲜艳",
"卡通": "可爱卡通字体,圆润边角,彩虹渐变色,白色背景,活泼有趣",
"石刻": "古代石刻篆刻艺术字,浮雕质感,古朴沧桑,青铜或石灰岩质感",
"玫瑰": "玫瑰花卉装饰艺术字,浪漫粉色,花瓣环绕,优雅精致",
"极简": "现代简约艺术字,黑白灰色调,几何字体,高端设计感",
"火焰": "火焰燃烧效果艺术字,橙红色火焰,动感强烈,深色背景",
"冰晶": "冰晶霜冻艺术字,蓝白色调,晶莹剔透,雪花冰花装饰",
"自定义": "" # 用户自行输入 prompt
}
# ──────────────────────────────────────────────────────────────────────────────
# 工具函数
# ──────────────────────────────────────────────────────────────────────────────
def load_config() -> dict:
"""加载配置文件,若不存在则创建默认配置"""
if CONFIG_FILE.exists():
try:
with open(CONFIG_FILE, "r", encoding="utf-8") as f:
cfg = json.load(f)
return {**DEFAULT_CONFIG, **cfg}
except (json.JSONDecodeError, IOError):
pass
return DEFAULT_CONFIG.copy()
def save_config(cfg: dict):
"""保存配置到文件"""
CONFIG_FILE.parent.mkdir(parents=True, exist_ok=True)
with open(CONFIG_FILE, "w", encoding="utf-8") as f:
json.dump(cfg, f, ensure_ascii=False, indent=2)
print(f"✅ 配置已保存到 {CONFIG_FILE}")
def get_access_token(args_token: str, config: dict) -> str:
"""按优先级获取 Access Token"""
# 1. 命令行参数
if args_token:
return args_token
# 2. 环境变量
env_token = os.environ.get("AISTUDIO_ACCESS_TOKEN", "")
if env_token:
return env_token
# 3. 配置文件
cfg_token = config.get("access_token", "")
if cfg_token:
return cfg_token
return ""
def build_prompt(name: str, style: str, custom_prompt: str = "") -> str:
"""构建生成艺术字的 Prompt"""
if style == "自定义" and custom_prompt:
return f'文字"{name}",{custom_prompt}'
style_desc = STYLE_PRESETS.get(style, STYLE_PRESETS["中国风"])
prompt = (
f'将文字"{name}"设计成艺术字,{style_desc},'
f'文字清晰可辨,高分辨率,精细质感,专业设计感,正方形构图'
)
return prompt
def generate_image(prompt: str, access_token: str, model: str) -> bytes:
"""调用 ERNIE-Image API 生成图片,返回图片二进制数据"""
import urllib.request
payload = json.dumps({
"model": model,
"prompt": prompt,
"response_format": "b64_json",
"n": 1
}).encode("utf-8")
req = urllib.request.Request(
url=f"{API_BASE_URL}/images/generations",
data=payload,
headers={
"Authorization": f"Bearer {access_token}",
"Content-Type": "application/json"
},
method="POST"
)
try:
with urllib.request.urlopen(req, timeout=120) as resp:
result = json.loads(resp.read().decode("utf-8"))
except urllib.error.HTTPError as e:
body = e.read().decode("utf-8")
raise RuntimeError(f"API 请求失败 HTTP {e.code}: {body}")
except urllib.error.URLError as e:
raise RuntimeError(f"网络连接失败: {e.reason}")
if "error" in result:
raise RuntimeError(f"API 返回错误: {result['error']}")
b64_data = result["data"][0]["b64_json"]
return base64.b64decode(b64_data)
def save_image(img_bytes: bytes, output_dir: str, name: str, style: str) -> str:
"""保存图片到指定目录,返回保存路径"""
out_path = Path(output_dir)
out_path.mkdir(parents=True, exist_ok=True)
timestamp = int(time.time())
safe_name = name.replace("/", "_").replace("\\", "_")
filename = f"{safe_name}_{style}_{timestamp}.png"
filepath = out_path / filename
with open(filepath, "wb") as f:
f.write(img_bytes)
return str(filepath)
# ──────────────────────────────────────────────────────────────────────────────
# 主入口
# ──────────────────────────────────────────────────────────────────────────────
def main():
parser = argparse.ArgumentParser(
description="名字转艺术字 - 使用百度 ERNIE-Image API",
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog="""
示例:
python3 generate_art_name.py --name "李赞" --style 中国风
python3 generate_art_name.py --name "李赞" --style 霓虹 --output ./我的艺术字
python3 generate_art_name.py --name "李赞" --style 自定义 --prompt "蒸汽朋克风格,齿轮装饰"
python3 generate_art_name.py --set-token YOUR_TOKEN # 保存 Token 到配置文件
python3 generate_art_name.py --list-styles # 查看所有风格
可用风格:
""" + " ".join(STYLE_PRESETS.keys())
)
parser.add_argument("--name", "-n", type=str, help="要转换为艺术字的名字或文字")
parser.add_argument(
"--style", "-s", type=str, default="中国风",
choices=list(STYLE_PRESETS.keys()),
help=f"艺术字风格,默认:中国风"
)
parser.add_argument("--prompt", "-p", type=str, default="",
help="自定义风格描述(--style 自定义 时生效)")
parser.add_argument("--output", "-o", type=str, default="",
help="图片保存目录,默认使用配置文件中的 output_dir")
parser.add_argument("--token", "-t", type=str, default="",
help="星河社区 Access Token(优先于配置文件)")
parser.add_argument("--model", "-m", type=str, default="",
choices=["ERNIE-Image", "ERNIE-Image-Turbo", "Stable-Diffusion-XL"],
help="使用的模型,默认:ERNIE-Image-Turbo")
parser.add_argument("--set-token", type=str, metavar="TOKEN",
help="将 Access Token 保存到配置文件")
parser.add_argument("--list-styles", action="store_true",
help="列出所有可用风格")
parser.add_argument("--show-config", action="store_true",
help="显示当前配置")
args = parser.parse_args()
config = load_config()
# ── 特殊命令 ──────────────────────────────────────────────
if args.list_styles:
print("\n📋 可用艺术字风格:\n")
for style, desc in STYLE_PRESETS.items():
if desc:
print(f" {style:6s} {desc[:40]}...")
else:
print(f" {style:6s} (用 --prompt 自定义描述)")
print()
return
if args.show_config:
print(f"\n⚙️ 当前配置({CONFIG_FILE}):\n")
display_cfg = dict(config)
if display_cfg.get("access_token"):
display_cfg["access_token"] = display_cfg["access_token"][:8] + "****"
print(json.dumps(display_cfg, ensure_ascii=False, indent=2))
print()
return
if args.set_token:
config["access_token"] = args.set_token
save_config(config)
print(f"✅ Access Token 已保存!前8位:{args.set_token[:8]}****")
return
# ── 参数校验 ──────────────────────────────────────────────
if not args.name:
parser.print_help()
print("\n❌ 请使用 --name 指定要转换的名字")
sys.exit(1)
access_token = get_access_token(args.token, config)
if not access_token:
print("❌ 未找到 Access Token!请通过以下方式之一提供:")
print(" 1. 命令行:--token YOUR_TOKEN")
print(" 2. 环境变量:export AISTUDIO_ACCESS_TOKEN=YOUR_TOKEN")
print(" 3. 配置文件:python3 generate_art_name.py --set-token YOUR_TOKEN")
print("\n 获取 Token:https://aistudio.baidu.com/account/accessToken")
sys.exit(1)
model = args.model or config.get("model", DEFAULT_CONFIG["model"])
output_dir = args.output or config.get("output_dir", DEFAULT_CONFIG["output_dir"])
# ── 生成艺术字 ───────────────────────────────────────────
prompt = build_prompt(args.name, args.style, args.prompt)
print(f"\n🎨 正在生成艺术字...")
print(f" 名字:{args.name}")
print(f" 风格:{args.style}")
print(f" 模型:{model}")
print(f" Prompt:{prompt[:80]}{'...' if len(prompt) > 80 else ''}\n")
try:
img_bytes = generate_image(prompt, access_token, model)
saved_path = save_image(img_bytes, output_dir, args.name, args.style)
print(f"✅ 艺术字生成成功!")
print(f" 保存路径:{saved_path}")
print(f" 文件大小:{len(img_bytes) / 1024:.1f} KB\n")
except RuntimeError as e:
print(f"❌ 生成失败:{e}")
sys.exit(1)
if __name__ == "__main__":
main()