codex noninteractive + imagegen2로 앱 비주얼 에셋 일괄 생성, 코드 생성 차단 (gen-one.sh: FORBID 블록 + 코드파일 감지 + 재시도). 모든 산출물은 플러드필 배경 제거로 진짜 알파 투명 PNG화. 생성 에셋 (assets-gen/): - app-master: 앱 아이콘 마스터 (사이클 화살표, 솔리드 타일 유지) - 카테고리 글리프 8종: image/video/audio/document/data/vector/archive/ai - 일러스트 2종: illus-empty(드롭존), illus-done(완료) - logo-mark: 브랜드 마크 GUI 적용: - 사이드바 헤더 브랜드 → logo-mark - 드롭존 빈 상태 → illus-empty - QuickProgressWindow 완료 → illus-done - AI 작업 패널 → glyph-ai 스파클 - 큐/과거결과 행 라벨 아이콘 → 카테고리 글리프 (CategoryGlyphs 매핑) - 미리보기 placeholder → 형식별 카테고리 글리프 (경고 대신) 앱 아이콘: - app.ico (멀티 크기 16~256) + 윈도우 Icon - MSIX 타일 4종(Square44/150·Wide310·Store) app-master 기반 갱신 - Package 버전 1.0.2.0
55 lines
2.3 KiB
Bash
55 lines
2.3 KiB
Bash
#!/usr/bin/env bash
|
|
# gen-one.sh NAME "PROMPT BODY"
|
|
# codex imagegen2로 단일 PNG 생성. 코드 파일(.py/.svg/.html/.js)을 쓰면 실패로 보고 최대 3회 재시도.
|
|
set -u
|
|
NAME="$1"
|
|
BODY="$2"
|
|
ROOT="D:/workspace/Everything2Everthing/assets-gen"
|
|
DEST="$ROOT/$NAME.png"
|
|
|
|
for attempt in 1 2 3 4; do
|
|
WORK="$(mktemp -d)"
|
|
# 깨끗한 작업 폴더에서만 쓰게 하고, 결과는 out.png 한 장으로 강제
|
|
PROMPT=$(cat <<PROMPT
|
|
You have an image generation tool available (imagegen / image_gen). Use it now.
|
|
|
|
TASK: Generate a single PNG image and save it in the current working directory as exactly "out.png".
|
|
|
|
IMAGE DESCRIPTION:
|
|
$BODY
|
|
|
|
ABSOLUTE RULES — violating any of these is a hard failure:
|
|
- You MUST call the image generation tool to produce the picture.
|
|
- DO NOT write, create, or edit ANY code file of ANY kind: no .py, .svg, .html, .js, .ts, .sh, .json, no Python, no PIL/Pillow, no matplotlib, no cairo, no SVG markup, no canvas, no ASCII art.
|
|
- DO NOT try to "draw" or "render" the image with code. If you are even slightly tempted to script it, STOP and use the image generation tool instead.
|
|
- The ONLY file that may exist when you finish is out.png produced by the image generation tool.
|
|
- After saving, reply with just: DONE
|
|
PROMPT
|
|
)
|
|
echo "$PROMPT" | codex exec --skip-git-repo-check --sandbox workspace-write -C "$WORK" --ephemeral - >/dev/null 2>&1
|
|
|
|
# 코드 파일을 썼는지 검사
|
|
CODE=$(find "$WORK" -type f \( -name '*.py' -o -name '*.svg' -o -name '*.html' -o -name '*.js' -o -name '*.ts' -o -name '*.sh' \) 2>/dev/null | head -1)
|
|
PNG=$(find "$WORK" -type f -name '*.png' 2>/dev/null | head -1)
|
|
|
|
if [ -n "$CODE" ]; then
|
|
echo "[$NAME] attempt $attempt: codex wrote CODE ($CODE) — reject, retry"
|
|
rm -rf "$WORK"; continue
|
|
fi
|
|
if [ -z "$PNG" ]; then
|
|
echo "[$NAME] attempt $attempt: no PNG produced — retry"
|
|
rm -rf "$WORK"; continue
|
|
fi
|
|
# 너무 작은 PNG(코드로 만든 단색/플레이스홀더)도 거부
|
|
SZ=$(stat -c%s "$PNG" 2>/dev/null || echo 0)
|
|
if [ "$SZ" -lt 120000 ]; then
|
|
echo "[$NAME] attempt $attempt: PNG too small ($SZ bytes) — likely synthetic, retry"
|
|
rm -rf "$WORK"; continue
|
|
fi
|
|
cp "$PNG" "$DEST"
|
|
echo "[$NAME] OK ($SZ bytes) -> $DEST"
|
|
rm -rf "$WORK"
|
|
exit 0
|
|
done
|
|
echo "[$NAME] FAILED after retries"
|
|
exit 1
|