---
name: postmately-video
description: Make and edit short vertical videos for a business on this computer (cut talking-head takes, remove pauses, slips and false starts, burn word-timed captions; make a video from scratch in the formats that work: a hook and an app demo, a hook and a wall of text from Postmately's free hook gallery, a promo on the beat, a founder's takes on the beat; 9:16 for TikTok, Reels and Shorts) and publish them everywhere through Postmately. Use when the user asks to edit, cut, montage or make a video, a Reel, a Short or a TikTok, to add captions or subtitles to a video, or to post a video.
---

# Postmately video

You edit the video here, on the user's machine, where you can see every file and every frame. Postmately
gives you the business, the media library and publishing to every network in one call. The user's own
voice and face sell better than any stock: cut their footage first, generate only when there is none.
Work done here costs the user no Postmately credits; only `make_video` and its kin on Postmately's machine do.

## Setup

The user creates a key in Postmately under Settings > API and keeps it in `POSTMATELY_API_KEY`. Never
print the key or write it into files. Connect the MCP server `https://api.postmately.com/mcp` with the
header `Authorization: Bearer $POSTMATELY_API_KEY` (Claude Code:
`claude mcp add --scope user --transport http postmately https://api.postmately.com/mcp --header "Authorization: Bearer $POSTMATELY_API_KEY"`).
Without MCP use the REST API: https://api.postmately.com/openapi.json. For posting rules per network see the
`postmately` skill: https://postmately.com/skills/postmately/SKILL.md.

Local tools: `ffmpeg`, `python3` with `pip install faster-whisper pillow`. Node only for Remotion.

## Pick the way

1. **Cut their footage here** (talking to the camera, a lesson, a review, a product in hand): the recipe below.
2. **Make one here from scratch** (no footage, or screens and photos only): the formats below, built in Remotion
   (`npx create-video@latest`) at 1080x1920, 30 fps, then exported as in step 10 of the cut.
3. **Let Postmately make it** when the user has nothing to film or no local tools: `make_video` (a branded
   video from a topic, 60 credits), `make_video_from_my_videos` (their clips, cut on Postmately's machine),
   `start_phone_shoot` (a shoot sheet they film line by line on the phone by a link). Check `get_credits`
   first, poll `get_video` until `ready`.

## Make one here

1. **Facts first.** The topic from the user or `list_plan_items`; facts, prices and numbers only from their site
   or what they said. Pictures: their own media first (`list_media`), screenshots of their site or app, stock only
   if they agree.
2. **Pick one format** and keep its look for the whole video:
   - **Hook and app demo** (an app or a site, the most viral TikTok promo): a person's silent reaction from the hook
     gallery (below) with one line of text, then the product's own screens on the beat. Recipe below.
   - **Hook and wall of text** (a story, a confession, a list people read to the end): a face from the hook gallery
     with the whole text on top at once. Recipe below.
   - **Promo on the beat** (a product, an app, a service): a hook of two short lines on a dark screen until the
     track's drop; then per scene a small eyebrow, a title of two lines (at most 18 characters each) and one card
     of their real data (their site in a browser, a checklist, their prices, one big figure, a message on a lock
     screen); an end card with the logo, the name, a tagline and the site. Every cut on a beat.
   - **The founder's takes on the beat** (their silent clips and a screen recording): the best 2 to 3 seconds of
     each take, the strongest face first, the screen recording right after it on the drop; their words as
     TikTok's own text (TikTok Sans, black on white rounded plates, upper middle); no narrator, no end card.
   - **A story over a face** (a situation people live through): one story with a twist, 60 to 100 words, one
     centered paragraph in the lower half under a person looking into the camera, the face never covered; the
     brand at most in one closing sentence, never a made-up customer or review.
3. **Layout.** Keep text inside x 86 to 994 and y 230 to 1500 (the network's buttons and caption cover the rest),
   one idea per scene, nothing on a face, cards big enough to read on a phone.
4. **Check.** Look at one frame per scene at full size: text inside the safe area, nothing cut or overlapping,
   every number from the facts. Then export as in step 10 below and publish.

## Hook gallery

Postmately keeps a free gallery of 1080x1920 hook clips: people reacting (shocked, puzzled, reading a phone, on a
treadmill), free to use in the user's videos. No key needed:

```
curl -s "https://api.postmately.com/v1/clips?fits=hook-demo"   # or fits=wall, speaking-hook, insert; none for all
```

(over MCP: `list_clips`; to look at them: https://postmately.com/en/hooks/). Every clip has `about` (what is in the frame),
`mood`, `setting`, `phone` (a phone in hand), `lines` (hooks it suits), `speech` (a clip that says its own line),
`seconds`, `url` and `posterUrl`. **Pick by the meta, never at random:** the place and mood of the topic (a gym for
fitness, a car or home for everyday life), shock or surprise for a surprising fact, a phone in hand right before an
app's screens. Download the clip (`curl -sO <url>`) and look at its poster before you use it.

### Hook and app demo

1. **The hook clip:** `fits=hook-demo`. Keep its strongest 2 to 3 seconds, the peak of the reaction.
2. **One line on it,** TikTok-style, at most 8 words, casual, the viewer's own words: «wdym {app} does that by
   itself???», «POV: you stopped doing X by hand», «how did nobody tell me about this». In the video's language;
   the clip's `lines` are a guide, not a must. TikTok Sans (or a bold sans), black on white rounded plates, on free
   background, never over the eyes or the mouth: look at the poster (and a frame at the peak), put it above the head
   when there is room, else under the chin (about y 1050 to 1400 of 1920). Most selfie clips need it under the chin.
3. **The demo:** 3 to 4 of the product's own screens (screen recordings first, screenshots held 1.5 to 2.5 s), full
   width 9:16, no text over them; the last one may name the product («app: Name»). Never someone else's app.
4. **Cut on the beat,** 8 to 15 seconds in all, no narrator, no end card. Music only with a license the user has,
   or none and the user adds a trending sound in the TikTok app.

### Hook and wall of text

1. **The face:** `fits=wall`, the mood of the story (calm for a routine, shocked for a twist). Loop or slow it to the
   reading time.
2. **The text:** the whole text at once, the first line is the hook. Either a list (a confession or a twist, then at
   most 9 short lines, 80 words) or one short story with a twist (up to 10 sentences, 110 words). Their facts only,
   no made-up customer or review; the brand at most in the last sentence.
3. **Layout:** white bold text with a dark outline or on dark plates, one centered block in the lower half
   (y 1000 to 1500), the face uncovered.
4. **Length:** the time to read it twice, about 3 words a second, 8 to 30 seconds.

Export both as in step 10 below. Or let Postmately make them: the templates «Hook and app demo» and «Hook and wall of
text» (`list_video_templates`, then `make_video` with the slug) build the same videos from this gallery.

## Cut their footage

1. **Look first.** `ffprobe` every take: length, size, rotation. Phones store portrait video sideways with a
   rotation flag; ffmpeg applies it, so read width and height as played. Ask what the video is about if the
   footage does not say it.
2. **Hear every word.** faster-whisper with `word_timestamps=True, vad_filter=True` and an `initial_prompt`
   with the brand name, the topic and any line they were asked to say, so names come out spelled right.
   `small` is fast, `large-v3-turbo` is far better for Russian and other non-English speech.
3. **Phrases.** Split the words at a pause over 0.45 s or a sentence end. A run over about 9 words or 4.5 s
   splits in two in the middle, at a comma if there is one, else at the longest pause. Never leave one word
   alone on a caption.
4. **Take out the slips.**
   - hesitation sounds at the start of a phrase: э, ээ, эм, м, uh, um, er (the words «а», «и», «в» stay);
   - phrases of filler only: ну, вот, короче, типа, so, like, okay;
   - false starts: when one of the next two phrases begins with the same first words, drop the earlier one
     and keep the later, fuller try («сегодня расскажу, как... сегодня расскажу, как перестать бояться»);
   - repeats and thinking aloud («так, что ещё»), off-topic bits.
5. **Length.** 20 to 60 seconds. Open with the phrase that stops the scroll (a pain, a surprise, a promise),
   then the point, end with the result or the call to action. A long set keeps its last phrase, it is usually
   the call.
6. **Cut points.** Start 0.1 s before the first word. Whisper ends words early: keep the last word's tail while
   the sound stays above the room's noise (up to 0.4 s), never into the next word. 15 ms audio fades on every
   cut, so nothing clicks. Phrases that follow each other in one take must not overlap (no word heard twice).
7. **Picture.** 1080x1920, 30 fps. Horizontal footage crops to 9:16 around the face (find it on a few frames;
   the center is a guess, the face often is not there). Hard cuts. Where words were cut out of one take, move
   100% to 108% zoom and back on the next jump, so the jump reads as an edit; phrases that follow each other
   play on without a zoom change.
8. **Captions.** Exactly what was said, 5 to 9 words, at most 2 lines, white bold text on a dark rounded box,
   centered, its bottom about 1450 px from the top of 1920 (above the network's caption and below the face,
   clear of the buttons on the right: keep x within 60 to 1020). Words light up as spoken when the tool can.
   - if `ffmpeg -filters` lists `subtitles`: an ASS file, burned with `-vf subtitles=captions.ass`;
   - else (many builds have no libass): draw each phrase's caption as a transparent 1080 px wide PNG with
     Pillow and overlay them in one pass:
     `[0:v][1:v]overlay=0:1120:enable='between(t,0.000,2.040)'[v0];[v0][2:v]overlay=0:1120:enable='between(t,2.040,4.790)'[v1]...`
   - or do the whole edit in Remotion with `@remotion/captions`.
9. **Sound.** One even voice across takes filmed apart:
   `highpass=f=70,acompressor=threshold=-20dB:ratio=3:attack=5:release=120,loudnorm=I=-14:TP=-1.5:LRA=11`.
   Music only with a license the user has, about 0.2 under the voice.
10. **Export.** `-c:v libx264 -pix_fmt yuv420p -r 30 -c:a aac -ar 48000 -b:a 192k -movflags +faststart`.
    TikTok refuses variable frame rate and yuvj420p (Remotion's default output): re-encode a Remotion render
    with these flags.
11. **Check before upload.** Transcribe the result again and compare it word by word with the captions: no
    word cut, none heard twice. Look at one frame per phrase: the face in the frame, the caption readable.
    Show the user the file and say what was cut out.

## Publish

1. Upload the file: `curl -s https://api.postmately.com/v1/media -H "Authorization: Bearer $POSTMATELY_API_KEY" -F "file=@final.mp4;type=video/mp4"`
   returns the media `id` (a public link goes through `import_media` instead).
2. `list_channels`, then `validate_post` with the text, the channels and `mediaIds: [id]`.
3. `create_post` with `"when": "draft"` unless the user said to publish or gave a time. A short caption and 3 to 5
   hashtags per network; YouTube takes a title (up to 100 characters); TikTok goes to the creator's drafts with
   `settings: { "postMode": "draft" }`.
4. Tell the user where it waits (Postmately, Posts) and, after publishing, check `get_post` for each network's
   status and link.

## Rules

- Their footage, their voice, their claims: do not add facts, prices or promises they did not say.
- Publishing is public and cannot be undone: drafts by default.
- Keep the takes as they are; write the cut into a new file.
