Skip to content

feat(instagram): use custom thumbnail as reel cover via cover_url - #1855

Open
giladresisi wants to merge 2 commits into
mainfrom
feat/ig-reel-cover-image
Open

giladresisi wants to merge 2 commits into
mainfrom
feat/ig-reel-cover-image

Conversation

@giladresisi

@giladresisi giladresisi commented Aug 7, 2026 •

Copy link
Copy Markdown
Collaborator

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_offset with the captured-frame timestamp). Instagram's Content Publishing API also supports cover_url on 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 as cover_url; media without a thumbnail keep publishing via thumb_offset exactly as before. Stories, carousel items and images are untouched. No schema change — this reuses the existing Media.thumbnail column that already flows to providers.

Second commit: the MCP integrationSchedulePostTool now accepts attachments as either a URL string or { path, thumbnail } and forwards thumbnail as the media thumbnail, so MCP clients can set the Reel cover too. The public API already accepted image[].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 integrationSchedulePostTool with { path, thumbnail } and one via POST /public/v1/posts with image[].thumbnail; both covers rendered correctly on Instagram.

Checklist:

  • I have read the CONTRIBUTING guide.
  • I have signed the Contributor License Agreement (CLA).
  • I confirm I have not used AI to submit this PR or generate code for it.
  • I checked that there were no similar issues or PRs already open for this.
  • This PR fixes just ONE issue

🤖 Generated with Claude Code

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>
@postiz-contribution postiz-contribution Bot added the contribution:approved Approved contributor label Aug 7, 2026
@postiz-agent

postiz-agent Bot commented Aug 7, 2026 •

Copy link
Copy Markdown

✅ Snyk checks have passed. No issues have been found so far.

Status Scan Engine Critical High Medium Low Total (0)
✅ Open Source Security 0 0 0 0 0 issues
✅ Licenses 0 0 0 0 0 issues
✅ Code Security 0 0 0 0 0 issues

💻 Catch issues earlier using the plugins for VS Code, JetBrains IDEs, Visual Studio, and Eclipse.

@postiz-contribution
postiz-contribution Bot changed the base branch from main to staging August 17, 2026 05:49
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

strix-security Bot commented Aug 19, 2026 •

Copy link
Copy Markdown

Strix Security Review

No security issues found.

Updated for e5f6fff.


Reviewed by Strix
Re-run review · Configure security review settings

@JayChrawnna

Copy link
Copy Markdown

Hi — paying Postiz Cloud customer here. We're scheduling Instagram Reels (standalone IG + share_to_feed) and send a custom cover via image[].thumbnail / Meta cover_url, but Cloud still seems to publish with thumb_offset only, so covers fail silently and we have to set them by hand in the IG app.

Really appreciate this PR. If you can get cover_url into Cloud prod (via staging → prod), it'd unblock us. Happy to test once it's live.

@giladresisi

Copy link
Copy Markdown
Collaborator Author

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.

@postiz-contribution
postiz-contribution Bot changed the base branch from staging to main September 15, 2026 08:18

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants