Loading...
Loading...
View Source Code
github.com/Danm72/video-engine
Connect on LinkedIn
linkedin.com/in/d-malone
Follow on Twitter/X
x.com/danmalone_mawla
Share this article
I kept hitting the same wall.
Text posts were grand. Audio had a clean pipeline. Images were sorted. But short launch videos were still a mess: screen recordings, ad-hoc edits, random music picks, and no way to reproduce the result next week.
I'm not gonna lie to you, I burned way too many hours pretending this could be solved with "just one more manual edit." It couldn't.
So I built a dedicated video-engine repo and treated video like code.
Inspiration tweet: Thariq's original post on X.
I tested a few approaches. Template-only was too rigid. Conversational scene building sounded cool but was painful to replay exactly.
Manifest-driven won because it gave me control and replayability.
| Approach | What Broke | Why I Dropped It |
|---|---|---|
| Manual editing | Slow, inconsistent | Fine for one-offs, painful for pipeline work |
| Prompt-only generation | Hard to audit | Too much hidden state and fuzzy diffs |
| Manifest-driven | More upfront design | Best tradeoff for repeatable output |
project context -> manifest.json -> audio generation -> Remotion render -> review report
None of this is exotic on its own. The value is how the pieces fit together.
The strict rule in this engine: no CSS timeline animations. Motion comes from useCurrentFrame(), spring(), and interpolate() so renders stay deterministic and debuggable.
The manifest is the source of truth. Components are just the renderer.
{
"meta": { "title": "My Demo", "fps": 30, "width": 1920, "height": 1080 },
"theme": { "bgColor": "#0a0a0a", "accentColor": "#D57456" },
"music": { "prompt": "warm uplifting lo-fi", "durationMs": 35000 },
"scenes": [
{ "id": "intro", "type": "split-intro", "durationMs": 3200 },
{ "id": "focus", "type": "camera-sequence", "durationMs": 5200 },
{ "id": "proof", "type": "animated-card", "durationMs": 5000 }
]
}
This gave me three quick wins:
twitter-insights-v11.mp4The first renders looked rough. Flat motion. Clipped text. Contrast issues on light cards. Springs that felt like they were stuck in mud.
So I did a frame-level comparison against the reference videos and forced myself to set hard targets instead of guessing.
| Dimension | Target |
|---|---|
| Base background | #0a0a0a |
| Accent color | #D57456 |
| Video length | 30-40s |
| Frame rate | 30fps |
| Transition timing | ~350-800ms |
| Music RMS | -36dB to -38dB |
Then I tackled fixes in phases: clipping and contrast first, spring tuning second, transition and scene-type polish after that. Less glamorous, way more effective.
I originally planned visuals first. That was a mistake, full stop.
Switching to audio-first made timing sane again:
That removed a lot of the "why is this transition late?" debugging spiral.
| Layer | Typical Usage | Est. Cost |
|---|---|---|
| SFX | 5-8 cues | $0.30-$0.50 |
| Music | 1 track | $0.10-$0.20 |
| Total per video | 30-40s clip | $0.40-$0.70 |
The turning point was building a single review command after render.
Before this, I was basically squinting at frames and arguing with myself. After this, I got a concrete report:
python3 scripts/review-render.py out/video.mp4 \
--reference data/reference-profiles/v1-insights.json \
--output out/reviews/video-review.md
Also: if animation feels dead, check spring damping before rewriting half your scene library. Ask me how I know.
1:1, 9:16)/content-video integration in the full content pipelineIt remains to be seen how far I can push full automation without losing quality, but this is already a massive step up from manual editing roulette.
Explore the Full Code
Star the repo to stay updated
Let's Connect
Follow for more smart home content
Follow on Twitter/X
x.com/danmalone_mawla
Continue reading similar content

A viral post about 10 AI agents coordinating like a real team got 3.5M views. I'm building the platform that gives every OpenClaw user the same power.

The Verge mentioned my automation-suggestions repo. But that was just the appetizer. Here's what happens when you give Claude a persistent identity, a voice, and control of your smart home.

I wrote four bash scripts to orchestrate Claude Code agents in parallel. Three days later: 236 files changed, 271 commits, and a fully migrated codebase.