Candidate cover frames of a video, best first: each frame's image (media_id, and url for the person to see it), its time (offset_ms), a score from 0 to 100 and plain notes. Scored on sharpness, exposure (not a black or blown-out frame), contrast, colour, not mid-cut or fade, and calm space for a title. update_post (or create_post) uses one as cover_media_id = its media_id with thumb_offset_ms = its offset_ms; the frame is made again at full size for the cover (the images here are 640 px previews). Where covers go: an image (cover_media_id) on Instagram, TikTok, Pinterest, YouTube, Facebook, LinkedIn; a frame time (thumb_offset_ms) on Instagram, TikTok and Pinterest only. YouTube takes the image on long videos only (not Shorts). X, Threads and Bluesky ignore both. Stories take none. The first call on a video makes its frames (it can take a few seconds); a video Yaybird cannot read frames from (100 MB or more, over 10 minutes, or an unusual format) gets them once a person opens the app's cover picker, and until then sample_times_ms lists times worth trying as thumb_offset_ms.