feat(shorts): render source content (tweets/threads/news) as visual cards

- New scripts/source-fetch.mjs: fetch tweet/thread via fxtwitter API +
  Jina fallback; news via r.jina.ai (title/author/excerpt/paragraphs)
- New src/remotion/cards.tsx: TweetCard, ThreadCard, NewsCard — mono,
  flat, white cards w/ avatar initial, handle, text, stats (views/likes/
  replies/retweets) or headline+excerpt; ThreadCard stacks tweets
- ShortsVideo: new scene types tweet/thread/news; source card scene
  REPLACES the story segment's visual (duration kept identical so the
  audio/video mux stays in sync) — the voiceover keeps playing while the
  actual tweet/news is shown on screen
- Worker: fetch sourceUrl when present → sourceToCard() → inject card
- Schema: YoutubeScript.sourceUrl + sourceData (Json)
- UI: approved scripts get a '🔗 Tweet/News URL' input; Render Shorts
  saves sourceUrl then queues the render
- Verified: card scene renders (bright%≈20.8 vs caption 3.9 in pixel
  histogram); TSC clean; frame extraction OK
This commit is contained in:
MythEclipse committed 2026-09-22 21:40:59 +07:00
1 parent 4a61766ee4
commit 9c6ea226f8
6 files changed
+578 -9

No files matched your search

+3
View File
@@ -169,6 +169,9 @@ model YoutubeScript {
videoUrl String?
thumbnailUrl String?
render YoutubeRender?
// Source content (tweet/thread/news) rendered as visual cards
sourceUrl String?
sourceData Json?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt