feat(content-studio): Video Generation Pipeline — AI 영상 합성 통합#592
Merged
Conversation
# Conflicts: # packages/web/app/admin/content-studio/AssetPanel.tsx # packages/web/app/admin/content-studio/ShortFormPanel.tsx # packages/web/app/admin/content-studio/__tests__/ShortFormPanel.test.tsx # packages/web/app/admin/content-studio/page.tsx # packages/web/lib/content-studio/__tests__/assets.test.ts # packages/web/lib/content-studio/assets/index.ts # packages/web/lib/content-studio/schemas.ts
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This was referenced May 28, 2026
thxforall
added a commit
that referenced
this pull request
May 28, 2026
* feat(content-studio): add xAI scene video pipeline * docs(content-studio): plan video job pipeline * docs(content-studio): harden video job plan * feat(content-studio): add video job pipeline * feat(content-studio): abstract video providers * feat(content-studio): select video mode per scene * feat(content-studio): compose final video exports * feat(content-studio): resume persisted video jobs * feat(content-studio): attach governance to video jobs * fix(content-studio): strengthen short-form video prompts * feat(content-studio): add local video download runner * feat(content-studio): save source image for local videos * fix(content-studio): split long local video scenes * feat(content-studio): compose local video clips
thxforall
added a commit
that referenced
this pull request
May 28, 2026
* feat(ci): schema drift PR gate (TS<->DB) — #373 v2 (#588) * docs(database): add schema-drift-sot.md SSOT mapping (#373 v2) TS 상수 ↔ DB CHECK constraint 매핑 SSOT. scripts/check-schema-drift.ts 의 SOT_MAPPINGS 와 함께 갱신한다. v2 PR gate 의 동작/허용 constraint 형식/ 의도적 우회(drift-bypass label)/v3 후속 항목(posts.status, generated types) 명시. * feat(scripts): add check-schema-drift.ts for TS<->DB enum drift (#373 v2) ts-morph 로 TS 상수 (`export const X = [...] as const`) 값 set 추출 → psql 로 pg_get_constraintdef 파싱 → set-equality 비교. 세 가지 CHECK constraint 형식 (status::text=ANY ARRAY, col=ANY ARRAY, IN list) 지원. drift 1건 이상이면 exit 1, stdout 은 PR comment 용 markdown report. devDependency: ts-morph@^24.0.0 추가. * feat(ci): add schema-drift.yml PR gate workflow (#373 v2) postgres:17 service + postgresql-client-17 + bun install + supabase migrations 순차 적용 + check-schema-drift.ts 실행 + sticky PR comment (marocchino/sticky-pull-request-comment@v2, header=schema-drift). drift-bypass label: continue-on-error 로 job green 유지 (comment 는 유지). branch protection 별도 설정 필요. * docs(database): drift-check.md mark v2 PR gate landed (#373) v1 nightly 와 v2 PR gate 채널을 분리 명시. v2 세부는 schema-drift-sot.md 에서 별도 owning. * docs(design-system): v2.2.0 동기화 — content fundamentals, animations, dual palette (#589) * docs(design-system): bump README to v2.2.0 with content fundamentals + dual palette - Version: 2.1.0 -> 2.2.0, Last Updated: 2026-05-28 - Add v2.2 변경사항: Content Fundamentals, Animations 카탈로그, Dual Palette, Magazine palette tokens (#573), Navigation Facts, Home sequence, IBM Plex Mono (inline), DecodedLogo WebGL - Document Index: 신규 Foundation (v2.2) 섹션 — content-fundamentals.md, animations.md 추가 - Tech Stack table 확장: OKLCH + Hex magazine palette, typography 4종, three.js + @chenglou/pretext (DecodedLogo) - Navigation Facts + Home Page Sequence 섹션 추가 (app/page.tsx:568 앵커) Closes #572 (part 1/7). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(design-system): add content-fundamentals.md 7 sections covering Voice / Casing / Person / Language / Pricing / Numbers / Emoji policy with Do/Don't rules and code anchors: - Pricing: ko-KR locale + ₩ prefix, toLocaleString (앵커: DecodedSolutionsSection.tsx:40 — 마이그레이션 대상) - Numbers: 사용자 표면은 toLocaleString 통과 (앵커: lib/utils/format.ts:36) - Voice: editorial(큐레이션) vs product UI(명료) 분리 - Language: ko-KR 기본, 고유명사·기술 용어 원문 유지 - Emoji: editorial 표면 금지, product UI 절제, Lucide 우선 Closes #572 (part 2/7). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(design-system): add animations.md catalog 15+ CSS keyframe catalog with file/line anchors from packages/web/app/globals.css: - dash-flow (L299), hologram-* family (L318-L351), spot-* family (L410-L458), slide-up (L487), shimmer (L503), ai-summary-* (L522-L535), card-glow (L551), marquee-c (L585) - duration/easing/용도/reduce-motion 컬럼 - Easing 함수 정리: ease-out (단방향 reveal), ease-in-out (펄스), linear (무한 flow), cubic-bezier(0.22, 1, 0.36, 1) — observe pattern, cubic-bezier(0.16, 1, 0.3, 1) — ai-summary smooth reveal - prefers-reduced-motion 정책: 4개 미디어 쿼리 블록 + .js-observe transition fallback - 사용 예시: spot 마커, skeleton shimmer, ai-summary, .js-observe Closes #572 (part 3/7). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(design-system): patterns.md add 5.4 dual palette usage * docs(design-system): tokens.md add magazine palette sub-table * docs(agent): rewrite design-system-llm.md as v2.2.0 1-pager SSOT * docs(agent): design-system-summary.md add v2.2.0 entry --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * feat(content-studio): Video Generation Pipeline — AI 영상 합성 통합 (#592) * feat(content-studio): add xAI scene video pipeline * docs(content-studio): plan video job pipeline * docs(content-studio): harden video job plan * feat(content-studio): add video job pipeline * feat(content-studio): abstract video providers * feat(content-studio): select video mode per scene * feat(content-studio): compose final video exports * feat(content-studio): resume persisted video jobs * feat(content-studio): attach governance to video jobs * fix(content-studio): strengthen short-form video prompts * feat(content-studio): add local video download runner * feat(content-studio): save source image for local videos * fix(content-studio): split long local video scenes * feat(content-studio): compose local video clips * fix(magazines): MAGAZINE_STATUSES — 'generating' 누락 복원 (#373 drift) DB constraint post_magazines_status_check 는 'generating' 포함 5-state 인데 TS MAGAZINE_STATUSES 는 4-state. 1주일+ 잠재한 schema drift. #373 drift gate fix (#595) 가 처음 정상 작동하며 발견. 발생 경위: - 20260430120000: 'generating' 추가 (api-server generate handler 초기 INSERT) - 20260430150000: 4-state 로 축소 (TS 와 동기화) - 20260504133842: 'generating' 복원 (api-server insert + UI 필요) - 마지막 migration 의 TS 동기화 누락 → drift magazines.ts 의 MAGAZINE_STATUSES 에 'generating' 추가 (DB 와 같은 순서). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
thxforall
added a commit
that referenced
this pull request
May 28, 2026
…eo script
Vercel build TS step fail (\`Object literal may only specify known properties,
and 'useResearchInCopy' does not exist in type 'BuildShortFormPlanInput'\`)
해소.
\`buildShortFormPlan\` 의 \`BuildShortFormPlanInput\` type 은
\`{packet, variants, platform, durationSeconds}\` 4개만 받는다.
\`useResearchInCopy\` 는 어디서도 read 되지 않는 dead key — #592 작업 중 남은
leftover. 제거해도 동작 변화 없음.
본 PR (transpilePackages 추가) 와 함께 적용해야 Vercel build green 으로 전환.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3 tasks
thxforall
added a commit
that referenced
this pull request
May 28, 2026
Vercel Hobby plan 의 Serverless Function maxDuration 제한 (1-60s) 위반으로 배포 실패: \`\`\` Builder returned invalid maxDuration value for Serverless Function \"api/v1/content/assets/video-jobs/[jobId]/compose\". Serverless Functions must have a maxDuration between 1 and 60 for plan hobby. \`\`\` 수정: - \`api/v1/content/assets/video-jobs/[jobId]/compose/route.ts\`: 600 → 60 - \`api/v1/content/assets/videos/route.ts\`: 300 → 60 긴 compose/video 작업은 background job 패턴 (\`/poll\` endpoint 와 함께) 으로 처리해야 함. Vercel Pro 업그레이드 시 원래 값 복원 가능 (Pro: 800s 까지). \#592 Video Pipeline 도입 시 누락된 Hobby 호환성 제약. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
thxforall
added a commit
that referenced
this pull request
May 28, 2026
…l build 회복) (#611) * fix(web): transpilePackages 에 @next/third-parties 추가 (Turbopack Vercel build 회복) Vercel build (dev/main/feature 전역) 가 \`Module not found: Can't resolve '@next/third-parties/google'\` 로 실패 중. Turbopack 의 subpath export 해석 회귀이며 vercel/next.js#58697 계열로 reported. \`transpilePackages\` 에 \`@next/third-parties\` 추가로 Turbopack 의 ESM resolution 우회. 로컬 \`next build\` 에서 검증 (Compiled successfully in 3.0min, @next/third-parties/google 더 이상 resolve 실패 안 함). ## Why this works \`transpilePackages\` 는 monorepo 의 workspace 가 아닌 node_modules 패키지를 대상으로도 동작, Next.js 가 해당 모듈을 SWC/Turbopack 으로 transpile 하면서 subpath export 를 정상 풀어낸다. ## Alternative considered - @next/third-parties pin (next 16.2.1 ↔ @next/third-parties 16.2.6 mismatch) → caret range 가 같지만 Bun 이 다르게 resolve. pin 은 lockfile 갱신 부담. - next 16.2.6 upgrade → minor 영향 범위 커서 보류. ## Related - vercel/next.js#58697 — @next/third-parties module not found - handoff session 4: dev/main/feature 전역 Vercel fail 추적 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * fix(content-studio): remove dead useResearchInCopy key from local video script Vercel build TS step fail (\`Object literal may only specify known properties, and 'useResearchInCopy' does not exist in type 'BuildShortFormPlanInput'\`) 해소. \`buildShortFormPlan\` 의 \`BuildShortFormPlanInput\` type 은 \`{packet, variants, platform, durationSeconds}\` 4개만 받는다. \`useResearchInCopy\` 는 어디서도 read 되지 않는 dead key — #592 작업 중 남은 leftover. 제거해도 동작 변화 없음. 본 PR (transpilePackages 추가) 와 함께 적용해야 Vercel build green 으로 전환. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * ci: trigger fresh Vercel build (bust cache) 이전 deployment 가 'Restored build cache from previous deployment' 로 진행되어 구 dependency state 가 잔존했을 가능성. empty commit 으로 fresh build 트리거. * fix(api): cap maxDuration at 60s for video routes (Vercel Hobby limit) Vercel Hobby plan 의 Serverless Function maxDuration 제한 (1-60s) 위반으로 배포 실패: \`\`\` Builder returned invalid maxDuration value for Serverless Function \"api/v1/content/assets/video-jobs/[jobId]/compose\". Serverless Functions must have a maxDuration between 1 and 60 for plan hobby. \`\`\` 수정: - \`api/v1/content/assets/video-jobs/[jobId]/compose/route.ts\`: 600 → 60 - \`api/v1/content/assets/videos/route.ts\`: 300 → 60 긴 compose/video 작업은 background job 패턴 (\`/poll\` endpoint 와 함께) 으로 처리해야 함. Vercel Pro 업그레이드 시 원래 값 복원 가능 (Pro: 800s 까지). \#592 Video Pipeline 도입 시 누락된 Hobby 호환성 제약. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
thxforall
added a commit
that referenced
this pull request
May 28, 2026
thxforall
added a commit
that referenced
this pull request
May 28, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Content Studio가 텍스트 스크립트(voiceover + scene direction)까지만 생성하던 것을 실제 영상 합성(video synthesis) 까지 자동화하도록 확장. 14 commits로 video provider 추상화, scene별 video mode 선택, OpenAI image bridge, 합성 export, governance/cost tracking, local video runner 등 영상 파이프라인 전반 구축.
주요 변경 (커밋 그룹별)
Provider 추상화 — Closes #519
feat(content-studio): abstract video providers— provider-agnostic 인터페이스feat(content-studio): add video job pipeline— job 큐/상태 관리Mode/Image bridge — Closes #522
feat(content-studio): select video mode per scene— scene별 video mode 선택feat(content-studio): add xAI scene video pipeline— Grok Imagine 통합Export compose — Closes #523
feat(content-studio): compose final video exports— scene clips → vertical exportfeat(content-studio): compose local video clipsfix(content-studio): split long local video scenesGovernance/Cost — Closes #524
feat(content-studio): attach governance to video jobs— governance checksJob 관리 / 운영
feat(content-studio): resume persisted video jobs— 중단된 job 재개feat(content-studio): add local video download runnerfeat(content-studio): save source image for local videosfix(content-studio): strengthen short-form video prompts문서
docs(content-studio): plan video job pipelinedocs(content-studio): harden video job planTest plan
cd packages/web && bun test— content-studio 관련 신규 단위 테스트Breaking changes
마이그레이션 / 운영
X_AI_API_KEY등)Linked issues
위험 / Follow-up
merge: sync with dev(606471c) 로 동기화 완료🤖 Generated with Claude Code