Skip to content

Long video → Shorts queue

A long video and the five vertical clips cut from it are one week of content: the long video goes to YouTube on day one, a clip goes to YouTube Shorts, Instagram Reels and Facebook Reels each following day. Dropslate does not cut the clips - your editor or a script does - but once they are files, this recipe queues the week in one pass. YouTube marks a vertical video up to 3 minutes as a Short on its own.

  • A paid plan and an API key with write.
  • The long video (any shape) and the clips as 9:16 files, 60 to 90 seconds each - inside the Shorts, Instagram Reels and Facebook Reels limits alike.
  • Connected YouTube, Instagram and Facebook accounts; the ids from GET /accounts.
  1. Upload the long video and every clip; wait for ready on each.
  2. Plan and create the long video for YouTube alone on day one.
  3. For clip N: plan and create one request to the three short-form accounts on day N + 1, same time each day.
  4. Verify the week in Queue.
Terminal window
export KEY="ds_live_xxxxxxxxxxxxxxxxxxxx"
export API="https://api.dropslate.top/v1"
AUTH="Authorization: Bearer $KEY"
# upload() and schedule-style helpers as in the weekly recipe
ID_YT=$(curl -s "$API/accounts" -H "$AUTH" | jq -r '.accounts[] | select(.platform=="youtube") | .id')
ID_IG=$(curl -s "$API/accounts" -H "$AUTH" | jq -r '.accounts[] | select(.platform=="instagram") | .id')
ID_FB=$(curl -s "$API/accounts" -H "$AUTH" | jq -r '.accounts[] | select(.platform=="facebook") | .id')
# 1) The long video, YouTube only, day one
LONG=$(upload ./episode-12.mp4)
jq -n --arg yt "$ID_YT" --arg m "$LONG" '{
targets:{accountIds:[$yt]}, mediaIds:[$m],
title:"Episode 12: planning a month of content",
text:"Full episode.\n0:00 Intro\n4:10 The plan\n21:30 Q&A",
when:{publishAt:"2026-09-28T18:00", timezone:"Europe/Kiev"},
perPlatform:{youtube:{visibility:"public", category:"27"}},
confirm:true }' > long.json
curl -s -X POST "$API/posts/plan" -H "$AUTH" -H "Content-Type: application/json" -d @long.json | jq -r .table
curl -s -X POST "$API/posts" -H "$AUTH" -H "Content-Type: application/json" -d @long.json | jq -r '.posts[].statusLine'
# 2) One clip a day to Shorts, Instagram Reels and Facebook Reels
day=29
for clip in ./clips/*.mp4; do
MEDIA=$(upload "$clip")
jq -n --arg yt "$ID_YT" --arg ig "$ID_IG" --arg fb "$ID_FB" --arg m "$MEDIA" --arg w "2026-09-${day}T12:00" \
--arg t "From episode 12: $(basename "$clip" .mp4 | tr '-' ' '). Full episode on the channel." '{
targets:{accountIds:[$yt,$ig,$fb]}, mediaIds:[$m],
title:($t|.[0:100]), text:$t, when:{publishAt:$w, timezone:"Europe/Kiev"},
perPlatform:{
youtube:{visibility:"public"},
instagram:{contentType:"reel", shareToFeed:true},
facebook:{contentType:"reel"} },
confirm:true }' > clip.json
curl -s -X POST "$API/posts/plan" -H "$AUTH" -H "Content-Type: application/json" -d @clip.json | jq -r .table
curl -s -X POST "$API/posts" -H "$AUTH" -H "Content-Type: application/json" -d @clip.json | jq -r '.posts[].statusLine'
day=$((day + 1))
done

Sending the plan body with confirm: true already in it is harmless: POST /posts/plan ignores the field and creates nothing. The plan still has to be read - a clip over 3 minutes is a plain YouTube video, not a Short, and the plan says so as an info row; a clip that is not 9:16 is marked shows with changes on Instagram and refused for a Facebook Reel.

Terminal window
curl -s "$API/posts?from=2026-09-28T00:00:00%2B03:00&to=2026-10-05T00:00:00%2B03:00&sort=upcoming" -H "$AUTH" | jq -r '.posts[].statusLine'

Six days, sixteen posts. On the Calendar the week reads as one YouTube post on Monday and three short-form posts every day after.

  • Threads too. Add its id to the clip targets and a short overrides.threads.text; TikTok joins when its connector ships.
  • Stagger the networks. Instagram at 12:00, Facebook at 19:00: two requests per clip with the same mediaId - the file is not uploaded twice.
  • Let the network’s timing decide. After a month, Analytics → Best time to post shows the hour with the best engagement per weekday; move when there.