Inspiration
Every creator we talked to described the same post-production bottleneck: the video is edited and ready, but publishing it still takes an hour or more of manual, repetitive work — writing captions, guessing SEO metadata, coming up with a thumbnail hook, and figuring out when to post across three or four platforms. None of that requires creative judgment; it requires time. That's exactly the kind of task automation should eat first.
What it does
CreatorFlow takes one plain-text transcript and produces, in seconds:
- Captions — timed .srt / .vtt files, chunked to broadcast-standard line length and timed from a configurable speaking rate.
- SEO metadata — 5 title options, a description, tags, and hashtags, plus a transparent, rule-based SEO score (0–100) that explains every point it awards or withholds — not a black-box "AI says 82/100."
- Thumbnail ideas — 6 headline + on-image-text variants built from proven short-copy patterns and the transcript's real topical keywords.
- A posting schedule — every title slotted into a best-time-to-post calendar across your chosen platforms, strongest content claiming the best slots first, with zero double-booked slots.
It ships two ways: a zero-dependency Python CLI for scripting into a pipeline, and a browser-based UI (try it live (https://realahmadmujtaba.github.io/creatorflow/)) where you paste or upload a transcript and get results instantly — the whole pipeline runs client-side in JavaScript, so nothing is ever uploaded anywhere.
Everything works fully offline on heuristics. If you set ANTHROPIC_API_KEY in the CLI, titles and the description are additionally sharpened by Claude — and if that call fails for any reason, it silently falls back to the heuristic output, so a live demo never breaks on stage.
How we built it
- Pure Python, standard library only for the core pipeline — zero required dependencies.
- Each concern is its own module (captions, seo, thumbnails, scheduler, llm, report) wired together by a thin cli.py, so any piece can be swapped or extended independently.
- Caption timing is estimated from words-per-minute rather than requiring audio or a forced-aligner, so it works from a transcript alone.
- SEO keyword extraction is frequency-based with a curated stopword list tuned specifically for spoken video intros (filtering out "hey," "welcome back," "guys," etc. — the words a generic NLP stopword list misses but every creator transcript is full of).
- The scheduler ranks content by SEO score and walks a per-platform "best times to post" table so the strongest material claims the best slots, without ever double-booking a platform.
- The web UI is a direct, line-by-line JavaScript port of the Python pipeline (same stopwords, same title templates, same scheduling math), kept byte-for-byte in sync so the CLI and the browser demo never diverge.
Challenges we ran into
Our own regression test lied to us. Early on we caught a real bug live in the browser: the word "why" was missing from the stopword list, so it got extracted as a topic keyword and collided with the "Why {keyword} Matters" title template, producing the nonsensical title "Why Why Matters More Than You Think." We fixed the stopword list and added a regression test asserting no generated title repeats an adjacent word.
That test gave us false confidence. Days later, re-testing the same pipeline, we found the same class of bug still alive with a different word: "fail" wasn't in the stopword list either, so it produced "Why Fail Matters More Than You Think" — and separately, the keyword "systems" collided with a "How to {keyword}" template to produce the grammatically broken "How to Systems (Step by Step)." Neither is an adjacent-word repeat, so our existing test couldn't catch either one — it was guarding against the specific symptom we'd already seen, not the underlying cause: a pure frequency-based extractor has no idea whether a word it pulled out is a noun, a verb, or an adjective, so nothing stopped one from being shoved into a template that assumed it was a clean topic noun.
The real fix wasn't another word added to a list — it was separating "good for tags" from "good for a title." We kept "fail" and "systems" as legitimate SEO tags (they're genuinely on-topic) but added a second, narrower filter that excludes verb-shaped and bare-adjective words specifically from title/thumbnail templates, and rewrote the "How to" template to a phrasing that's grammatical for any noun instead of only verbs. We also caught, in the same pass, that thumbnail on-image text was truncating mid-word ("AUTOMATION: THE UNTOLD S") — fixed to break on a word boundary. All of it shipped with a new regression test and the live demo re-verified end-to-end before submission.
Accomplishments that we're proud of
- A genuinely functional tool, not a mockup — every output file is real and immediately usable, in both the CLI and the browser.
- An SEO scorer that shows its work instead of hiding behind an opaque number.
- Zero required setup: git clone → one command → real output, or just open the live demo (https://realahmadmujtaba.github.io/creatorflow/) and paste a transcript.
- A live browser-verification pass that caught and fixed two real bugs — including one that survived our own regression test — before submission.
What we learned
Heuristic, rule-based systems are underrated for hackathon judging: they're faster to build, 100% reproducible for a live demo (no API flakiness), and — critically — explainable, which matters when judges are scoring "technical execution." LLM enhancement is strictly additive, not load-bearing.
We also learned something about testing itself: a regression test named after a symptom ("no repeated adjacent words") only catches that symptom again. Catching a class of bug takes a test — and a fix — aimed at the actual mechanism (verb/adjective words landing in noun-shaped templates), not the one instance that happened to trip you up first.
What's next
- Thumbnail image generation (today we generate the copy/headline, which is the actual bottleneck for most creators — image generation is a natural next layer).
- Direct publish integration with the YouTube/TikTok/Instagram APIs so the generated schedule can execute itself instead of just planning.
- Per-platform caption formatting (TikTok/Reels burned-in caption styling vs. YouTube sidecar files).
- Light part-of-speech tagging on extracted keywords so title-template matching stops being denylist-based entirely.
✻ Brewed for 34s · done 4:35 PM
- Built with
For the Devpost "Built With" tag field, here's the list reflecting both the CLI and the new browser UI:
python javascript
- Caption timing is estimated from words-per-minute rather than requiring audio or a forced-aligner, so it works from a transcript alone.
- SEO keyword extraction is frequency-based with a curated stopword list tuned specifically for spoken video intros (filtering out "hey," "welcome back," "guys," etc. — the words a generic NLP stopword list misses but every creator transcript is full of).
- The scheduler ranks content by SEO score and walks a per-platform "best times to post" table so the strongest material claims the best slots, without ever double-booking a platform.
- The web UI is a direct, line-by-line JavaScript port of the Python pipeline (same stopwords, same title templates, same scheduling math), kept byte-for-byte in sync so the CLI and the browser demo never diverge.
Challenges we ran into
Our own regression test lied to us. Early on we caught a real bug live in the browser: the word "why" was missing from the stopword list, so it got extracted as a topic keyword and collided with the "Why {keyword} Matters" title template, producing the nonsensical title "Why Why Matters More Than You Think." We fixed the stopword list and added a regression test asserting no generated title repeats an adjacent word.
That test gave us false confidence. Days later, re-testing the same pipeline, we found the same class of bug still alive with a different word: "fail" wasn't in the stopword list either, so it produced "Why Fail Matters More Than You Think" — and separately, the keyword "systems" collided with a "How to {keyword}" template to produce the grammatically broken "How to Systems (Step by Step)." Neither is an adjacent-word repeat, so our existing test couldn't catch either one — it was guarding against the specific symptom we'd already seen, not the underlying cause: a pure frequency-based extractor has no idea whether a word it pulled out is a noun, a verb, or an adjective, so nothing stopped one from being shoved into a template that assumed it was a clean topic noun.
The real fix wasn't another word added to a list — it was separating "good for tags" from "good for a title." We kept "fail" and "systems" as legitimate SEO tags (they're genuinely on-topic) but added a second, narrower filter that excludes verb-shaped and bare-adjective words specifically from title/thumbnail templates, and rewrote the "How to" template to a phrasing that's grammatical for any noun instead of only verbs. We also caught, in the same pass, that thumbnail on-image text was truncating mid-word ("AUTOMATION: THE UNTOLD S") — fixed to break on a word boundary. All of it shipped with a new regression test and the live demo re-verified end-to-end before submission.
Accomplishments that we're proud of
- A genuinely functional tool, not a mockup — every output file is real and immediately usable, in both the CLI and the browser.
- An SEO scorer that shows its work instead of hiding behind an opaque number.
- Zero required setup: git clone → one command → real output, or just open the live demo (https://realahmadmujtaba.github.io/creatorflow/) and paste a transcript.
- A live browser-verification pass that caught and fixed two real bugs — including one that survived our own regression test — before submission.
What we learned
Heuristic, rule-based systems are underrated for hackathon judging: they're faster to build, 100% reproducible for a live demo (no API flakiness), and — critically — explainable, which matters when judges are scoring "technical execution." LLM enhancement is strictly additive, not load-bearing.
We also learned something about testing itself: a regression test named after a symptom ("no repeated adjacent words") only catches that symptom again. Catching a class of bug takes a test — and a fix — aimed at the actual mechanism (verb/adjective words landing in noun-shaped templates), not the one instance that happened to trip you up first.
What's next
- Thumbnail image generation (today we generate the copy/headline, which is the actual bottleneck for most creators — image generation is a natural next layer).
- Direct publish integration with the YouTube/TikTok/Instagram APIs so the generated schedule can execute itself instead of just planning.
- Per-platform caption formatting (TikTok/Reels burned-in caption styling vs. YouTube sidecar files).
- Light part-of-speech tagging on extracted keywords so title-template matching stops being denylist-based entirely.
Built With
- argparse
- css
- github
- html
- javascript
- pytest
- python
Log in or sign up for Devpost to join the conversation.