Skip to content

Content and discovery

One master, the cuts each surface needs

The same ninety seconds has to become a Reel, a Short, a TikTok and a square cut for the feed. Most teams re-export by hand and find out about the mismatch at upload, which is the most expensive place to find out. Every one of those specifications is published, so the check belongs before the render rather than after the rejection — and the cuts that cannot be reached by cropping belong with a person, not with a retry.

Triggers
Two
Runs
Hourly
Stack
4 tools
Durable execution
Not required

The flow

The top track reads the master and plans the cuts. The bottom track works through the plan on a timer, and asks one question before spending a render.

Data

A master is registered

Sheets · Airtable

Orchestration

Read what you actually have

n8n · Make

Data

Write the render sheet

Sheets · Airtable

Orchestration

Every hour

n8n schedule

Orchestration

Collect the unrendered cuts

n8n

Orchestration

Within the surface's spec?

n8n IF

Platform

Cut it and hand it over

Instagram · TikTok · YouTube APIs

Notify

Flag it for a human crop

Slack · WhatsApp

Step by step

  1. 01

    A master is registered

    Sheets · Airtable

    The editor adds one row pointing at the master file. One master, one row — every cut that follows refers back to it, so there is never a question of which version something came from.

  2. 02

    Read what you actually have

    n8n · Make

    Duration, dimensions, container and codec, taken from the file rather than from the row. An editor's note and an export setting disagree more often than either party expects.

  3. 03

    Write the render sheet

    Sheets · Airtable

    One row per cut: surface, target ratio, target duration, status. This is what tells you a Short was never made — a folder of files will never tell you about the file that is missing.

  4. 04

    Every hour

    n8n schedule

    Picks up cuts that are still unrendered, including the ones a failed run left behind. A render that crashed and a render that was never queued look identical in a folder and different on the sheet.

  5. 05

    Collect the unrendered cuts

    n8n

    Read the sheet for rows with no output yet, oldest first.

  6. 06

    Within the surface's spec?

    n8n IF

    Check the numbers against the published specification before spending a render: aspect ratio, duration, container, codec, file size. This is arithmetic, and it costs nothing compared with a rejected upload.

  7. 07

    Cut it and hand it over

    Instagram · TikTok · YouTube APIs

    Render to the target spec, then upload through each surface's own endpoint. Keep the render and the upload as separate states, because an upload that fails should not force a re-render.

  8. 08

    Flag it for a human crop

    Slack · WhatsApp

    A ratio that cannot be reached by cropping needs a person, not a retry. Automatic centre-crop on a 16:9 two-shot produces a headless presenter, and nobody notices until it is live.

What the platform will not allow

Six published constraints. Each one is a check that costs a second before the render and an hour after the rejection.

  • Reels take "MOV or MP4 (MPEG-4 Part 14), no edit lists, moov atom at the front of the file", H264 or HEVC, an aspect ratio "between 0.01:1 and 10:1 but we recommend 9:16", a maximum of 1920 horizontal pixels, 3 seconds to 15 minutes, and 300MB. The moov atom clause is the one that catches people: the file plays perfectly on the editor's machine and is refused on upload.

    Instagram Platform — IG User /media (reel and image specifications)
  • Feed images must be JPEG, 8MB maximum, with an aspect ratio "within a 4:5 to 1.91:1 range" and a width scaled into a 320 to 1440 pixel range. A 9:16 still cannot go into the feed as it is — it has to be recomposed, which is a design decision rather than a resize.

    Instagram Platform — IG User /media (reel and image specifications)
  • TikTok's upload endpoint accepts video/mp4, video/quicktime and video/webm, and larger files go up in chunks parameterised by video_size, chunk_size and total_chunk_count. The upload is a sequence with partial states, not a single call that either works or does not.

    TikTok for Developers — Content Posting API, upload video
  • "Unaudited API Clients can only post contents in SELF_ONLY viewership" and "can allow up to 5 users to post in a 24 hour window". Before audit, the TikTok lane publishes privately to your own account no matter how good the cut is — worth knowing before it is built rather than after.

    TikTok for Developers — Content Sharing Guidelines
  • YouTube gates the same way, and it is easy to miss because the rest of its documentation reads as a plain rate limit: videos uploaded through videos.insert from unverified API projects created after 28 July 2020 are restricted to private viewing until the project passes a compliance audit. Both lanes publish privately until audited, not just TikTok.

    YouTube Data API — videos.insert
  • Shorts are "short-form videos that are up to 3 minutes long", and you can "upload Short videos with a maximum resolution of 1080p". A cut that runs to 3 minutes 05 is a normal video, and it will sit in a different surface from the one it was made for.

    YouTube Help — Create a YouTube Short
  • A YouTube project's "default quota allocation" is "100 search.list calls, 100 videos.insert calls, and 10,000 units per day combined for all other endpoints". A backfill of an existing library is paced by that hundred, so it is a multi-day job by arithmetic, not by choice.

    YouTube Data API — Getting started (quota)

When this is not worth building

Three cases where the upkeep costs more than the re-exports.

  • You publish to one surface. There is no master and no cuts — there is a video, and a pipeline around it is scaffolding with nothing inside.

  • Your videos are already shot per surface: vertical and native for one feed, a seated talking head for another. Nothing is being derived, so there is nothing to derive from.

  • Nobody looks at the flagged crops. The value of the branch is that a person handles the frames a machine would ruin; if the flag goes to an unread channel, the flow has automated the ruin and removed the person who would have caught it.

Related reading

Talk to us

Which of these should you actually build?

We run these flows for Hong Kong operators every week. Tell us the process that is costing you, and we will say whether automating it is worth the upkeep.

Start a conversation