Skip to content

feat(content-studio): 파이프라인 v2 — Post 검색/인기순 선택 + 키워드·프롬프트·썸네일 자동 생성 #530

@thxforall

Description

@thxforall

Summary

Content Studio 파이프라인을 개선하여, post ID 수동 입력 대신 검색/인기순 선택 → 키워드 추출 → 마케팅 프롬프트 생성 → 3종 채널별 썸네일 자동 생성까지 하나의 플로우로 완성한다.

Motivation

  • 현재 post ID를 직접 입력하는 UX가 불편하고 오류 유발 (500 에러 포함)
  • Firecrawl 기반 Research는 post 내부 데이터로 충분히 대체 가능 → 불필요한 외부 의존성 제거
  • 마케팅 콘텐츠(YouTube/Instagram/X) 제작 파이프라인 자동화 필요

Spec (Grill 결과)

1. Post 선택 UX 개선

  • UI: Modal/Drawer 방식 (기존 레이아웃 변경 최소화)
  • 검색: Meilisearch (이미 한글 검색 지원 구축됨)
  • 초기 리스트: Supabase에서 view_count/like_count 기준 인기순

2. Packet ID 500 에러 수정

  • 원인: packet_${postId} prefix가 UUID 컬럼에 들어감 → invalid input syntax for type uuid
  • 수정: crypto.randomUUID() 순수 UUID 생성 (post_id FK가 이미 unique constraint)

3. 키워드 + 프롬프트 + Variant 텍스트 통합 생성

  • 방식: 단일 OpenAI structured output 호출
  • 입력: 규칙 기반 키워드 (brand, artist, solution category) + post 전체 데이터
  • 출력: { keywords, imagePrompts: { youtube, instagram, x }, variants: { youtube: { title, body, hashtags }, ... } }
  • Variant 텍스트는 동시 생성 후 어드민이 수정 가능 (draft 상태)

4. 3종 채널별 썸네일 생성

  • 모델: gpt-image-2 edit 모드 (post 원본 이미지 변환)
  • 실행: Web 서버 직접 호출, Promise.all 병렬
  • 사이즈: YouTube/X: 1536×1024, IG 피드: 1024×1024, IG 스토리: 1024×1536
  • 저장: Supabase Storage (content-studio/{packetId}/)

5. Research/Firecrawl 전체 제거

  • research/ 디렉토리 (firecrawl-client, domain-policy, normalization, recommendations, query-suggestions)
  • ResearchPanel 컴포넌트
  • POST /api/v1/content/research API
  • 스키마: externalEvidence, researchProvenance, claims 필드
  • Governance: research 관련 규칙만 제거, 나머지 유지 (celebrity risk, disclosure 등)

파이프라인 플로우

[Modal/Drawer] Meilisearch 검색 + 인기순 리스트 → Post 선택
     ↓
[Packet 생성] crypto.randomUUID() + post 데이터 수집
     ↓
[단일 OpenAI 호출] 규칙 키워드 + LLM structured output
  → { keywords, imagePrompts (YT/IG/X), variants (title/body/hashtags) }
     ↓
[썸네일 생성] Promise.all 병렬, gpt-image-2 edit 모드
  → post 원본 이미지 + 채널별 프롬프트
     ↓
[저장] Supabase Storage (content-studio/{packetId}/)
     ↓
[Governance] celebrity risk, disclosure 등 체크 (research 규칙 제외)
     ↓
[어드민 리뷰] 썸네일 + 텍스트 확인/수정 → approve/reject

Out of Scope (별도 이슈)

  • Grok AI 비디오 파이프라인
  • ai-server ARQ 마이그레이션 + R2 저장소 전환

Technical Notes

  • 기존 assets/openai-client.ts 확장하여 이미지 생성
  • llm-schemas.ts에 통합 structured output 스키마 추가
  • Meilisearch post 인덱스 기존 활용
  • 환경변수: OPENAI_API_KEY, CONTENT_STUDIO_LLM_ENABLED, CONTENT_STUDIO_MODEL

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    aiAI/자동화bump:minorBackward-compatible additionsenhancementNew feature or requestfrontend프론트엔드

    Type

    No type
    No fields configured for issues without a type.

    Projects

    Status

    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions