feat(instagram): use custom thumbnail as reel cover via cover_url - #1855
giladresisi wants to merge 2 commits into
Conversation
When a single-video reel's media has a thumbnail set, send it as cover_url on the media container so Instagram uses it as the reel cover; media without a thumbnail keep publishing via thumb_offset exactly as before. Stories, carousel items and images are untouched. E2e-tested on a Facebook-Login Instagram channel: reels published with both JPEG and PNG covers, cover confirmed on the profile reels grid (PNG accepted despite Meta docs listing JPEG only). Standalone Instagram-Login shares this postPending, not separately e2e-tested. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
✅ Snyk checks have passed. No issues have been found so far.
💻 Catch issues earlier using the plugins for VS Code, JetBrains IDEs, Visual Studio, and Eclipse. |
integrationSchedulePostTool attachments now accept either a plain URL
string or { path, thumbnail }, with thumbnail forwarded as the media
thumbnail (e.g. Instagram Reel cover_url). The public API already
accepted image[].thumbnail; this brings MCP to parity.
E2e-verified: MCP call with { path, thumbnail } and the equivalent
public-API request both published Reels with the custom cover.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Strix Security ReviewNo security issues found. Updated for Reviewed by Strix |
|
Hi — paying Postiz Cloud customer here. We're scheduling Instagram Reels (standalone IG + share_to_feed) and send a custom cover via Really appreciate this PR. If you can get |
|
Hi, thanks for the detailed report and for offering to test. You're right that Cloud currently publishes Reels with thumb_offset only, so a custom cover passed via image[].thumbnail is not applied yet. This PR adds the cover_url path for exactly that case. We know it has been sitting open for a while, and we'll try our best to speed things up with our PR review process so it can move through staging to production. |
What kind of change does this PR introduce?
Feature.
Why was this change needed?
Instagram Reels published through Postiz always derived their cover from the video itself (
thumb_offsetwith the captured-frame timestamp). Instagram's Content Publishing API also supportscover_urlon REELS media containers, which uses a hosted image as the reel cover in the feed and profile grid. When a reel's media has a thumbnail set, the provider now sends it ascover_url; media without a thumbnail keep publishing viathumb_offsetexactly as before. Stories, carousel items and images are untouched. No schema change — this reuses the existingMedia.thumbnailcolumn that already flows to providers.Second commit: the MCP
integrationSchedulePostToolnow accepts attachments as either a URL string or{ path, thumbnail }and forwardsthumbnailas the media thumbnail, so MCP clients can set the Reel cover too. The public API already acceptedimage[].thumbnail, no change needed there.Docs: gitroomhq/postiz-docs#238, agent docs: gitroomhq/postiz-agent#18 (both to be merged after this PR is deployed).
Other information:
E2e-tested on a Facebook-Login Instagram channel: published reels with both JPEG and PNG cover images and confirmed the cover renders on the profile reels grid (PNG is accepted in practice even though Meta's docs list JPEG only). The standalone Instagram-Login provider delegates to the same
postPending, so it is covered by the same code path (not separately e2e-tested for lack of a connected standalone channel).MCP + public API: published one Reel via
integrationSchedulePostToolwith{ path, thumbnail }and one viaPOST /public/v1/postswithimage[].thumbnail; both covers rendered correctly on Instagram.Checklist:
🤖 Generated with Claude Code