Communitygithub.com

funni-ai/youtube-thumbnail

YouTube 썸네일(16:9), 쇼츠/Reels/TikTok 커버(9:16), 팟캐스트/강좌 커버(1:1)를 제목과 선택적 얼굴 사진, @핸들 캐릭터, 브랜드 색상, 사용자 동영상 프레임으로 생성합니다. GPT Image 2.5가 텍스트를 포함하고, 참조 편집으로 얼굴을 고정합니다.

youtube-thumbnail란 무엇인가요?

이 스킬은 AI 에이전트(Claude Code, Cursor, Codex 등)가 YouTube 썸네일, 쇼츠/Reels/TikTok 커버, 팟캐스트 및 강좌 커버를 제작할 수 있도록 설계된 전문 도구입니다. 사용자가 제목(또는 주제)을 입력하면 세 가지 다른 디자인 콘셉트를 제안하고, 사용자가 선택한 후 최종 고해상도 이미지를 생성합니다. 핵심 기능으로는 GPT Image 2.5 모델을 통한 텍스트 내장, 얼굴 사진이나 @핸들 참조를 통한 얼굴 고정, 브랜드 색상 팔레트 적용, 사용자 동영상의 특정 프레임을 썸네일로 사용하는 기능이 있습니다. 이 스킬은 CLI 기반의 `genmedia` 도구와 통합되어 있으며, 로컬 스크립트(`thumbcheck.py`, `gm.py`)를 통해 사전 점검, 가격 확인, 텍스트 검증, 이미지 업로드 등을 수행합니다. 특히 '작은 크기 게이트' 개념을 도입하여 사용자가 실제로 피드에서 보는 크기(약 160px 너비)에서도 선명하게 보이는 썸네일을 제작하는 데 중점을 둡니다. 사용자는 최대 3회의 초안 라운드와 3회의 수정 라운드를 거칠 수 있으며, 비용 게이트(기본 공개 임계값 $0.50, 확인 임계값 $2.00)를 통해 예산을 통제할 수 있습니다. 지원 플랫폼은 다양하며, 라우팅 테이블을 통해 작업 유형(초안, 최종, 수정, 사진 확대 등)에 따라 최적의 AI 모델(GPT Image 2.5, Seedream, Nano Banana 등)을 자동 선택합니다.

지원 대상✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/funi-ai/claude-plugins/tree/main/plugins/genmedia-skills/skills/youtube-thumbnail

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

YouTube 썸네일

사용자가 실제로 보는 크기(피드에서 약 160px 너비)로 평가되는 썸네일과 커버를 제작합니다. 제목 하나를 입력하면 세 가지 다른 콘셉트가 생성되고, 사용자가 선택하며, 최종적으로 좁은 범위의 수정을 거쳐 정확한 전달 크기의 파일이 제공됩니다. 제작 기술(콘셉트 프레임워크, 프롬프트 청사진, 텍스트 규칙, 작은 크기 게이트)은 여기에 있으며, 세부 메커니즘은 references/cli-contract.md와 references/platform.md에 있습니다.

0단계 — 사전 점검

세션당 한 번:

command -v genmedia
python3 "${CLAUDE_SKILL_DIR}/scripts/gm.py" preflight
python3 "${CLAUDE_SKILL_DIR}/scripts/thumbcheck.py" tools
  • blockers가 비어 있지 않거나, CLI가 없거나 0.7.0보다 오래된 경우 → /genmedia-skills:setup. 키가 없는 경우 → 사용자가 genmedia setup을 실행하거나 FAL_KEY를 직접 내보내도록 함; 대기. 절대 키를 읽거나, 출력하거나, 요청하거나, 입력하지 마십시오.
  • config.announce_above_usd와 config.confirm_above_usd(기본값 0.50 및 2)를 유지하십시오: 이것들은 비용 게이트 임계값입니다.
  • thumbcheck.py tools는 preview, sheet, fit, frame 중 여기서 실행할 수 있는 것(로컬 ffmpeg 또는 macOS sips 필요)과 lockup이 실행 가능한지(Chromium 계열 브라우저 필요)를 알려줍니다. 둘 다 없으면 워크플로 6단계의 저하된 게이트로 진행됩니다. drawtext, Pillow 또는 ImageMagick을 계획하지 마십시오: 텍스트는 모델이 렌더링합니다.
  • 먼저 재개: 이 요청과 일치하는 .genmedia/projects/<slug>/thumbnail.md 파일이 있으면 → 읽고, 첫 번째 열린 단계부터 계속합니다. 원장 항목이 있는 프로젝트를 절대 다시 시작하지 마십시오.

UX 규칙

  1. 사용자의 언어로 응답하십시오(터키어 입력 → 터키어 출력). 모델 프롬프트는 영어로 작성하십시오; 이미지 위의 텍스트는 게시될 언어와 정확한 철자를 유지합니다. 엔드포인트 ID, 필드 이름 및 경로는 그대로 유지합니다.
  2. 채팅에 JSON, 요청 ID, 프롬프트 또는 도구 설명을 포함하지 마십시오. 조용히 기다리십시오; 배치당 최대 한 줄의 상태 표시줄만 허용됩니다.
  3. 질문 예산: 2개, 한 번에 하나씩, 레이블이 지정된 옵션으로, 답변이 누락된 경우에만:
    • Q1 후크 단어: 제목도 주제도 없는 경우 → 제목을 요청하십시오. 제목을 알고 있으면 → 묻지 말고 직접 2~4개의 후크 단어를 작성하십시오(콘셉트마다 세 가지 다른 것).
    • Q2 얼굴 유무: 결정하는 요소가 없는 경우에만 물어보십시오. 사진, @handle 또는 "나 / 내 얼굴 / ben" → 얼굴 있음. "얼굴 없음", 제품, 화면 녹화, 풍경 → 얼굴 없음. 사용자가 썸네일 하나만 요청하거나 콘셉트를 직접 지정한 경우 → 세 개 대신 하나의 초안을 생성합니다. 선택은 예/아니요가 됩니다. 그 외 모든 것은 전달 라인에서 명시하는 기본값입니다: 형식 16:9; 텍스트 언어 = 제목의 언어; 팔레트 = 제공된 브랜드 색상, 없으면 콘셉트별로 선택; 사실적인 포스터 스타일; 3개 콘셉트; 최종 마스터 2560x1440, 1920x1080 및 1280x720으로 전달. 계산되지 않음: 동의 확인, 선택, 비용 확인.
  4. 선택은 확정 중단입니다. 비교 시트를 보여주고 기다리십시오. 침묵, 성공적인 작업 또는 자신의 선호는 절대 선택이 아닙니다. 추천은 허용되지만 선택은 허용되지 않습니다.
  5. 진실성. 썸네일은 극적으로 표현할 수 있지만, 잘못 전달해서는 안 됩니다. 표시되거나 쓰여진 모든 것은 비디오에 있거나 비디오에서 정직하게 파생되어야 합니다: 허구의 숫자, 결과, 반응, 제품 또는 게스트 없음; 실제 플랫폼의 가짜 UI 없음; 사용자가 소유하지 않은 로고나 캐릭터 없음. 비디오가 무엇을 전달하는지 알 수 없는 경우 → 약속하기 전에 물어보십시오(이것은 Q1 또는 Q2를 대체하며, 질문을 추가하지 않습니다).
  6. 얼굴. 실제 인물(사용자 포함)의 사진 → 그 사람의 동의를 받았다는 확인 한 번, 업로드가 공개 URL에 있다는 내용 한 줄. 사용자가 아닌 유명인 또는 공인은 절대 사용하지 마십시오; "<유명인> 닮음"은 거부되고, 가상의 얼굴이나 얼굴 없는 콘셉트를 제공하십시오. 가상의 얼굴은 대역입니다: 실제 이름이 있는 사람, 고객, 전문가 또는 게스트로 절대 제시하지 말고, 전달 시 얼굴이 AI 생성되었음을 알리십시오.
  7. 비용: 첫 번째 유료 호출(워크플로 4단계) 전에 전체 요청을 추정하고 사전 점검의 임계값으로 게이트를 적용하십시오: announce_above_usd 미만 → 실행; confirm_above_usd까지 → 추정치와 함께 한 줄, 그 다음 실행; 같거나 초과 → 추정치를 표시하고 명시적인 yes를 기다리십시오(references/platform.md 섹션 8). 승인은 표시된 계획에 적용됩니다; 더 큰 계획은 새 승인이 필요합니다. 메모리에서 가격을 인용하지 마십시오; 사용자가 지정한 모델을 비용 절감을 위해 교체하지 마십시오.
  8. 제한: 최대 3회 초안 라운드 및 3회 수정 라운드; 각 시도는 내용을 변경합니다; 콘텐츠 정책 거부는 동일한 내용으로 재전송되지 않습니다; 요청 ID가 있는 작업은 재개되며, 재제출되지 않습니다.

검색 가드레일

아래 라우팅은 날짜가 지정된 캐시입니다(references/routing-image.md, 2026-09-19 확인). 세션에서 엔드포인트에 대한 첫 번째 유료 호출 전:

genmedia models --endpoint_id <endpoint_id> --json
python3 "${CLAUDE_SKILL_DIR}/scripts/gm.py" schema <endpoint_id>
  • status는 active여야 합니다. 활성 상태가 아니거나 404인 경우 → references/routing-image.md에서 동일한 작업의 다음 계층, 그렇지 않으면 genmedia models "<name>" --no-classify --limit 10 --json, 가장 최신 활성 일치 항목을 찾고 어떤 모델이 실행되었는지 말하십시오.
  • 필드 이름, 열거형 및 제한은 스키마에서 가져오며, 절대 메모리에서 가져오지 않습니다. 사용자가 모델 이름을 지정한 경우 → 의심하기 전에 검색하십시오; 새 릴리스는 fal-ai/가 아닌 벤더 네임스페이스(openai/, bytedance/, google/, alibaba/) 아래에 있습니다.
  • 엔드포인트 ID 없이 genmedia run을 절대 사용하지 마십시오(스마트 라우팅은 오래된 기본값을 해결합니다).

라우팅

단계엔드포인트이유
초안, 참조 없음openai/gpt-image-2.5/flare/text-to-image, quality: "medium"타이포그래피 선두; 대상 계열만 텍스트를 미리 볼 수 있으며, 저렴한 초안 모델은 불가능
얼굴 사진, @handle 참조, 제품 사진 또는 비디오 프레임이 있는 초안openai/gpt-image-2.5/flare/edit, quality: "medium"참조는 image_urls(최대 16개)에 들어감; 최종과 동일한 계열
최종openai/gpt-image-2.5/sunburst/edit, quality: "high"정밀 계층; 선택된 초안이 이미지 1이므로 최종은 그 구성이며, 새로운 롤이 아님
수정(텍스트, 표정, 배경, 색상)openai/gpt-image-2.5/sunburst/edit, quality: "high"현재 최종이 이미지 1; 라운드당 하나의 범위
텍스트 없는 판, 사실적(대체 경로)bytedance/seedream/v5/pro/text-to-image아레나 #1 사실적; 텍스트는 이후 GPT Image 2.5 편집으로 추가
얼굴이 변할 때의 동일성 판fal-ai/nano-banana-2/edit동일성 유지 이미지의 라우팅 기본값; 텍스트는 이후 추가
실제 프레임 또는 사진 확대fal-ai/seedvr/upscale/image; 얼굴 또는 텍스트 우선: topaz/upscale/image/precision충실함; Topaz에는 얼굴 및 텍스트 개선 모델 있음
사용자 비디오의 프레임thumbcheck.py frame (로컬 ffmpeg)정확한 타임스탬프; ffmpeg 없음 → 사용자에게 스크린샷 요청
텍스트 없는 판 위의 사용자 로고thumbcheck.py lockup (로컬 브라우저)마크는 사용자 파일에서 배치됨; 모델은 다시 그릴 것임

동점 해결:

  1. 이미지 위에 텍스트가 있는 경우 → 사실적인 콘셉트라도 GPT Image 2.5를 사용합니다. 텍스트가 전혀 없는 경우(사용자가 그렇게 말한 경우) → 초안은 bytedance/seedream/v5/pro/text-to-image 또는 해당 /edit에서 실행될 수 있음; 나머지 흐름은 변경되지 않음. Seedream은 1280x720을 거부합니다(최소 영역은 1024x1024)이고 quality 필드가 없습니다: image_size를 1920x1080(9:16 → 1080x1920, 1:1 → 1536x1536)으로 보내고 라우팅 행에서 이미지당 가격을 책정하십시오(2026-09-19 기준 약 USD 0.07; 초안 3개는 약 USD 0.20, 총액을 다시 계산).
  2. 기본 텍스트 전략은 단일 패스로 내장입니다. 다음의 경우 판 경로(텍스트 없는 판, 그런 다음 "이 텍스트만 추가" 편집)를 사용하십시오: 동일한 판이 여러 언어 또는 A/B 표현이 필요한 경우; 분음 부호가 두 번 실패한 경우; 판이 실제 프레임 또는 사진인 경우. 세부 사항: references/text-and-readability.md.
  3. @handle → .genmedia/characters/<handle>/character.json 읽기(앵커 description; role: "face" 및 active: true인 refs[]), 참조의 cdn_url이 있으면 재사용, 없으면 파일 업로드; 앵커를 그대로 사용. real_person: true → UX 규칙 6 적용; 기록된 consent_confirmed_at이 확인임. 알 수 없는 핸들 → 그렇게 말하고 /genmedia-skills:character 제공; 절대 대체하지 마십시오.
  4. 사용자가 모델을 지정한 경우 → 실시간 확인 후 사용; 기본값을 한 줄로 제공합니다.
  5. 디자인이 판 + 사용자 로고인 경우(브랜드 채널, 앱 스토어 미리보기 비디오) → 판 경로, 그런 다음 thumbcheck.py lockup이 로고 파일을 너비의 일부에 중앙에 배치합니다(references/text-and-readability.md 섹션 2b). 판이 이미 존재하는 경우(launch-graphics 판, 사용자 사진) → 유료 호출 없음: lockup, 게이트, 10단계. 로고 파일 없음 → 요청; 모델이 마크를 그리도록 절대 허용하지 마십시오.

함정:

  • 자동 크기 함정. 편집 엔드포인트는 image_size를 기본적으로 auto로 설정하며, 이는 입력 이미지를 따릅니다: 세로 얼굴 사진은 세로 썸네일을 생성합니다. 항상 {width, height}를 보내십시오.
  • 기본 품질 함정. quality는 기본값이 high이며 계열은 토큰별로 청구합니다. 모든 호출에 설정하십시오: medium 초안, high 최종; xhigh 또는 max는 사용자가 가격에 동의한 후에만 사용하십시오.
  • 16배수 함정. 1920x1080은 유효한 GPT Image 크기가 아닙니다. 1280x720, 2560x1440 또는 3840x2160으로 렌더링하고 thumbcheck.py fit이 1920x1080을 생성하도록 하십시오.
  • 첨부 이미지 함정. 텍스트-이미지 엔드포인트에는 이미지 필드가 없습니다; 사진을 무시하고 여전히 청구합니다. 참조가 있는 경우 → /edit 엔드포인트.
  • 새 롤 함정. 고품질로 프롬프트를 다시 실행하면 다른 그림이 생성됩니다(이 계열에는 seed 없음). 최종은 선택된 항목의 편집입니다.
  • 대소문자 함정. 모델이 터키어를 대문자로 변환하도록 절대 허용하지 마십시오: 최종 문자열을 직접 작성하고(thumbcheck.py text), 따옴표 안에 넣고, 문자별로 확인하십시오.

워크플로

  1. 입력. 제목 또는 주제, 형식(기본 16:9), 얼굴 유무, 브랜드 색상, 참조. HEIC, AVIF, TIFF 또는 매우 큰 사진 우선: thumbcheck.py fit <file> --max-side 2048 --out .genmedia/tmp/<name>.jpg; 해당 복사본을 읽고 업로드하십시오. 계획을 세우기 전에 Read 도구로 모든 로컬 이미지를 열어보십시오(누가 무엇인지 실제로 콘셉트를 결정합니다). 사용자 비디오의 프레임: python3 "${CLAUDE_SKILL_DIR}/scripts/thumbcheck.py" frame <video> --at <초 또는 m:ss>, 그런 다음 Read하십시오. 질문 예산은 UX 규칙 3에서 허용하는 경우에만 사용하십시오.
  2. 상태 카드. 짧은 ASCII <slug>를 선택하십시오(eksi-maya): 이것은 배치 label, 원장 필터, 출력 폴더 및 프로젝트 폴더입니다. 자연어 레이블도 작동합니다; 헬퍼는 "Ekşi maya"를 Eksi-maya로 접고, 접힌 형태가 폴더 이름이 됩니다. Write 도구로 .genmedia/projects/<slug>/thumbnail.md를 작성하고 각 단계 후 업데이트하십시오:
    # <title> — 썸네일
    promise: <한 줄: 비디오가 실제로 전달하는 내용>
    format: 16:9 | text language: <code> | face: <없음 | 사진 경로 | @handle> (consent: <예, 날짜 | 해당 없음>) | palette: <색상>
    [ ] concepts  [ ] drafts-1  [ ] gate  [ ] pick: -  [ ] final  [ ] revisions 0/3  [ ] delivered
    log:
    - <date> drafts-1: 1 <framework> "<TEXT>", 2 <framework> "<TEXT>", 3 <framework> "<TEXT>"
    
  3. 세 가지 다른 콘셉트. references/frameworks.md를 읽으십시오. 비공개로 최소 5개 브레인스토밍하고, 다른 프레임워크를 사용하는 가장 강력한 세 가지를 유지하십시오(하나의 아이디어에 세 가지 색상 변형이 아님), 각각 고유한 2~4개의 후크 단어가 있어야 합니다. 모든 후크를 텍스트 검사에 통과시키고 upper 문자열을 그대로 사용하십시오:
    python3 "${CLAUDE_SKILL_DIR}/scripts/thumbcheck.py" text "şimdi izle" --lang tr
    
    후크 단어와 그림은 사용자가 명시한(제목, 브리핑, 파일) 숫자, 결과, 인용문, 제품 및 게스트만 사용할 수 있습니다; 제목만으로는 알 수 없는 경우 → 질문, 제약 없는 후크 또는 텍스트 없는 콘셉트를 사용하거나 물어보십시오(UQ 규칙 5). 진실성 규칙에 실패하는 콘셉트는 거부하십시오. 얼굴 선택 시 → 세 콘셉트 중 적어도 두 개는 얼굴을 표시해야 합니다. 제목에 이미 후크가 포함되어 있는 경우 → 하나의 콘셉트는 텍스트 없어도 됩니다.
  4. 확인 및 가격 책정. 각 엔드포인트에 대한 검색 가드레일, 그런 다음:
    python3 "${CLAUDE_SKILL_DIR}/scripts/gm.py" price openai/gpt-image-2.5/flare/edit,openai/gpt-image-2.5/sunburst/edit
    
    GPT Image 2.5는 1 units로 응답하며, 이는 가격이 아닙니다. 이 스킬의 달러: 작업 수 x references/routing-image.md의 GPT Image 2.5 테이블에서 크기별, 품질별 행(목록에 없는 크기 → 다음으로 큰 행) (t2i-typography 참고; 편집 행에는 이미 하나의 입력 이미지가 포함됨) + 추가 참조 이미지당 references/platform.md §7의 참조 허용량. 날짜가 지정된 힌트(2026-09-19): 초안 1280x720 medium 약 USD 0.01; 최종 또는 수정 2560x1440 high 약 USD 0.055; 3840x2160 high 약 USD 0.10. 일반적인 전체 작업(초안 3개 + 최종 + 수정 3개): 참조 없이 약 USD 0.25, 얼굴 참조 하나 포함 시 약 USD 0.45 → 기본 공개 임계값 미만이므로 실행하고 전달 라인에 추정치를 명시하십시오. 두 번째 초안 라운드, 더 많은 참조, xhigh, max, 4K, 또는 여러 비디오가 하나의 요청에 있는 경우(비디오당 하나의 slug 및 상태 카드; 추정치는 합계) → 먼저 게이트를 다시 계산하고 적용하십시오.
  5. 한 배치의 초안. 참조를 한 번 업로드하고 urls를 유지하십시오(인수 순서); 업로드는 공개 URL입니다. 비공개 자료에 대해 한 번 말하십시오:
    python3 "${CLAUDE_SKILL_DIR}/scripts/gm.py" upload ./me.jpg
    
    각 프롬프트는 references/prompt-blueprint.md에서 작성하십시오. Write 도구로 .genmedia/projects/<slug>/drafts-1.json에 계획을 작성하십시오:
    {"label": "<slug>", "max_parallel": 3, "jobs": [
      {"id": "draft-a", "endpoint_id": "openai/gpt-image-2.5/flare/edit", "est_cost_usd": 0.02,
       "input": {"prompt": "<concept A>", "image_urls": ["<face url>"], "image_size": {"width": 1280, "height": 720}, "quality": "medium", "num_images": 1, "output_format": "png"}},
      {"id": "draft-b", "endpoint_id": "openai/gpt-image-2.5/flare/edit", "est_cost_usd": 0.02, "input": {"prompt": "<concept B>", "image_urls": ["<face url>"], "image_size": {"width": 1280, "height": 720}, "quality": "medium", "num_images": 1, "output_format": "png"}},
      {"id": "draft-c", "endpoint_id": "openai/gpt-image-2.5/flare/edit", "est_cost_usd": 0.02, "input": {"prompt": "<concept C>", "image_urls": ["<face url>"], "image_size": {"width": 1280, "height": 720}, "quality": "medium", "num_images": 1, "output_format": "png"}}
    ]}
    
    동시 실행(max_parallel)이므로 한 번의 상태 표시줄만 표시됩니다. genmedia run drafts-1.json을 실행하십시오. 초안이 반환되면 각각을 Read하여 품질을 확인하고, 비교 시트를 생성하십시오:
    python3 "${CLAUDE_SKILL_DIR}/scripts/thumbcheck.py" sheet .genmedia/projects/<slug>/drafts-a.png .genmedia/projects/<slug>/drafts-b.png .genmedia/projects/<slug>/drafts-c.png --out .genmedia/projects/<slug>/sheet-1.png
    
    비교 시트를 표시하고 "위의 초안을 검토하십시오"라고 말하고 기다리십시오. 세션당 하나의 시트만; 이전 시트는 제거하십시오.
  6. 사용자 선택 → 최종. 사용자가 선택하면 해당 ID의 경로를 확인하십시오. references/text-and-readability.md를 읽고 텍스트 검사 후크 단어를 한 번 더 확인하십시오. .genmedia/projects/<slug>/final.json에 최종 작업을 작성하십시오:
    {"label": "<slug>", "max_parallel": 1, "jobs": [
      {"id": "final", "endpoint_id": "openai/gpt-image-2.5/sunburst/edit", "est_cost_usd": 0.055,
       "input": {"prompt": "<prompt with text>", "image_urls": ["<draft url>", "<face url>"], "image_size": {"width": 2560, "height": 1440}, "quality": "high", "num_images": 1, "output_format": "png"}}
    ]}
    
    실행 후 최종 파일을 Read하고, 게시 준비가 되었음을 확인하십시오. 최종 파일이 하나 필요한 크기가 아닌 경우 thumbcheck.py fit을 사용하십시오:
    python3 "${CLAUDE_SKILL_DIR}/scripts/thumbcheck.py" fit .genmedia/projects/<slug>/final.png --width 1920 --height 1080 --out .genmedia/projects/<slug>/final-1920x1080.png
    
    그리고 1280x720에 대해서도 동일하게 수행하십시오.
  7. 수정 라운드. 사용자가 수정을 요청하면 각 수정은 하나의 범위(예: "텍스트만 변경", "미소만 변경")여야 합니다. 현재 최종 파일을 이미지 1로 사용하여 .genmedia/projects/<slug>/final.json을 업데이트하고, input.prompt을 수정하고, input.image_urls의 첫 번째 요소를 이전 최종의 경로로 설정한 다음 genmedia run을 다시 실행하십시오. 최대 3라운드; 각 라운드는 상태 카드와 원장에 기록하십시오.
  8. 저하된 게이트(ffmpeg/sips/browser 없음). thumbcheck.py tools가 아무것도 보고하지 않는 경우: 워크플로 6단계를 건너뛰고 대신 각 크기에 대해 별도의 genmedia run을 호출하십시오(1280x720 최종, 그런 다음 2560x1440 최종을 다시 실행). 비교 시트를 생성할 수 없습니다: "드래프트 A, 드래프트 B, 드래프트 C"를 나열하고 사용자에게 수동으로 비교하도록 요청하십시오. fit을 건너뛰고 2560x1440 파일을 그대로 전달하십시오.
  9. 동영상의 프레임. 사용자가 자신의 동영상에서 프레임을 제공하는 경우:
    python3 "${CLAUDE_SKILL_DIR}/scripts/thumbcheck.py" frame ./video.mp4 --at 30
    
    해당 프레임을 읽고 표준 초안/최종 파이프라인을 사용하되 텍스트 없는 판 경로(라우팅 표 참조)를 사용하십시오. 텍스트 없는 판에서 모델이 얼굴을 바꾸지 않도록 주의하십시오:
    python3 "${CLAUDE_SKILL_DIR}/scripts/thumbcheck.py" diff .genmedia/projects/<slug>/refined.png .genmedia/projects/<slug>/frame.png --tolerance 5
    
    diff가 임계값을 초과하면(nano-banana의 경우 --tolerance 20) 모델이 얼굴을 변경한 것이며, Seedream /edit 경로로 되돌아가거나 사용자에게 직접적인 편집을 요청하십시오(예: "프레임 유지, 텍스트만 추가").
  10. 전달. Write 도구에 기록하고 상태 카드를 업데이트하십시오:
[x] concepts  [x] drafts-1  [x] gate  [x] pick: B  [x] final  [x] revisions 0/3  [x] delivered

각 생성 파일 옆에 예상 비용을 명시하는 한 줄을 추가하십시오. @handle이 사용된 경우 character.json을 업데이트하십시오: 새 face 참조가 생성된 경우 refs[]에 추가하고 active: true로 표시하십시오.

텍스트 및 가독성

상세한 텍스트 규칙은 references/text-and-readability.md를 참조하십시오.

핵심 규칙:

  • 텍스트는 최종 이미지 크기(2560x1440)에서 명확하게 읽을 수 있어야 하며, 160px로 축소되었을 때도 읽을 수 있어야 합니다.
  • 최대 2줄, 줄당 약 4~6단어. 글꼴 스타일 지정은 없습니다(굵게, 기울임꼴, 밑줄 없음) — 모델이 처리합니다.
  • 모델은 내장 텍스트를 생성합니다. thumbcheck.py text를 사용하여 각 후크 단어 세트를 미리 확인하십시오.
  • 분음 부호(예: 터키어의 ş, ğ, ı, ö, ü)는 특히 중요합니다. thumbcheck.py text를 --lang tr와 함께 사용하여 출력을 확인하십시오. 두 번 실패하면 판 경로로 전환하십시오.

문제 해결

  • 모델이 텍스트를 깨뜨림: 텍스트 없는 판 경로(Seedream, 그런 다음 GPT Image 2.5 편집)를 시도하십시오. diacritic 오류가 두 번 발생하면 전환하십시오.
  • 얼굴이 일치하지 않음: Nano Banana 편집 엔드포인트를 사용하거나 image_urls에서 더 많은 참조를 제공하십시오.
  • 거부됨: blockers를 확인하고 genmedia setup을 다시 실행하십시오. 콘텐츠 정책 거부의 경우 프롬프트를 변경하고 동일한 콘텐츠를 다시 제출하지 마십시오.
  • 비용이 예상보다 높음: genmedia models로 모델 가격을 확인하십시오. 참조 이미지가 많은 경우 비용이 증가할 수 있습니다.

참조

  • references/cli-contract.md: CLI 계약 및 오류 코드
  • references/platform.md: 플랫폼 세부 정보, 업로드, 비용 게이트
  • references/routing-image.md: 이미지 엔드포인트 라우팅 테이블
  • references/frameworks.md: 콘셉트 프레임워크
  • references/prompt-blueprint.md: 프롬프트 청사진
  • references/text-and-readability.md: 텍스트 규칙 및 가독성 지침

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

funi-ai/ads

Ads from the user's REAL product: UGC and polished ad videos (presenter, unboxing, showcase, testimonial, TV spot) and static ads with copy. Physical products: keyframes locked to the product photo, Seedance clips or TTS + OmniHuman, GPT Image 2.5 copy. Apps and SaaS: real captures and recordings, composited, never regenerated. Use when: "make a UGC ad for this product", "15 second TikTok ad", "static ad with this headline", "app install ad from my screen recording", "A/B ad variants", "bu ürün için reklam videosu yap", "uygulamam için reklam hazırla", "indirim görseli hazırla". Chain: consumes `product-photoshoot` stills, `character` @handles, `launch-graphics` pages; produces ads and a manifest. NOT for: text-free product photos (use `product-photoshoot`); posters (use `image`); listing cards (use `marketplace-cards`); store screenshots, OG cards (use `launch-graphics`); one clip (use `video`); organic shorts (use `short-video`); product demos (use `demo-video`); thumbnails (use `youtube-thumbnail`).

funi-ai/demo-video

Product demos, store previews, App Store header/search videos and loops cut from the user's REAL screen recording: trimmed, sped, zoomed, framed, captioned, voiced with local ffmpeg. Models add only what is not the product: narration (Eleven v3, Gemini TTS for Turkish), music and UI sound. Use when: "make a demo video of my app", "App Store preview video", "App Store header video", "Google Play promo video", "turn this screen recording into a demo", "GIF loop for my changelog", "Product Hunt launch video", "ekran kaydımdan tanıtım videosu yap", "changelog için GIF döngüsü". Chain: takes recordings, device frames (`layers`) and end cards from `launch-graphics`; produces MP4, WebM, GIF, SRT/VTT and posters. NOT for: generated b-roll shorts (use `short-video`); explainers with generated pictures (use `video-explainer`); paid ads (use `ads`); store screenshots, link cards (use `launch-graphics`); one generated clip (use `video`); voice or music alone (use `audio`); joining finished files (use `pipelines`).

관련 스킬