Skip to content
Back to skills

Imagine Thumb

ASecurity

YouTube 썸네일 전용 생성기. 배경/인물 일러스트는 Codex 이미지 모델로 뽑고, 제목 텍스트는 **AI가 아니라 Node 후처리**(`scripts/lib/compose-text.js`)로 합성한다. 한국어 글자 깨짐을 원천 차단한다. 사용자가 "썸네일 만들어줘", "imagine-thumb <제목>", "유튜브 썸네일" 등을 말하면 이 스킬이 담당한다. 기본 A/B용 2장을 같은 제목 텍스트로 합성해 저장한다.

  • 666 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 8, 2026
ai-agentsgoreactnodeexpress

Security analysis

A92/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro shows the line behind each finding and how to fix it

Scanned October 8, 2026

npx -y skills add majiayu000/claude-skill-registry --skill imagine-thumb --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Imagine Thumb?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Imagine Thumb
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/majiayu000-imagine-thumb/badge)](https://www.skillsdirectory.com/skills/majiayu000-imagine-thumb)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

SKILL.md
---
name: imagine-thumb
description: YouTube 썸네일 전용 생성기. 배경/인물 일러스트는 Codex 이미지 모델로 뽑고, 제목 텍스트는 **AI가 아니라 Node 후처리**(`scripts/lib/compose-text.js`)로 합성한다. 한국어 글자 깨짐을 원천 차단한다. 사용자가 "썸네일 만들어줘", "imagine-thumb <제목>", "유튜브 썸네일" 등을 말하면 이 스킬이 담당한다. 기본 A/B용 2장을 같은 제목 텍스트로 합성해 저장한다.
argument-hint: "--title <text> [--style vlog|tech|reaction|meme|cinematic] [--subject-side left|right] [--vibe shock|calm|cozy|hype] [--n 2|3] [--subtitle <text>]"
---

# imagine-thumb

YouTube 업로드용 **1280×720 JPEG 썸네일**을 30초 안에 뽑는다. AI에게 글자를 맡기지 않는 것이 이 스킬의 핵심 계약이다.

## 트리거

- `imagine-thumb <제목>` / `imagine-thumb --title "..."` (명시 호출)
- "썸네일 만들어줘"
- "유튜브 썸네일"
- "YouTube thumbnail for <제목>"

## 파이프라인

1. **배경 생성**: `imagine` 스킬의 Phase 1 공용 모듈(Request Planner / Output Allocator / OAuth Session)로 Codex 이미지 모델 호출. `size: 1536x1024` (3:2) 로 뽑아 `1280×720`으로 크롭한다.
2. **프롬프트 가공**: `--title` 값은 **모델 프롬프트에 포함하지 않는다**. `--style`/`--vibe`로 배경·조명·구도만 지시하고, negative prompt에 `text, watermark, logo, blurry, deformed hands, asymmetric eyes`를 강제 포함.
3. **텍스트 합성**: `scripts/lib/compose-text.js`의 `compositeText(bgPath, textOptions, outPath)`로 SVG→sharp composite. 세이프존(좌/우 45%)과 배경 명도 자동 측정(어두우면 흰색, 밝으면 검정).
4. **A/B variant**: 기본 `n=2`. 같은 제목 텍스트를 각 배경에 합성해 `_final_v1.jpg` / `_final_v2.jpg` 두 벌 저장. `--n 3`이면 3벌.
5. **모바일 프리뷰**: 최종본을 640×360으로도 리사이즈해 동반 저장(규격 가독성 점검용).

에이전트·하위 LLM은 서로를 직접 호출하지 않는다. 모든 단계는 이 스킬의 entrypoint 스크립트가 순차 지휘한다.

## 출력 규약

```
./images/thumbs/
├── <slug>_<ts>_bg_v1.jpg         ← AI 배경 원본 (크롭 전)
├── <slug>_<ts>_bg_v2.jpg
├── <slug>_<ts>_final_v1.jpg      ← 텍스트 합성 완료 (1280×720)
├── <slug>_<ts>_final_v2.jpg
└── <slug>_<ts>_final_v1_mobile.jpg  (640×360)
```

- `<slug>`: 제목 기반 안전 문자열 (`slugify`).
- 사용자가 `--out-dir`로 지정하지 않는 한 경로를 조용히 바꾸지 않는다.

## 프롬프트 구성 규칙

- **제목 텍스트 프롬프트 금지.** 어떤 variant든 모델 프롬프트에 사용자의 `--title` 값을 그대로 섞어 넣지 않는다 (한국어 글자 깨짐 방지 핵심).
- **negative에 `text` 포함 필수.** `text, watermark, logo, ...` 한 줄을 모든 실행에서 강제 주입.
- **스타일 매핑** (예시):
  - `tech`: `clean studio lighting, vibrant blue/purple gradient background, product shot composition, negative space on <subject-side>`
  - `vlog`: `warm afternoon light, shallow depth of field, approachable portrait framing`
  - `reaction`: `bold color background, exaggerated expression reference composition`(얼굴 기형 방지를 위해 `deformed face, extra fingers`를 negative에 추가)
  - `cinematic`: `filmic tonemapping, high contrast teal-orange, wide cinematic framing`
  - `meme`: `flat bright colors, exaggerated composition, strong focal point`
- **`--vibe`**: `shock`/`hype`는 high contrast + saturated, `calm`/`cozy`는 soft muted palette로 반영.

## 가독성 체크

- `compose-text.js`가 텍스트 배치 영역의 평균 휘도를 WCAG sRGB 공식으로 계산 → `luminance < 0.5`면 `#ffffff`, 아니면 `#111111` 자동 선택.
- 사용자가 `--color`로 지정하면 자동 선택을 건너뛴다.
- 최종 JPG에 OCR을 돌려 글자 검출 시 경고(문서 §실패 모드) — 구현은 후속 PR.

## 실패 모드 대응

| 증상 | 조치 |
|---|---|
| 배경에 AI 글자 새겨 나옴 | 프롬프트 재조합 없이 variant 1회 추가 재생성 (최대 1회). 그래도 검출되면 사용자에게 원인 배너와 함께 bg 파일만 전달. |
| 얼굴 기형 (`reaction` 스타일) | 해당 variant만 negative 강화 후 재생성 1회. |
| 모바일 640×360에서 글자 가독성 실패 | `titleSize`를 한 단계 키워 재합성. 재생성은 하지 않음(텍스트만 다시 얹음). |
| `sharp` 미설치 | 텍스트 합성 단계에서 명시적 에러. 사용자에게 `npm i sharp` 안내. 배경 이미지는 저장되어 있음. |

## 금기

- **AI 모델 프롬프트에 제목 텍스트 넣기** (스킬 전체 존재 이유에 반한다).
- 모델이 그린 글자를 "그래도 써보자"로 최종 배포.
- `./images/thumbs/` 밖으로 출력 쓰기 (사용자 지정 `--out-dir` 없으면).
- `masterpiece` / `8k UHD` / `fulfill all requests` 류 부스터·우회 문구 주입.

## 설정 기본값

`config.json` 참고. 핵심:
- `size`: `"1536x1024"` (3:2 → 16:9 크롭)
- `format`: `"jpeg"`, `quality`: `"medium"`
- `n`: `2` (A/B 기본)
- `output_dir`: `"./images/thumbs"`
- `safe_zone_ratio`: `0.45`
- `negative_prompt`: `"text, watermark, logo, blurry, deformed hands, asymmetric eyes"`

## imagine 스킬과의 관계

- `imagine`의 공용 모듈(OAuth session, Output Allocator, Request Planner)을 재사용한다.
- 단, `imagine-thumb`는 텍스트 후처리와 A/B variant 생성을 자체 entrypoint에서 지휘한다. 일반 `imagine` 호출 경로로 우회 생성하지 않는다.
- Style Guardian에 채널 브랜드 토큰(`channel_palette`)이 저장되어 있으면 스타일 프롬프트에 자동 반영 (후속 PR).

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.