| name | pumasi-image |
| description | Image-generation companion skill for the pumasi plugin family. Use when the user wants an image, thumbnail, poster, logo, illustration, or related visual artifact. In Codex this maps directly to the native image generation/editing tool. Korean triggers โ "์ด๋ฏธ์ง ๋ง๋ค์ด์ค", "๊ทธ๋ฆผ ์์ฑ", "์ธ๋ค์ผ ๋ง๋ค์ด", "๋ก๊ณ ๋ง๋ค์ด์ค". English triggers โ "create image", "make thumbnail", "make logo", "draw illustration". DO NOT trigger on code-generation requests like "ํจ์/์ปดํฌ๋ํธ/ํ์ด์ง ๋ง๋ค์ด์ค" โ those go to the pumasi skill. |
/pumasi-image โ Codex ์ด๋ฏธ์ง ์์ฑ
Codex CLI์ ๋ค์ดํฐ๋ธ ์ด๋ฏธ์ง ์์ฑ/ํธ์ง ๋๊ตฌ(/imagen, gpt-image-2)๋ก ์ด๋ฏธ์ง๋ฅผ ๋ง๋ ๋ค.
์ฝ๋ ๋ณ๋ ฌ ์ธ์ฃผ(pumasi)์ ์์ ํ ๋ถ๋ฆฌ๋ ๋
๋ฆฝ ์คํฌ.
๋จผ์ ์ฝ์ ๊ฒ
references/clarification-matrix.md โ ๋ชจ๋๋ณ ์๋ ํ์
์ง๋ฌธ ๋งคํธ๋ฆญ์ค
references/keyword-mapping.md โ ๋น์จยทํ๋ฆฌํฐ ํค์๋ ์๋ ๋งคํ + ์์ฐ์ด ํํธ ๋ณํํ
references/image-studio-prompt.md โ ๋ชจ๋ ๋ถ๋ฅ + Output Template ์์คํ
ํ๋กฌํํธ (์๋ฌธ ํ๋กฌํํธ ์์ฑ ์ง์ ์๋ง Read)
ํต์ฌ ์์น
- ๋ฐฑ์๋๋ Codex ๋ค์ดํฐ๋ธ ์ด๋ฏธ์ง ๋๊ตฌ ๋จ์ผ โ nanobanana ๋ฑ ๋ค๋ฅธ ๋ฐฑ์๋ ์ฌ์ฉ ์ ํจ
- image-studio ์์คํ
ํ๋กฌํํธ ๋ด๋ฉดํ โ ๋ชจ๋ ๋ถ๋ฅ + Output Template ์์ฑ
- ํ์ฒ๋ฆฌ ์ ๋ ๊ธ์ง โ sips/ImageMagick/์ฌ์ธ์ฝ๋ฉ ๊ธ์ง, ์์ฑ ์๋ณธ(๋ฐํ๋ base64) ๊ทธ๋๋ก ์ ์ฅ.
generated_images/ watchยท๋ณต์ฌ ๊ธ์ง(์คํ
์ผ ์ค๋ณต ๋ฒ๊ทธ)
- ์ ์ฅ ๊ฒฝ๋ก ๊ณ ์ โ
{BASE_DIR}/images/{YYYY-MM-DD}/{slug}-{seq}.png
- ์ต๋ 5๊ฐ ์ง๋ฌธ โ ๊ธฐ์ 2๊ฐ + ์๋ 3๊ฐ, ์กฐ๊ฑด๋ถ ์คํต
- ํ
์คํธ๋ ์ด๋ฏธ์ง ๋๊ตฌ๊ฐ ์ง์ ๋ ๋๋งํ๋ค โ ์ธ๋ค์ผยทํฌ์คํฐยท๋ก๊ณ ์ ํ๊ธ/์๋ฌธ ์นดํผ๋ ํ๋กฌํํธ์ Text Integration ์น์
์ ๋ฐ์ดํ๋ก ๋ฌถ์ด ๊ทธ๋๋ก ๋ช
์. HTML/CSS ๋ถ๋ฆฌยทํํฉ์ฑยทํ
์คํธ ๋ ์ด์ด ๋ถํ ์ ๋ ๊ธ์ง. ๊ตฌ์ธ๋ diffusion(SD/Midjourney) ๊ฐ์ ์ผ๋ก "ํ
์คํธ ๋ชป ๊ทธ๋ฆผ"์ด๋ผ๊ณ ํํผํ์ง ๋ง ๊ฒ โ ๋ค์ ยง์ capability snapshot ์ฐธ์กฐ.
gpt-image-2 capability snapshot (as of 2026-05)
๋ชฉ์ : ๊ตฌ์ธ๋ diffusion ์ง๊ฐ์ผ๋ก ํํผ ํ๋(HTML/CSS ๋ถ๋ฆฌ, ํ
์คํธ ๋นผ๊ณ ํฉ์ฑ, ์ฌ์๋ ํํผ)์ ํ์ง ๋ชปํ๊ฒ capability๋ฅผ ๋ช
์์ ์ผ๋ก ๋ฐ๋๋ค. ๋ชจ๋ธ ์
๋ฐ์ดํธ ์ as of ๋ ์ง ๊ธฐ์ค์ผ๋ก ๊ฐฑ์ .
CAN (์์ ์๊ฒ ์๋)
- ํ๊ธ/์๋ฌธ ํค๋๋ผ์ธ ํ
์คํธ โ 16pt ์ด์ ๊ตต์ sans-serif/serif, ์ ํํ ์๋ชจ/ํ
- ๋ค๊ตญ์ด ํผ์ฉ โ ํ+์ ๋์ ๋
ธ์ถ(์: "๊ด์๋๊ต BEST 5 / Best Spots")
- ๋ก๊ณ ํ์ดํฌ๊ทธ๋ํผ โ ์๋๋งํฌ, ๋ ํฐ๋งํฌ, ํ์/ํ๊ธ ๋์์ธ ํ์ดํฌ
- ์ซ์/๋ ์ง ๋จ์ ํ๊ธฐ โ "2026", "BEST 5", "Vol.3" ์ ๋๋ ์์ ์
- ๋ณต์กํ ๋ ์ด์์ โ ํค๋๋ผ์ธ + ์๋ธ์นดํผ + ๊ฐ๊ฒฉํ + CTA ๋ฒํผ ํ ์ปท์
- ํยทUI ๋ชฉ์
ยท์ฐจํธ โ ํ/์ด ์ ๋ ฌ, ๋ผ๋ฒจ, ๋ฒ๋ก, ๋ง๋๊ทธ๋ํ ํ
์คํธ
- ์/์ผ๊ตด/ํฌ์ฆ ๋ํ
์ผ โ ์๊ฐ๋ฝ ๊ฐ์, ํ์ , ์์ ๋ฐฉํฅ ์ ํ
- ์ฌ์ง ์ฌ์ค์ฑ โ DSLR ๋ฃฉ, ์กฐ๋ช
์ผ๊ด์ฑ, ๊ทธ๋ฆผ์/๋ฐ์ฌ ๋ฌผ๋ฆฌ
WEAK (์กฐ์ฌํด์ ์๋, ๊ฒฐ๊ณผ ๋ณด๊ณ ํ๋จ)
- ๋งค์ฐ ์์ ๊ธ์จ โ 8pt ์ดํ ๋ณธ๋ฌธ์ ๊นจ์ง ํ๋ฅ ๋์ โ ํค๋๋ผ์ธ ์์ฃผ๋ก ์ค๊ณ
- ๊ธด ๋ณธ๋ฌธ ๋จ๋ฝ โ ํ ๋ธ๋ก 50์ ์ด์์ ์ค๊ฐ์ ์๋ชจ ํ๋ค๋ฆผ ๊ฐ๋ฅ
- ์ ํ์ฑ์ด ์ค์ํ ์ซ์ โ ๊ฐ๊ฒฉ/๋ ์ง/์ ํ๋ฒํธ๋ 1-2๊ธ์ ๋ณํ ์ํ (์์ฑ ํ ๊ฒ์ ํ์)
- ์๊ธ์จ/์บ๋ฆฌ๊ทธ๋ํผ ํ๊ธ โ ์๋ชจ ๊ฒฐํฉ ํ๋ค๋ฆผ ์ฆ์, ์ ์์ฒด ํฐํธ๊ฐ ์์
CAN'T ๊ฐ์ ๊ธ์ง (๊ตฌ์ธ๋ diffusion ์ง๊ฐ ์ฐจ๋จ)
- โ "ํ๊ธ์ ์ด์ฐจํผ ๊นจ์ง๋๊น ์๋ฌธ์ผ๋ก๋ง ๋ง๋ค์" โ gpt-image-2๋ ํ๊ธ OK
- โ "ํ
์คํธ๋ ๋นผ๊ณ ๋ง๋ ํ HTML/CSS๋ก ํฉ์ฑํ์" โ 1์ฐจ ์ง์ ๋ ๋ ๊ธ์ง ์ฌ์ ์๋
- โ "์ธ๋ค์ผ์ด๋๊น ํ
์คํธ ๋ถ๋ถ๋ง ๋ฐ๋ก ๋์์ธํ์" โ ํ ์ปท์ ํตํฉ ๋ ๋๊ฐ ์ ์
- โ "๋ก๊ณ ์ ํ์/ํ๊ธ ๋ค์ด๊ฐ๋ฉด ์ ๋จ" โ ์๋๋งํฌ ์ง์ ๋ ๋ ๊ฐ๋ฅ
์ด์ ๋ฃฐ
- 1์ฐจ๋ ๋ฌด์กฐ๊ฑด ๋ค์ดํฐ๋ธ ์ด๋ฏธ์ง ๋๊ตฌ๋ก ์ง์ ๋ ๋ โ ํ
์คํธ ํฌํจ ์ฌ๋ถ ๋ฌด๊ด
- ๊ฒฐ๊ณผ ๊ฒ์ โ ์ด๋ฏธ์ง ํ์ ํ ํ
์คํธ ์ ํ๋ ์ฌ์ฉ์ ํ์ธ (Step 7 ๋ชจ๋ ์ฐธ์กฐ)
- ์ฌ์๋ ์ฐ์ โ ์ฒซ ๊ฒฐ๊ณผ๊ฐ ๊นจ์ก์ผ๋ฉด ํ๋กฌํํธ ๋ณด๊ฐ(ํฐํธ ๋ช
์, ํฌ๊ธฐ ๋ช
์)ํด์ 1-2ํ ์ฌ์์ฑ
- ํฉ์ฑ ์ต์
์ ์ฌ์ฉ์ ๋ช
์ ๊ฑฐ๋ถ ํ โ "์ง์ ๋ ๋ ๊ฒฐ๊ณผ ๋ง์์ ์ ๋ค์ด, ํฉ์ฑ์ผ๋ก ๊ฐ์"๋ ์ฌ์ฉ์ ๋ฐํ๊ฐ ์์ ๋๋ง ํํฉ์ฑ ์ํฌํ๋ก์ฐ ์ ์
์ํฌํ๋ก์ฐ
Step 1: ๋ชจ๋ ์๋ ๊ฐ์ง
์ฌ์ฉ์ ์์ฒญ์์ 7๊ฐ์ง ๋ชจ๋ ์ค ํ๋๋ฅผ ๊ฒฐ์ ํ๋ค:
| ๋ชจ๋ | ๊ฐ์ง ํค์๋ |
|---|
| MODE_A_PORTRAIT | "ํ๋กํ", "์ธ๋ฌผ", "์ผ๊ตด", "์ด์" |
| MODE_B_LANDSCAPE | "ํ๊ฒฝ", "๋ฐฐ๊ฒฝ", "์์ฐ", "๋์", "๋ฐ๋ค", "์ฐ" |
| MODE_C_OBJECT | "์ ํ", "๋ฌผ๊ฑด", "์์ดํ
", "์ํ" |
| MODE_D_ILLUSTRATION | "์ผ๋ฌ์คํธ", "๊ทธ๋ฆผ", "์ํธ", "๋๋ก์" |
| MODE_E_THUMBNAIL | "์ธ๋ค์ผ", "์ปค๋ฒ", "๋ํ์ด๋ฏธ์ง", "์ ํ๋ธ" |
| MODE_F_LOGO | "๋ก๊ณ ", "๋ธ๋๋", "์ฌ๋ณผ", "์์ด์ฝ" |
| MODE_G_CONCEPTUAL | "์ปจ์
ํธ", "์ถ์", "์์ด๋์ด", "์์ง" |
๋ชจ๋ ํ๋จ ๋ถํ์ค ์ Step 3์ ์ง๋ฌธ์ "๋ชจ๋ ์ ํ" 1๊ฐ๋ฅผ ์ถ๊ฐํ๋ค.
Step 2: ํค์๋ ์๋ ๋งคํ โ ํ๋ผ๋ฏธํฐ ์ถ์ถ
references/keyword-mapping.md๋ฅผ Readํ์ฌ ๋น์จยทํ๋ฆฌํฐ ์์ฐ์ด ํํธ๋ฅผ ์ถ์ถํ๋ค.
- ๋น์จ ํค์๋๊ฐ ์
๋ ฅ์ ์์ผ๋ฉด โ ๋น์จ ์ง๋ฌธ ์คํต
- ํ๋ฆฌํฐ ํค์๋๊ฐ ์
๋ ฅ์ ์์ผ๋ฉด โ ํ๋ฆฌํฐ ์ง๋ฌธ ์คํต
Step 3: ์ฌ์ฉ์ ์ง๋ฌธ (ยงA ๋ฒํธํ ๋ธ๋ก, ์ต๋ 5๊ฐ)
Codex CLI์๋ Claude Code์ AskUserQuestion ์นด๋ UI๊ฐ ์๋ค. ๊ฒฐ์ ์ด ๊ผญ ํ์ํ๋ฉด
shared/questioning-policy.md ยงA์ ์ฑํ
๋ฒํธํ ์ ํ์ง ๋ธ๋ก์ผ๋ก ๋์ฒดํ๋ค.
references/clarification-matrix.md๋ฅผ Readํ์ฌ ๋ชจ๋๋ณ ์๋ ํ์
์นดํ
๊ณ ๋ฆฌ 3๊ฐ๋ฅผ ํ์ ํ๋ค.
์ง๋ฌธ ์์:
- ๋น์จ (Step 2์์ ํ์ ๋์ผ๋ฉด ์คํต)
- ํ๋ฆฌํฐ (Step 2์์ ํ์ ๋์ผ๋ฉด ์คํต)
3~5. ์๋ ํ์
3๊ฐ (๋ชจ๋ ๋งคํธ๋ฆญ์ค ๊ธฐ๋ฐ)
์ง๋ฌธ ์์น:
- ยง1 + ยง2c: ์ด๋ฏธ ์
๋ ฅ์์ ํ์ ๋ ์ฐจ์์ ๋ฌป์ง ์๋๋ค. ์์ฒญ์ด ๊ตฌ์ฒด์ ์ด๋ฉด ์ง๋ฌธ ์์ด ๋ฐ๋ก ์์ฑํ๋ค(๊ณผ์ ์ง๋ฌธ = ๋ง์ฐฐ ์คํจ).
- ๋ฌผ์ ๋๋ ยงA ๋ฒํธํ ๋ธ๋ก์ผ๋ก โ ๊ฐ ์ฌ๋กฏ๋น 5๊ฐ ์ด์ ์ ํ์ง, ๊ทธ์ค 1~2๊ฐ๋ ์ฐฝ์์ ๋์(โ
), ๋ง์ง๋ง์ "๋ฌธ์ฅ์ผ๋ก ์ง์ ์๋ ค์ฃผ๊ธฐ"(Other ๋์ฒด).
- "์๋ ์ถ์ฒ(AI ํ๋จ)" ์์ ๋ง ์ ํ์ง๋ฅผ ํญ์ ํฌํจํ๊ณ , "๋ชจ๋ฅด๋ฉด 1๋ฒ(์๋ ์ถ์ฒ)์ผ๋ก ์งํํ๊ฒ ์ต๋๋ค"๋ก ์๋ดํ๋ค.
- ์ฌ๋ฌ ์ฌ๋กฏ์ ํ ๋ฒ์ ๋ฌผ์ ๋๋ ๊ฐ ์ง๋ฌธ ๋ธ๋ก์ ์ด์ด์ ์ถ๋ ฅํ๊ณ "์ฌ๋ฌ ๊ฐ๋ฉด 1,3์ฒ๋ผ ์ ์ด์ฃผ์ธ์"๋ก ์๋ด. ์นด๋ UI๋ฅผ ํ๋ด๋ด์ง ๋ง ๊ฒ.
ยงA ๋ธ๋ก ์์ (๋จ์ผ ์ฌ๋กฏ):
์ง๋ฌธ: ์ด๋ค ๋ถ์๊ธฐ๋ก ๊ฐ๊น์?
1. ์๋ ์ถ์ฒ โ ๋ด์ฉ์ ๋ง๊ฒ ํ๋จ. ๊ฒฐ์ ํผ๋ก ์์ด ์งํ
2. ๋คํฌ ์๋ค๋งํฑ โ ์ํ์ , ๊น์ ๊ทธ๋ฆผ์
3. ๋ฐ๋ปํจ โ ์น๊ทผ, ํ์ด, ํ์คํ
4. ์กฐ์ฉํ ์๋ก๊ฐ (โ
) โ ์์ํจ, ์ฌ์ด
5. ๋ฌธ์ฅ์ผ๋ก ์ง์ ์๋ ค์ฃผ๊ธฐ
Step 4: image-studio ๋ด๋ฉดํ + Output Template ์์ฑ
references/image-studio-prompt.md๋ฅผ Readํ์ฌ ์์คํ
ํ๋กฌํํธ๋ฅผ ๋ด๋ฉดํํ๋ค.
๋ด๋ฉดํ ํ:
- Normalization JSON ๋ด๋ถ์ ์ผ๋ก ์์ฑ (๋
ธ์ถํ์ง ์์)
- ์ ํ๋ ๋ชจ๋์ Output Template์ 200~500 ๋จ์ด ์๋ฌธ ํ๋กฌํํธ๋ก ์์ฑ
- ์ฌ์ฉ์ ์ ํ ๊ฐ(๋น์จยทํ๋ฆฌํฐยท์๋ 3๊ฐ)์ Technical Specifications / Anti-Patterns ์น์
์ ๋ฐ์
- ๋น์จยทํ๋ฆฌํฐ ์์ฐ์ด ํํธ๋ฅผ Technical Specifications์ ์ฝ์
(keyword-mapping.md ์ฐธ์กฐ)
ํ๋กฌํํธ๋ฅผ ๋ค์ ๊ฒฝ๋ก์ ์ ์ฅ (์์ผ๋ฉด mkdir -p):
{BASE_DIR}/.pumasi/imagen/prompt-{timestamp}.md
Step 5: ์ ์ฅ ๊ฒฝ๋ก ๊ณ์ฐ
๊ธฐ์ค ๋๋ ํ ๋ฆฌ (ํ๋์ฝ๋ฉ ๊ธ์ง, ๋์ ๊ณ์ฐ):
BASE_DIR=$(git rev-parse --show-toplevel 2>/dev/null || pwd)
DATE=$(date +%Y-%m-%d)
TARGET_DIR="${BASE_DIR}/images/${DATE}"
mkdir -p "$TARGET_DIR"
SLUG="busan-gwangan-bridge-night"
SEQ=1
TARGET_PATH="${TARGET_DIR}/${SLUG}-$(printf '%02d' $SEQ).png"
while [[ -e "$TARGET_PATH" ]]; do
SEQ=$((SEQ + 1))
TARGET_PATH="${TARGET_DIR}/${SLUG}-$(printf '%02d' $SEQ).png"
done
echo "$TARGET_PATH"
์ git root ๊ธฐ์ค์ธ๊ฐ: ์ธ์
์ cwd๊ฐ ํญ์ ํ๋ก์ ํธ ๋ฃจํธ๋ ์๋๋ค. ๋จ์ ์๋๊ฒฝ๋ก๋ ์๋ฑํ ๊ณณ์ ์ ์ฅ๋ ์ํ์ด ์์ด, ํ๋ก์ ํธ ๋ฃจํธ์ images/ ํ์๋ฅผ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๋๋ค. git ์ ์ฅ์ ๋ฐ์ด๋ฉด pwd ๊ธฐ์ค.
slug ์: "๋ถ์ฐ ๊ด์๋๊ต ์ผ๊ฒฝ" โ busan-gwangan-bridge-night, "AI ๋ง์ผํ๋ ์ด์ค ๋ก๊ณ " โ ai-marketplace-logo.
Step 6: ๋ค์ดํฐ๋ธ ์ด๋ฏธ์ง ๋๊ตฌ ํธ์ถ
Codex์ ๋ค์ดํฐ๋ธ ์ด๋ฏธ์ง ์์ฑ/ํธ์ง ๋๊ตฌ(/imagen, gpt-image-2) ๋ฅผ ์ง์ ํธ์ถํ๋ค.
- ๋ฐฑ๊ทธ๋ผ์ด๋ CLI ์ธ์
์ ๋์ฐ์ง ์๋๋ค.
- Step 4์ ์๋ฌธ ํ๋กฌํํธ + Step 5์ ํ๊น ๊ฒฝ๋ก๋ฅผ ๋๊ตฌ์ ์ ๋ฌํ๋ค.
- ํ๋กฌํํธ ๋์ ํ์ฒ๋ฆฌ ๊ธ์ง ๊ฐ๋(์๋ณธ ์ ์ง, ์ฌ์ธ์ฝ๋ฉ ๊ธ์ง)๋ฅผ ๋ช
์ํ๋ค.
- ํ
์คํธ๊ฐ ๊นจ์ก์ผ๋ฉด ํฉ์ฑํ์ง ๋ง๊ณ ํ๋กฌํํธ๋ฅผ ๋ณด๊ฐํด 1~2ํ ์ฌ์์ฑํ๋ค(์ด์ ๋ฃฐ 3).
โ ๏ธ base64 ์บก์ฒ ๊ท์น (codex ์ด๋ฏธ์ง ๋๊ตฌ์ ํต์ฌ ๋์)
codex ์ด๋ฏธ์ง ์์ฑ์ ์ธํฐ๋ํฐ๋ธ TUI์ ๋ค๋ฅด๊ฒ ๋์ํ๋ค:
- ์ด๋ฏธ์ง๋ฅผ base64(inline)๋ก๋ง ๋ฐํํ๋ค. ๋๊ตฌ ๊ฒฐ๊ณผ์
image_generation_call / image_generation_end
์ด๋ฒคํธ result ํ๋์ base64 PNG๊ฐ ์ค๋ ค ์จ๋ค.
~/.codex/generated_images/ ์ ํ์ผ์ ์ ์ฅํ์ง ์๋๋ค. ๋ฐ๋ผ์ ๊ทธ ๋๋ ํ ๋ฆฌ๋ฅผ watch ํ๊ฑฐ๋
"๋ฐฉ๊ธ ์๊ธด ํด๋๋ฅผ ๋ณต์ฌ"ํ๋ ๋ฐฉ์์ ๊ธ์งํ๋ค โ ์คํ
์ผ ์ด๋ฏธ์ง๋ฅผ ์๋ชป ์ง์ด์ค๋ ์ค๋ณต ๋ฒ๊ทธ์ ์์ธ์ด๋ค.
- ํธ์คํธ๋ ์ด๋ฒ ํธ์ถ์์ ๋์์จ base64๋ฅผ ๋์ฝ๋ฉํด Step 5์ ํ๊น ๊ฒฝ๋ก์ ์ง์ ์ ์ฅํ๋ค.
์์ฑ์ด 0์ฅ์ด๋ฉด ๊ฑฐ์ง ์ฑ๊ณต์ ๋ณด๊ณ ํ์ง ๋ง๊ณ ์คํจ๋ก ์ฒ๋ฆฌํ๋ค.
codex exec ์์ ๊ฒฝ๋ก (์ ํ) โ scripts ์ฌ์ฉ
์ง์ ์ด๋ฏธ์ง ๋๊ตฌ๋ฅผ ๋ถ๋ฅด๋ ๋์ ๋ณ๋ codex exec ์์ปค์ ์์ํ๋ ค๋ฉด(๋๋ ์๋ฌธ ํ๋กฌํํธ
์์ฑ๊น์ง ์์ํ๋ ค๋ฉด) scripts/์ ๊ฒฐ์ ์ ๋ํผ๋ฅผ ์ด๋ค. ๋ํผ๋ codex exec --json์ผ๋ก ์ด๋ฒคํธ(JSONL)๋ฅผ
๋ฐ์ extract_image.py๋ก base64๋ฅผ ๋์ฝ๋ฉํด ํ๊น์ ์ง์ ์ ์ฅํ๋ค(์คํ
์ผ ์ค์ง์ ๋ถ๊ฐ, 0์ฅ์ด๋ฉด exitโ 0):
bash $PLUGIN_ROOT/skills/pumasi-image/scripts/imagen.sh \
"{prompt_file_path}" "{target_image_path}" "{aspect e.g. 16:9 โ ์๋ต ๊ฐ๋ฅ}"
bash $PLUGIN_ROOT/skills/pumasi-image/scripts/imagen-full.sh \
"{intent}" "{mode}" "{aspect}" "{quality}" "{target_image_path}"
bash $PLUGIN_ROOT/skills/pumasi-image/scripts/imagen-batch.sh "{batch_json_path}"
โ ๏ธ ์๋๋ฐ์ค/์น์ธ ์ฐํ ๊ฒฝ๊ณ (opt-in). ๋ํผ๋ codex exec --skip-git-repo-check --dangerously-bypass-approvals-and-sandbox๋ก ๋น๋ํํ ์คํํ๋ค โ ๋์์ ๋์ ์ด๋ฏธ์ง ๊ฒฝ๋ก 1๊ฐ
์ฐ๊ธฐ๋ก ํ์ ๋๋ค. ์ ๋ขฐํ๋ ๋ณธ์ธ ํ๋ก์ ํธ์์๋ง ์ฌ์ฉํ๋ค.
Step 7: ๊ฒฐ๊ณผ ํ์ธ + ํ์ (๋ชจ๋๋ณ)
์์ฑ ๋ชจ๋๋ฅผ ํ์ ํ ํ ๊ทธ์ ๋ง๊ฒ ๋์ํ๋ค. (PNG 1์ฅ ํ์ = ์ฝ 1,400~3,000 ๋น์ ํ ํฐ์ด cached prefix์ ๋ฐํ๋ฏ๋ก ๊ธฐ๋ณธ๊ฐ์ ํ์ ์ ํจ.)
๋ชจ๋ ํ์ ๊ท์น
- fast/no-show (๊ธฐ๋ณธ๊ฐ): ๊ฒ์/audit ํค์๋ ์๊ณ , ๋ชจ๋๊ฐ ํ
์คํธ ์์กด(E_THUMBNAIL/F_LOGO)๋ ์๋๊ณ , ์๋์ ํ๊ธ/์๋ฌธ ์นดํผ๊ฐ ์์ ๋
- review/show-one: ๋ชจ๋๊ฐ
MODE_E_THUMBNAIL / MODE_F_LOGO / ์๋์ ์ง์ ์ธ์ฉ๋ ์นดํผ(๋ฐ์ดํ)๊ฐ ์์ ๋ โ ๋ง์ง๋ง 1์ฅ๋ง ํ์
- audit/show-all: ์ฌ์ฉ์๊ฐ "๊ฒ์ํด์ค", "์ ๋ถ ๋ณด์ฌ์ค", "๊ผผ๊ผผํ ํ์ธ", "review all" ๋ช
์ํ ๋ โ ์ ์ฒด ํ์
๋์
- ํ์ผ ์กด์ฌ ํ์ธ +
file {target_image_path}๋ก ํด์๋/ํฌ๋งท/sha1 ํ์ธ
- ๋ชจ๋๋ณ ๋ถ๊ธฐ:
- fast: ๊ฒฝ๋ก๋ง ์๋ด (
โ
์์ฑ ์๋ฃ: {path} ({ํด์๋} PNG) + "๊นจ์ก์ผ๋ฉด '์ด๋ฏธ์ง ๋ณด์ฌ์ค'๋ผ๊ณ ๋ง์ํด์ฃผ์ธ์"). ์ด๋ฏธ์ง ํ์ ์ ํจ.
- review: ์ ์๋ด + ๋ง์ง๋ง 1์ฅ๋ง ํ์ (ํ
์คํธ ๋ ๋๋ง ๊ฒ์). ์๋ด์ "[review ๋ชจ๋]" ์ถ๊ฐ.
- audit: ์ ์๋ด + ๋ชจ๋ ์ด๋ฏธ์ง ํ์. ์๋ด์ "[audit ๋ชจ๋]" ์ถ๊ฐ.
Step 8: MODE_REFINE ๋ฃจํ (state ์ ์ง + Step 4 ์ฌ๋ก๋ ๊ธ์ง)
์์ฑ ์งํ ๋ค์์ ๋ํ ์ปจํ
์คํธ(skill state)๋ก ์ ์ง:
last_prompt_path: ๋ง์ง๋ง ์๋ฌธ ํ๋กฌํํธ ํ์ผ ๊ฒฝ๋ก (Step 4 ์ฐ์ถ๋ฌผ)
last_image_path: ๋ง์ง๋ง PNG ๊ฒฝ๋ก
- ์ ํ ํ๋ผ๋ฏธํฐ (mode / aspect / quality / ์๋ ๋ต๋ณ 3๊ฐ)
๋ฆฌํ์ธ ํ์ :
- ๋์ผ ์ด๋ฏธ์ง ๋ฆฌํ์ธ ("์๊ฐ ์ข ๋ฐ๊ฟ์ค", "๋ ๋ฐ๊ฒ"):
- Step 4 ์ฌ๋ก๋ ๊ธ์ง โ
last_prompt_path Read + ์ฌ์ฉ์ ๋ธํ๋ง patch
- ์๊ฐ ์ปจํ
์คํธ ํ์ ์
last_image_path ํ์ (์๋ review ๋ชจ๋)
image-studio-prompt.md๋ ์ ๋ ์ฌ๋ก๋ X (28KB)
- ์์ ์ ์์ฒญ: Step 1๋ถํฐ ๋ค์
์ด์ ๊ท์น (ํ ํฐ ํจ์จ)
- Step 7 ๊ธฐ๋ณธ๊ฐ fast โ ๋ช
์์ ๊ฒ์ ์์ฒญ์ด ์์ผ๋ฉด PNG ํ์ ์ ํจ (๋น์ ํ ํฐ์ด cached prefix์ ์๊ตฌ ๋์ ๋๋ ๊ฒ ๋ฐฉ์ง).
- MODE_REFINE ์ Step 4 ์ฌ๋ก๋ ๊ธ์ง โ
last_prompt_path + ๋ธํ patch๋ง. image-studio-prompt.md๋ ์ ๋ ์ฌ๋ก๋ X.
- ์ฌ๋ฌ ์ฅ ์ผ๊ด ์์ฑ โ ํธ์ถ ์ฌ์ด ๊ฒฐ๊ณผ ๋ณด๊ณ ๋ฅผ ๋ฌถ์ด ์ฒ๋ฆฌ (๋ผ์ด๋ํธ๋ฆฝ ๊ฐ์).
- ๊ฒ์ ๋ถ๋ฆฌ ๊ถ์ฅ โ 5์ฅ ์ด์ ์์ฑ ํ ๊ฒ์๊ฐ ํ์ํ๋ฉด ๋ณ๋ ์งง์ ์ธ์
์์ audit ๋ชจ๋ ์ฌ์ฉ.
๊ธฐ์กด pumasi์์ ๋ถ๋ฆฌ
| ๊ตฌ๋ถ | pumasi (์ฝ๋) | pumasi-image (์ด๋ฏธ์ง) |
|---|
| ์คํฌ ๋๋ ํ ๋ฆฌ | skills/pumasi/ | skills/pumasi-image/ |
| ์๋ ํธ๋ฆฌ๊ฑฐ | "๊ตฌํ", "๊ฐ๋ฐ", "๊ธฐ๋ฅ", "์ฝ๋" | "์ด๋ฏธ์ง", "๊ทธ๋ฆผ", "์ธ๋ค์ผ", "๋ก๊ณ " |
| ๋ฐฑ์๋ | Codex ์์ปค (๋ฉํฐ์์ด์ ํธ/codex exec) | Codex ๋ค์ดํฐ๋ธ ์ด๋ฏธ์ง ๋๊ตฌ |
| ์์
dir | .pumasi/ | ์์ (๋จ๋ฐ ์์ฒญ) |
๋ ์คํฌ์ ๊ฐ์ ํ๋ฌ๊ทธ์ธ ์์ ๋
๋ฆฝ ๋ชจ๋์ด๋ฉฐ ์๋ก ๊ฐ์ญํ์ง ์๋๋ค.
References
references/image-studio-prompt.md โ ๋ชจ๋ ๋ถ๋ฅ + Output Template ์์คํ
ํ๋กฌํํธ
references/clarification-matrix.md โ ๋ชจ๋๋ณ ์๋ ํ์
์ง๋ฌธ ๋งคํธ๋ฆญ์ค
references/keyword-mapping.md โ ๋น์จยทํ๋ฆฌํฐ ํค์๋ ์๋ ๋งคํ + ์์ฐ์ด ํํธ ๋ณํํ
Scripts (์ ํ โ codex exec ์์ ๊ฒฝ๋ก)
scripts/extract_image.py โ codex exec --json ์ถ๋ ฅ(๋๋ ์ธ์
rollout)์ image_generation_call
base64๋ฅผ ๊ตฌ์กฐ ๊ฒ์ฆ ํ ํ๊น PNG๋ก ๋์ฝ๋ฉ ์ ์ฅ
scripts/imagen.sh โ feature flag ํ์ธยทํ์ฑํ + codex exec --json ํธ์ถ + base64 ์ถ์ถยท์ ์ฅ + SHA1/ํด์๋ ๊ฒ์ฆ
scripts/imagen-full.sh โ ์๋ฌธ ํ๋กฌํํธ ์์ฑ๊น์ง codex์ ์์(manifest/prompt/log ๋ณด์กด)
scripts/imagen-batch.sh โ ์ฌ๋ฌ ์ฅ ์ผ๊ด(partial success + per-item retry manifest)
scripts/imagen-cleanup.sh โ ~/.codex/generated_images/ ๋์ ์ ๋ฆฌ(๊ธฐ๋ณธ DRY-RUN, ๋์คํฌ ์์์ฉ)
scripts/test-imagen-capture.sh โ base64 ์บก์ฒ/์คํจ ์ฒ๋ฆฌ ํ๊ท ํ
์คํธ(codex mock)
์ฌ์ ์กฐ๊ฑด
- Codex CLI ์ค์น + ๋ก๊ทธ์ธ ์๋ฃ
- ๋ค์ดํฐ๋ธ ์ด๋ฏธ์ง ์์ฑ ๋๊ตฌ(
/imagen, gpt-image-2) ์ฌ์ฉ ๊ฐ๋ฅ