소스 정보
- 저장소
- infometa/workbuddyskills
- 최근 소스 활동
- 2026년 7월 21일 03:35
- 감지된 SKILL.md 언어
- 중국어
- 스타
- 205
- 포크
- 65
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
메뉴
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/infometa/workbuddyskills --skill asset-generator명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SOC 직업 분류 기준
SKILL.md 표시 중
| name | asset-generator |
| description | 游戏资产生成技能。调用外部 AI 服务生成 3D 模型、贴图、音效等资产, 并自动导入到 Godot 项目中。 |
| version | 1.0.0 |
| dependencies | ["godot-core","file-manager","external-api"] |
| triggers | [{"pattern":"生成模型|生成贴图|生成材质|生成音乐|生成音效|生成角色|创建资产"}] |
| inputs | [{"name":"asset_type","type":"string","enum":["model_3d","texture","sprite","music","sfx","voice"],"required":true},{"name":"prompt","type":"string","required":true},{"name":"style","type":"string","required":false}] |
| outputs | [{"name":"asset_path","type":"string","description":"生成的资产在项目中的路径"},{"name":"manifest_entry","type":"object","description":"添加到 manifest.json 的条目"}] |
通过 AI 服务生成游戏资产,并自动导入 Godot 项目。
| 资产类型 | 首选服务 | 备选服务 | 输出格式 |
|---|---|---|---|
| 3D 模型 | Meshy.ai | Tripo3D | .glb |
| 贴图 | Stable Diffusion | Leonardo.ai | .png |
| 精灵图 | Stable Diffusion | - | .png |
| 背景音乐 | Suno | - | .ogg |
| 音效 | - | - | .wav |
| 语音 | ElevenLabs | - | .ogg |
用户提示 → AI 生成 → 下载 GLB → 导入 Godot → 更新清单
{style} {character_type} character, game-ready model, T-pose,
low-poly ({poly_count} triangles), clean topology,
{texture_style} texture, full body
示例:
cartoon fantasy knight character, game-ready model, T-pose,
low-poly (5000 triangles), clean topology,
hand-painted texture, full body
{item_name}, game prop, {style} style,
{poly_count} polygons, centered, {material_description}
示例:
medieval sword, game prop, stylized fantasy style,
2000 polygons, centered, metallic blade with leather-wrapped handle
{environment_object}, game asset, modular,
{style} style, optimized for games, {additional_details}
{
"import_options": {
"generate_collisions": false,
"generate_lightmap_uv": false,
"create_shadow_mesh": true,
"scale": 1.0,
"offset": [0, 0, 0],
"import_animations": true
}
}
seamless tileable {material} texture, top-down view,
high detail, 4k resolution, pbr ready, {additional_details}
示例:
seamless tileable stone floor texture, top-down view,
high detail, 4k resolution, pbr ready, medieval dungeon style
{character} sprite, {view} view, {style} style,
transparent background, game asset, {size} pixels
示例:
pixel art knight sprite, side view, 16-bit style,
transparent background, game asset, 64x64 pixels
game UI icon, {item_name}, flat design style,
{color_scheme} colors, transparent background, {size}x{size}
2D game tileset, {theme} theme, {tile_size}x{tile_size} tiles,
{count} variations, top-down view, seamless edges
| 用途 | 推荐尺寸 | 说明 |
|---|---|---|
| 角色精灵 | 64x64, 128x128 | 2D 游戏角色 |
| UI 图标 | 32x32, 64x64 | 物品、技能图标 |
| 贴图 | 512x512, 1024x1024 | 3D 模型贴图 |
| 背景 | 1920x1080 | UI 背景 |
| Tileset | 16x16, 32x32 per tile | 地图瓦片 |
{
"import_options": {
"compress_mode": "lossless",
"mipmaps": true,
"filter": true,
"repeat": "enabled",
"size_limit": 0
}
}
{genre} {mood} music, {tempo} bpm, {instruments},
game soundtrack, {duration} seconds, loop-ready
场景音乐示例:
| 场景 | 提示词 |
|---|---|
| 主菜单 | orchestral epic theme, moderate tempo, strings and brass, game soundtrack, 90 seconds, loop-ready |
| 探索 | ambient atmospheric music, slow, piano and synth pads, mysterious mood, 120 seconds, seamless loop |
| 战斗 | intense action music, fast 140bpm, drums and orchestra, battle theme, 60 seconds, loopable |
| Boss 战 | epic boss battle music, dramatic, choir and orchestra, intense and climactic, 90 seconds |
| 胜利 | triumphant victory fanfare, uplifting, brass and strings, short 15 seconds |
音效通常需要组合或后处理,建议:
常用音效类型:
interface VoiceConfig {
character_name: string;
voice_id: string; // ElevenLabs voice ID
personality: string; // "wise old man" | "young hero" | "villain"
emotion: string; // "neutral" | "angry" | "sad" | "happy"
}
// 批量生成对话
interface DialogueLine {
id: string;
text: string;
emotion?: string;
}
{
"music_import": {
"loop": true,
"bpm": 120,
"beat_count": 0
},
"sfx_import": {
"loop": false
}
}
{
"version": "1.0.0",
"last_updated": "2026-04-16T10:30:00Z",
"assets": {
"models": [],
"textures": [],
"audio": {
"music": [],
"sfx": [],
"voice": []
}
}
}
{
"id": "model_player_knight",
"name": "Player Knight",
"type": "model_3d",
"path": "res://assets/models/characters/player_knight.glb",
"source": {
"service": "meshy.ai",
"prompt": "cartoon fantasy knight character...",
"generation_date": "2026-04-16T10:30:00Z",
"task_id": "task_abc123"
},
"metadata": {
"poly_count": 5000,
"has_animations": true,
"animations": ["idle", "walk", "run"
func add_asset_to_manifest(asset_info: Dictionary) -> bool:
var manifest_path = "res://assets/manifest.json"
var manifest = load_json(manifest_path)
if manifest == null:
manifest = {
"version": "1.0.0",
"last_updated": "",
"assets": {
"models": [],
"textures": [],
"audio": {"music": [], "sfx": [], "voice": []}
}
}
# 根据类型添加到对应数组
var asset_type = asset_info.get("type", "")
match asset_type:
"model_3d":
manifest.assets.models.append(asset_info)
"texture", "sprite":
manifest.assets.textures.append(asset_info)
"music":
manifest.assets.audio.music.append(asset_info)
"sfx":
manifest.assets.audio.sfx.append(asset_info)
"voice":
manifest.assets.audio.voice.append(asset_info)
manifest.last_updated = Time.get_datetime_string_from_system()
return save_json(manifest_path, manifest)
{
"batch_generate": {
"characters": [
{
"id": "player",
"prompt_template": "cartoon {class} character",
"variants": ["knight", "mage", "archer"]
}
],
"items": [
{
"category": "weapons",
"items": ["sword", "staff", "bow"],
"style": "fantasy medieval"
}
]
}
}
async function batchGenerate(config: BatchConfig): Promise<BatchResult[]> {
const results: BatchResult[] = [];
for (const item of config.items) {
// 控制并发,避免 API 限制
await delay(1000);
const result = await generateAsset(item);
results.push(result);
// 更新进度
console.log(`Generated ${results.length}/${config.items.length}`);
}
return results;
}
此流程依赖
godot-plugin-backend后端服务和 4 个内部 MCP 工具。
用户自然语言中包含以下意图之一:
调用 check_auth MCP 工具:
check_auth({ action: "check" })
authenticated: true → 继续authenticated: false → 输出登录引导,告诉用户:
「需要登录才能使用 AI 生图服务。请在浏览器中访问 {loginUrl} 完成 GitHub 授权。
授权完成后,将页面显示的 Token 告诉我,我会帮你保存。」check_auth({ action: "save", token: "..." }) 保存调用 get_user_quota MCP 工具:
get_user_quota({})
sufficient: true → 继续,告知用户当前剩余额度sufficient: false → 告诉用户「额度不足(剩余 0),请联系管理员申请更多额度」Skill 自身能力,根据游戏类型和 Godot 需求自动优化提示词:
| 游戏类型 | 自动追加的提示词 |
|---|---|
| 像素游戏 | pixel art, 16-bit color, no anti-aliasing, game sprite |
| 3D 游戏 | PBR material, 4K resolution, seamless tiling |
| UI 元素 | flat design, transparent background, clean edges |
| 通用 | game asset, transparent background, no watermark |
还会根据用户指定的尺寸自动适配,如果没指定则用合理默认值。
调用 generate_image MCP 工具:
generate_image({
prompt: "用户原始提示词",
optimizedPrompt: "Skill 优化后的完整提示词",
width: 128,
height: 128,
style: "pixel",
outputDir: "${gameDir}/assets/generated"
})
status: "SUCCESS" → 获得 localPath,继续error → 告诉用户「生成失败:{message},已自动退还额度」调用 import_to_godot MCP 工具:
import_to_godot({
sourcePath: "{generate_image 返回的 localPath}",
targetDir: "${gameDir}/assets/icons",
fileName: "coin.png"
})
${gameDir}/assets/generated/用户说:「给我生成一个 128×128 的像素金币图标,放到 assets/icons/」
1. check_auth({ action: "check" })
→ authenticated: true, userName: "alice"
2. get_user_quota({})
→ remainingQuota: 47, sufficient: true
3. [Skill 优化提示词]
原始: "128×128像素金币图标"
优化: "128x128 pixel art gold coin icon, game asset, transparent background, no watermark, suitable for Godot engine, top-down view, 16-bit color"
4. generate_image({
prompt: "128×128像素金币图标",
optimizedPrompt: "128x128 pixel art gold coin icon, ...",
width: 128, height: 128, style: "pixel"
})
→ status: SUCCESS, localPath: "/tmp/generated_xxx.png", remainingQuota: 46
5. import_to_godot({
sourcePath: "/tmp/generated_xxx.png",
targetDir: "${gameDir}/assets/icons",
fileName: "coin.png"
})
→ success: true, resPath: "res://assets/icons/coin.png"
6. 返回:「✓ 已生成像素金币图标并导入到 res://assets/icons/coin.png,剩余额度:46」