n8n logon8n Automation Hub
Build breakdown

Splitting One Big n8n Video Workflow Into a Creator and a Publisher, Joined by a Sheets Queue

Build breakdown · n8n workflow · September 19, 2026

A daily news channel's workflow had grown to fetch, write, render, upload, thumbnail and notify in a single run. Any failure late in the chain made the whole run suspect, and any edit risked the morning's episode. Splitting it in two was the right call. What made it work was deciding what to put in the queue row between the halves.

Workflow at a glance
  1. The Creator runs at 06:00 local time: fetch headlines, write the script, render the long video and shorts, then append one row to a render-queue tab in Google Sheets
  2. The Publisher runs two hours later: read the oldest row with status ready, download the video, upload it, run the thumbnail chain, notify, and mark the row published
  3. One workflow can't read another's nodes, so everything the Publisher needs is baked into the row: paths, title, description, tags, chapter text, shorts as JSON, absolute publish times
  4. The row key is the episode id, unique per day, so the Publisher's update always hits exactly one row
  5. The queue shows three consecutive days of the cycle working: episodes queued around 06:30 local time and later marked published

Why split it

Rendering is the slow, expensive half and it's the half that can fail in interesting ways. Uploading is quick and safely retryable. In one workflow, a failure in the upload or thumbnail chain meant reasoning about a run that had already spent its render. After the split the Creator's run takes about half an hour, and the Publisher finishes in well under a minute.

What travels in the row

The queue tab has one row per episode with these columns: row_id, episode_date, status, long_form_path, long_form_title, long_form_description, long_form_tags, chapters_text, thumbnail_source_path, shorts_json, created_at, published_at and youtube_long_id. The shorts_json field holds zero to three shorts, each with its own path, title and publish time.

The chapter list shows why this design matters. In the monolithic workflow the upload node reached back to a Build Chapters node by name. After the split that node lives in a different workflow and can't be referenced at all, so the Creator computes the chapter text and stores it as a literal field in the row, and the Publisher never recomputes it. The earlier version of that reference had already caused trouble once, when a node with no outgoing connections never ran: see the dead-end node article.

Timestamps are absolute

Shorts are scheduled to go public at times chosen when the Creator renders. Those are stored as absolute UTC timestamps rather than offsets such as thirty minutes from now, and the Publisher clamps any time that is already in the past to the present. If the Publisher runs late, a stored offset would drift; a stored absolute time can only end up early, and the clamp handles that.

The key and the buffer

row_id is the episode id, for example ep_20260915, unique per day, so the Publisher's update matches exactly one row. That is the safeguard from the non-unique column article. The Publisher runs two hours after the Creator. The Creator's typical run is about half an hour, so the buffer is generous, and a Publisher that finds no ready row simply exits.

What to watch on the first days

The workflow validated with no errors, but the real test is the queue. Check that a new ready row appears after the Creator's slot, that it flips to published after the Publisher's, and that the video is actually on the channel. The queue on this instance shows that cycle on three consecutive days.

The split also made a later failure easy to see. On a day when the Creator produced nothing, the Publisher had no ready row and exited, which is exactly what a green workflow that produced no episode looks like from the outside.

A workflow so long that nobody wants to edit it?

I split monolithic n8n workflows into small stages joined by a queue, and design what travels between them.