| name | cover-image |
| description | Generates agentchan template/project COVER image โ single key-visual illustration
|
| disable-model-invocation | true |
Cover Image
Single-shot illustration โ ํ
ํ๋ฆฟ/ํ๋ก์ ํธ์ COVER ์ด๋ฏธ์ง. character-images์ gen-image.ts๋ฅผ ๊ทธ๋๋ก ์ฌ์ฌ์ฉํ๋ค.
[README + SYSTEM์ด ๊ฐ๋ฆฌํค๋ ํ์ผ๋ค] โ COVER.{png|jpg}
Prerequisites
- ํ๋ก์ ํธ ๋ฃจํธ์์ ์คํ (bun์ด
.env auto-load)
GEMINI_API_KEY ๋๋ GOOGLE_API_KEY
๋์ ๊ฒฝ๋ก
| ๋์ | ์์น |
|---|
| ํ
ํ๋ฆฟ cover | example_data/library/templates/{name}/COVER.{png|jpg} |
| ํ๋ก์ ํธ cover | apps/webui/data/projects/{slug}/COVER.{png|jpg} |
probeCover()๋ webp/png/jpg/jpeg/gif/svg/avif ์์ผ๋ก ํ์. gen-image.ts๋ .png๋ฅผ ์์ฒญํด๋ ๋ชจ๋ธ์ด jpeg๋ฅผ ๋ฐํํ๋ฉด .jpg๋ก ์๋ ์ ์ฅํ๋ฏ๋ก ๋ ๋ค ํ์ฉ.
1. ์
๋ ฅ ์์ง
README.md frontmatter์ name/description โ ํ
ํ๋ฆฟ์ ํ ์ค ์ ์ฒด์ฑ
SYSTEM.md body โ ์ฅ๋ฅดยทํคยทํต์ฌ ์ฅ๋ฉด
- SYSTEM.md๊ฐ ์ฐธ์กฐํ๋
files/โฆ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ผ ์์ฐ์ค๋ฝ๊ฒ ์ฝ์ด ๋ฌด๋ยท์บ์คํธยท๋ถ์๊ธฐ์ ์ค์ ๋ฌ์ฌ๋ฅผ ํก์
์์ฝํด๋ ๊ฒ:
- ๋ฌด๋ (์๊ณต๊ฐยท๊ณต๊ฐ ์ฑ๊ฒฉ)
- ์ค์ฌ ๊ฐ๋ฑ ๋๋ ํต์ฌ ์๊ฐ
- ํค ํค์๋ 2~3๊ฐ
๋์ ๊ฐ์์ ๊ฐ์ ร $0.02โ0.04 ๋น์ฉ์ ๊ณต์งํ๊ณ ์น์ธ ๋ฐ๋๋ค.
2. ์คํ์ผ ํ ์ค ๊ฒฐ์
ํ
ํ๋ฆฟ ์ฅ๋ฅดยทํค์ ํ ์ค style anchor๋ก:
| ์ฅ๋ฅด | style anchor ์์ |
|---|
| ํํ์ง RPG | ๊ณ ์ JRPG ํค๋น์ฃผ์ผ ์คํ์ผ์ ํํ์ง ์ผ๋ฌ์คํธ |
| ์์คํ์ค/๋ฏธ์คํฐ๋ฆฌ | ๋ค์ค ๋์๋ฅด ์น์ฝ๋ฏน ํ์ ์ฌ์ผ ์์คํ์ค ์ผ๋ฌ์คํธ |
| ์์ค/๋๋ผ๋ง | ์ํ ํฌ์คํฐ ์คํ์ผ์ ์๋ค๋งํฑ ๋๋ผ๋ง ์ผ๋ฌ์คํธ |
| ๊ฒ์๋ถ/์ธํฐ๋ํฐ๋ธ | ๋น์ฃผ์ผ ๋
ธ๋ฒจ ํ์ดํ ํ๋ฉด ์คํ์ผ |
| ์ผ์/์บ๋ฆญํฐ ์ฑ | Studio Ghibli ํค์ ๋ถ๋๋ฌ์ด ์ฅ๋ฉด ์ผ๋ฌ์คํธ |
3. ๊ธฐ์กด ํ์ผ ์ ๋ฆฌ
์ cover๋ฅผ ์ฐ๊ธฐ ์ ์ ๊ฐ์ ๋๋ ํ ๋ฆฌ์ ๋ชจ๋ ํ์ฅ์ cover๋ฅผ ์ญ์ :
rm -f example_data/library/templates/{name}/COVER.{png,jpg,jpeg,webp,svg,gif,avif}
4. ์์ฑ
ํ๋กฌํํธ ํ
ํ๋ฆฟ:
{style}๋ก ๊ทธ๋ฆฐ {์ฅ๋ฅด} ํค๋น์ฃผ์ผ.
์ฅ๋ฉด: {๋ฌด๋ ํ ์ค ๋ฌ์ฌ}
๊ตฌ์ฑ: {์ค์ฌ ์์ฌ}, {์กฐ๋ช
ยท์๊ฐ}, {์นด๋ฉ๋ผ ๊ฑฐ๋ฆฌ/์ต๊ธ}
๋ฌด๋: {ํค ํค์๋}
์ข์ฐ๋ก ๋์ ์์ด๋ ๊ตฌ๋, ์ค์์ ์ฃผ ํผ์ฌ์ฒด. ํ๋ฉด ์ ์ฒด์ ๋ถ์๊ธฐ.
์ด๋ค ๊ธ์ยทํ
์คํธยท๋ก๊ณ ยท๋ฐฐ์งยท์ํยท์๋งยท๊ฐํ ๋ฌธ๊ตฌ๋ ์์ด.
๊ฐ ๋์๋ง๋ค ์๋ ๋ธ๋ก์ ๋ณ๋ ฌ ๋ฐํ (์ ๋ถ &), ๋ง์ง๋ง์ wait:
bun run .agents/skills/character-images/scripts/gen-image.ts \
"example_data/library/templates/{name}/COVER.png" --aspect 16:9 <<'PROMPT' &
{prompt}
PROMPT
wait
5. ๊ฒ์ฆ
for T in <targets>; do
DIR="example_data/library/templates/$T"
F="$(ls "$DIR"/COVER.png "$DIR"/COVER.jpg 2>/dev/null | head -1)"
[ -z "$F" ] && { echo "MISSING: $T"; continue; }
file "$F" | grep -Eq "PNG image|JPEG image" || echo "BAD: $T ($F)"
ls -l "$F" | awk '{ print $5, $NF }'
done
๊ธฐ์ค: ์๊ทธ๋์ฒ๊ฐ PNG/JPEG image, ํฌ๊ธฐ 100KB ์ด์.
6. ๋ฐํ์ ๋๊ธฐํ (ํ
ํ๋ฆฟ ๋์)
bun run example-data:copy -- --force
์คํจ ๋ณต๊ตฌ
| ์ฆ์ | ์์ธ | ๋ณต๊ตฌ |
|---|
file์ด data๋ง ํ์ | stderr๊ฐ stdout ์ค์ผ | ์์ ์ฌ์์ฑ |
| ๋ชจ๋ธ์ด ํ
์คํธยท๋ก๊ณ ๋ฅผ ๋ฃ์ | ๋ค๊ฑฐํฐ๋ธ ๋ฏธํก | ํ
์คํธ ๊ธ์ง ๊ตฌ๋ฌธ์ ํ๋กฌํํธ ๋์ ๋ ๊ฐํ๊ฒ |
| ์ธ๋ฌผ ์ผ๊ตด์ด ๋๋ฌด ์ ๋ฉด | ๊ตฌ๋ ์ง์ ๋ถ์กฑ | "์ค์ ํผ์ฌ์ฒด๋ ์ค๋ฃจ์ฃ/๋ฏธ๋์ ์ท, ๋ถ์๊ธฐ ์ค์ฌ" ์ถ๊ฐ |
์ ํ
- ๋ชจ๋ธ:
gemini-3.1-flash-image-preview (๋ณ๊ฒฝ์ character-images/scripts/gen-image.ts์ MODEL ์์)
- Aspect:
1:1, 3:4, 4:3, 9:16, 16:9 ์ค ์ ํ. ์นด๋ ๋ฐฐ๋๋ 16:9