Skip to content

feat(skills): add tldr-reel skill for social video generation - #6634

Open
tomeredlich wants to merge 1 commit into
mainfrom
feat/tldr-reel-skill
Open

feat(skills): add tldr-reel skill for social video generation#6634
tomeredlich wants to merge 1 commit into
mainfrom
feat/tldr-reel-skill

Conversation

@tomeredlich

@tomeredlich tomeredlich commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

What

Adds a tldr-reel skill so anyone — or any agent — can generate a // TL;DR reel from a daily.dev article: a 26–30s vertical video, music and on-screen text only, no voiceover.

Skill only. No app code, no CI or typecheck surface.

Why this is worth committing

Most of it is knowledge that is expensive to rediscover, and all of it was verified by running against the live API and by rendering frames and looking at them.

The data contract — what is actually usable without auth:

  • title, summary, image, tags, readTime, source, engagement, trending are reliable (with summary and image both nullable)
  • fetchSmartTitle returns UNAUTHENTICATED — needs a PAT, so don't design around it
  • hero and communitySentiment are queryable but frequently null, even on well-engaged posts
  • majorHeadlines carries an editorial headline that is far more readable than title, which closes the smartTitle gap with no auth — and significance makes content selection an editorial shortlist rather than a scoring problem

Gotchas that cost real time:

  • post ids are case sensitive (va5uoAWAC resolves, va5uoawac 404s), and post(id:) also accepts the full URL slug
  • searchPosts returns nothing unauthenticated — use tagFeed with ranking: TIME
  • true image dimensions live in the CDN's server-timing header, not the API
  • a Trends or Collections source is our own aggregation, so there is no publisher to credit

The creative rules, which were arrived at by rendering and looking rather than by reasoning: frame 1 states significance rather than the event, the two-line turn/consequence structure, a 13-word cap derived from the ~3 words/second readable ceiling, and runtime as an output of bpm plus word count rather than a target.

Scripts

Both tested end to end against the live API:

Script Does
fetch_article.py <url> Resolves an article into a JSON bundle plus scored background candidates, including crop survival for full-bleed use, and flags no-cover / own-source cases
analyse_track.py <mp3> Derives tempo, beat phase, in-point and the bar layout; warns on low tempo confidence and on tracks too short for the cut
$ python3 scripts/fetch_article.py https://daily.dev/posts/tailwind-labs-is-joining-shopify-5wtla8j7j
headline      Tailwind Labs joins Shopify as Tailwind CSS remains MIT-licensed
significance  major
source        Collections   << daily.dev own aggregation: no publisher credit
candidates    340 images; 20 survive a full-bleed crop well

Testing

  • Both scripts run clean against the public API with no auth
  • Three reels were produced from this spec end to end (Tailwind/Shopify, GPT-Image-2.5, CUDA Rust) at 1080×1920, H.264 + AAC
  • No repo code paths touched, so nothing to regress

Note for review

The render pipeline itself is not in this PR — it is a local prototype (HTML + Playwright + ffmpeg). The skill documents the frame geometry, motion values and the traps that bit during development, so it stands on its own as a spec for whoever builds the production version.

🤖 Generated with Claude Code

Preview domain

https://feat-tldr-reel-skill.preview.app.daily.dev

Captures the data contract and creative spec behind the "// TL;DR" format:
a 26-30s vertical reel built from one daily.dev article, music and on-screen
text only.

The data half is the part that is expensive to rediscover. Verified against
the public API: which fields are reliable, which are gated (fetchSmartTitle
returns UNAUTHENTICATED) and which are queryable but frequently null (hero,
communitySentiment). majorHeadlines turns out to carry an editorial headline
that closes the smartTitle gap without auth. Also documents the gotchas that
cost time - case-sensitive post ids, searchPosts returning nothing
unauthenticated, and true image dimensions living in a CDN header rather
than the API.

The creative half records the rules that were arrived at by rendering and
looking, not by reasoning: frame 1 states significance rather than the event,
the two-line turn/consequence structure, a 13-word cap from the ~3 words per
second readable ceiling, and runtime as an output of bpm plus word count
rather than a target.

Two scripts, both tested end to end:
- fetch_article.py resolves a URL into a bundle plus scored background
  candidates, scoring crop survival for full-bleed use
- analyse_track.py derives tempo, beat phase, in-point and the bar layout,
  and flags tracks that are too short or too ambiguous to trust

Skill only - no app code, no CI or typecheck surface.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Sep 9, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
daily-webapp Ready Ready Preview Sep 9, 2026 3:00pm UTC

Request Review

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant