u/nevermind_salim

A workflow to copy the reaction shot from a UGC tiktok and cuts it out so I can replicate at scale with AI
▲ 6 r/n8n

A workflow to copy the reaction shot from a UGC tiktok and cuts it out so I can replicate at scale with AI

Every viral TikTok ad we scroll past in 2026 still uses the same setup. Girl smiles or gasps or rolls her eyes for 2 seconds, then cut to a screen recording of some product. Thats the whole ad. The reaction shot is what stops your thumb.

I wanted to make a bunch of these. Different product, different AI avatar, same reaction style. The reaction shots are the hard part because every tiktok cuts at a different point. yt-dlp gives you the whole video, fine, but every clip needs its own trim. I tried doing 6 by hand and gave up around the 4th.

So the workflow goes form trigger > RenderIO downloadAndProcessMedia (which is FFmpeg-as-a-service with yt-dlp baked in, which is the only reason this is short, otherwise youd need a downloader step before the ffmpeg step). One ffmpeg pass that grabs the video, stream copies it as source.mp4, and dumps every scene change timestamp to scenes.txt using select='gt(scene,0.3)',metadata=print:file=...then a Code node fetches scenes.txt, regexes the first pts_time between 1 and 6 seconds (where reaction shots actually land), and an HTTP Request posts back to RenderIOs /api/v1/run-ffmpeg-command with the trim. Form completion at the end with the download link.

Bit thats interesting if you tried this before: getting the detected cut time out of ffmpeg and back into ffmpeg is way harder than the trim itself. The n8n RenderIO community node has noDataExpression: true on its ffmpeg command field so n8n expressions like {{ $json.hookEndSec }} just dont evaluate. Solution was to skip the node and POST to the RenderIO API directly from a regular HTTP Request node, where jsonBody does evaluate.

The maintainer had already shipped <<alias>> placeholders to unblock the underlying issue ({{}} colliding with n8n expressions), so I used those for <<in_video>> and <<out_hook>>. Still waiting on the community node patch but the API direct route works today.

Here are some examples:

Here is the github link: https://github.com/RenderIO/workflows/blob/main/workflows/tiktok-visual-hook-splitter.json

Last bit, has anyone done image to video motion transfer at scale? I want to wire these reaction clips into my own AI avatar via Kling.

u/nevermind_salim — 1 day ago