{"id":9699,"plugin_id":"plugin_asdk_app_6a7074e91c008191942479b885fb0d9b","kind":"skill","collection_source":null,"comparison_source":null,"observed_at":"2026-09-30T22:55:28.979Z","digest":"6d60d7bf5f07b5db7fc27a4c511c0fec3df5feb89c985d572015ff5b6ccf86b1","against":null,"payload":{"name":"publora-media","description":"Attach images and video to a Publora post — by public URL or by uploading a local file — and fix media problems that block scheduling. Use when a post needs a picture or clip, when Instagram, TikTok or YouTube refuse a text-only post, or when media errors stop a post from being scheduled.","included_files":[],"skill_md_contents":"---\nname: publora-media\ndescription: >\n  Attach images and video to a Publora post — by public URL or by uploading a\n  local file — and fix media problems that block scheduling. Use when a post\n  needs a picture or clip, when Instagram, TikTok or YouTube refuse a text-only\n  post, or when media errors stop a post from being scheduled.\n---\n\n# Media in Publora\n\nTwo ways in, and one of them is much shorter.\n\n## By URL, when the file is already on the web\n\nPass `mediaUrls` to `create_post` or `update_post`. Publora downloads the files\nserver-side, so nothing is uploaded from the conversation.\n\n```\ncreate_post\n  platforms: [\"<platformId>\"]\n  content: \"<caption>\"\n  mediaUrls: [\"https://example.com/image.png\"]\n  scheduledTime: \"2026-08-12T09:00:00Z\"\n```\n\nRequirements that actually bite:\n\n- **Direct file URLs only.** A Google Drive or Dropbox share page is a web page,\n  not a file, and the download fails.\n- Images: jpeg, png, gif, webp, tiff, avif, up to 25 MB.\n- Videos: mp4, mov, webm, up to 150 MB.\n- Up to 10 files per post.\n\nIf a URL cannot be fetched, the whole call fails and the response names the\nfile and the HTTP status behind it. Report that to the user rather than\nretrying the same URL — an expired or private link will not start working.\n\n## By upload, when the file is local\n\nThree steps per file, in order:\n\n1. `get_upload_url` with a **unique** file name → returns a presigned URL and a\n   `mediaId`. Reusing a name returns the same slot instead of adding a new one,\n   which is how several files silently collapse into one.\n2. `PUT` the bytes to that URL.\n3. `complete_media` for that `mediaId` — Publora inspects the bytes and marks\n   the file ready.\n\nCreate the post as a draft first (no `scheduledTime`), attach the media, then\n`update_post` with `status: \"scheduled\"` and the time. Scheduling before the\nmedia is ready fails validation.\n\n## Networks that require media\n\nInstagram, TikTok and YouTube cannot take a text-only post. If the user wants\none of those without a file, say so and offer either to attach something or to\ndrop that network — do not schedule and hope.\n\n## Covers and network options\n\n`platformSettings` carries the extras: an Instagram Reels cover image, a\nYouTube title, tags and privacy, TikTok viewer setting. A cover URL follows the\nsame rule as any media URL — public, direct, https.\n\n## When media blocks scheduling\n\nTwo errors show up in practice:\n\n- **Too many media slots, or a slot that was never uploaded.** Call `get_post`\n  and read its `media` array: each entry carries a status. Remove the offending\n  file with `delete_media`.\n- **A reference to a file that no longer exists.** `prune_media_reference`\n  clears a dangling reference that `delete_media` cannot, because the underlying\n  record is already gone.\n\nBoth are destructive and cannot be undone. Name the exact file you are about to\nremove, and let the user confirm before you remove it.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}