Last week I rendered a short video for Instagram, watched it all the way through on my laptop, nodded to myself, and sent it off through the scheduler. It came straight back. The picture was fine and the timing was fine, but the file had no audio track, and it turns out Instagram's publishing API refuses any video without one, even a reel that's meant to be watched on mute. My laptop had played it happily without mentioning any of this.
That small and slightly embarrassing failure is a good way into how I make video now, because it shows the two halves of the job and why I keep them apart. Remotion is where the video gets designed. Postiz is where a finished file gets a slot on the calendar. As long as I remember that the render is not the post, things go smoothly. The moment I forget, I end up with something that looks done and never goes anywhere.
Making a video the way you'd make a web page
If you haven't come across Remotion, the short version is that you describe a video the way you'd describe a web page. It's React. Every frame is a component rendered at a particular moment in time, so a fade is just an opacity that changes over a range of frames, a slow zoom is a transform that grows a little on every frame, and text is simply text. Once that clicked, video stopped feeling like a dark art with a timeline and a hundred buttons, and started feeling like something I already knew how to do.
The part that makes it useful rather than merely clever is props. You design a composition once, and from then on every new video is the same composition fed with different data: another title, another photo, another sound file. It's the same move as a template in any web app, and it has the same payoff. You stop making one-off things, and you stop re-deciding the design every time.
Turning an audio lesson into a video
Some of the lessons I publish were recorded as audio only. Someone talks, there's no camera, and the player expects a video anyway. So I built one composition for that and then, importantly, stopped touching it.
It's a wide frame, 1920 by 1080. The presenter's photo sits on the left and fades into a cream-coloured panel, where the lesson title, their name and the logos live. Underneath the title there's a small waveform that follows the voice. I spent longer on that than I'd like to admit, because it has to move enough that you can see someone is talking and not so much that it flickers like an old equalizer. The video runs exactly as long as the recording, which Remotion works out from the audio file so I don't have to.
When the next lesson comes in, I don't open the design. I pass in the new title and the new audio file, and occasionally a different crop of the presenter's photo. The photo is always one I already have. I don't generate a face to fill the empty side of the frame, partly because it would look wrong and partly because it would be a strange thing to do to a real person. Before I render, I look at a single still, because a face that disappears into the fade is just as wrong as one the frame has cut in half.
The thing that tempts me to break this is a long title. It looks cramped, and the quick fix is to open the component and nudge the font size down a little. The trouble is that the next lesson inherits the nudge, and the one after that, and a few months later none of the videos look like the one I originally approved. So the font stays where it is, and a long title gets to take up the space it needs. That's the whole point of having one design.
A reel is three photos and three sentences
The Instagram piece is a second, much shorter composition. Portrait this time, a little over ten seconds, built from three photos taken from the article the reel is about. Each photo fills the tall frame and eases in slightly, and they fade into one another. On each one there's a single line of text, and the first of those lines has to be readable in the second or two someone takes to decide whether to keep watching.
A tall frame is unkind to ordinary photographs. Most of them were taken in landscape, so if the person, or whatever the picture is really of, sits near the edge, the crop simply removes them. I export a still of each scene before I render the full video and move the focus point when something gets lost. Shrinking the text until the line fits doesn't fix a bad crop, it just hides it under smaller type. I also leave the bottom of the frame empty, because Instagram draws its own caption there, and I only put the logo on the last scene. Light photos get dark text, dark photos get white text, and that's about as much design as a ten-second video needs.
The words come straight from the article. If a sentence isn't on the page, it doesn't go in the reel, and I keep it to one fact per scene so it can actually be read while it's moving. Music stays off unless there's a reason for it. And cutting an existing lesson into short clips is a different kind of work altogether, so I don't pretend these reels are that.
What Instagram actually receives
Remotion gives me a picture track and nothing else, which brings us back to the file that bounced. Instagram wants a video with audio, so I add a silent stereo track and leave the picture untouched. While I'm at it I move the file's index to the front, so a phone can start playing before the whole thing has downloaded. Then the file has to live somewhere Postiz can fetch it from. Postiz can't see a path on my laptop, and it can't reach a dev server that only I can open. It copies the file from a public https address into its own library, and the post points at that copy.
Postiz can also rescale and re-encode a video for you. I leave that switched off when the file is already the right size, because a second encode is how a sharp reel turns soft. It also won't turn a PNG into a JPEG, and a feed image has to be a JPEG in a shape Instagram accepts, so I check the width, the height and the pixel format before anything goes up. ffmpeg will cheerfully write a JPEG that looks perfect on my screen and still gets refused by the API, and the error that comes back tells you almost nothing. I know this because I've read that error more than once.
The post itself is plain on purpose: one video, with a still of the first scene as its cover. The first line of the caption carries the hook, since that's all most people see before the fold, and there are a few specific hashtags at the end or none at all. Links in a caption can't be tapped, so I don't build a reel just to sneak one in. And if I haven't chosen a time, the post stays a draft. It only goes out right now when I've said right now.
Who presses the button
All of the preparing can be done by an agent. It can render the stills, pull the line from the article, add the silent track, and put the file where Postiz can reach it. What I keep is the last step: choosing a draft, a time, or now. That's the same rule as The person still decides, applied to a video instead of a sentence.
What I've changed since the file bounced is the order I check things in. I used to render, watch, and feel done. Now I look at the stills and the file details first, and watch the video last. It's a slower way to finish, and it catches exactly the two problems a laptop will never show you: a face lost in the crop, and a silent file that plays perfectly everywhere except where it matters.