Post Engineer: AI video generator and social scheduler avatar

Post Engineer: AI video generator and social scheduler

Pricing

Pay per usage

Go to Apify Store
Post Engineer: AI video generator and social scheduler

Post Engineer: AI video generator and social scheduler

Turn a hook, body and call to action into a short video with an AI persona (or faceless), then publish it to YouTube, Instagram, LinkedIn, Threads or Bluesky.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Ryan Carlos

Ryan Carlos

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 days ago

Last modified

Categories

Features

Limited permissions

Share

Turn a short script (hook, body, call to action) into a vertical video presented by an AI persona, or a faceless video, and publish it to YouTube, Instagram, LinkedIn, Threads or Bluesky. One run creates one video.

This Actor is a thin client for the Post Engineer API. Generation runs on Post Engineer and is paid with Post Engineer tokens, not Apify compute.

Before you run it

  1. Create an account at post-engineer.com and connect the social accounts you want to post to.
  2. Create an API key at post-engineer.com/api-keys. It starts with pe_live_.
  3. Make sure the account has tokens. A faceless video costs 1 token, a persona video 2 or 3, depending on face quality.

Input

FieldRequiredWhat it does
apiKeyto create a videoYour Post Engineer API key, stored as a secret input. Without it the run is a dry run: it validates the input and returns the request it would send, with nothing generated, published or charged.
titleyesLabel of the scheduled post.
hook, body, ctayesThe script. 60 to 200 words in total. It is validated before any token is spent.
providersyesAny of youtube, instagram, linkedin, bluesky, threads.
personaIdnoAI persona that presents the video. Leave empty for a faceless video.
voiceIdwithout a personaNarration voice, an id from GET /api/persona/voices (prefilled with chatterbox:kokoro_af_heart). With a persona it overrides the persona's voice.
facelessnoNo face on screen. Defaults to true when there is no persona; a video without a persona must be faceless.
facelessMaterialnobroll (stock footage) or svg (animated scenes).
fullLipsyncnoThe persona talks for the whole video instead of only the hook. Needs a persona; not with faceless.
accountsnoAccount ids per provider, e.g. {"youtube": ["<id>"]}. Defaults to the persona's publishing accounts.
modenoasap (default) publishes when the video is ready; scheduled uses schedule.
schedulefor scheduled{"startAt": "2026-12-01T09:00:00Z", "times": ["18:00"], "timezone": "America/Sao_Paulo"}. Slots must be 3 hours to 30 days ahead.
waitForCompletionnoDefault true: keep the run open until the video is generated or fails.
timeoutMinutesnoHow long to wait, 1 to 60 (default 30).
apiUrlnoOnly for self-hosted Post Engineer. Must be https (http only for localhost).

Example

{
"apiKey": "pe_live_...",
"title": "Why short videos win",
"hook": "Most people scroll past your posts in under two seconds.",
"body": "Short videos fix that. ...",
"cta": "Follow for one tip a day.",
"providers": ["youtube"],
"voiceId": "chatterbox:kokoro_af_heart"
}

Output

One dataset item (also saved as the OUTPUT record):

{
"scheduleId": "6f1c...",
"mode": "asap",
"replayed": false,
"warnings": [],
"slots": [
{
"slotId": "a2b9...",
"slotAt": "2026-11-02T18:00:00.000Z",
"title": "Why short videos win",
"taskId": "c41e...",
"status": "generating",
"videoStatus": "complete",
"videos": ["https://post-engineer.com/api/persona/video-download/..."]
}
]
}

videoStatus is one of:

  • complete: the video was generated.
  • failed (with error): generation failed; Post Engineer refunds the tokens.
  • unknown (with error): the engine lost the task and the slot status could not confirm the outcome. Check the post in Post Engineer before re-running, so you do not pay for a second video.
  • timeout: the video was still processing when timeoutMinutes ran out.

It is absent when waitForCompletion is false.

Retries and failures

  • The Apify run id is sent as the idempotency key, so a retried run replays the accepted job instead of charging twice (replayed: true).
  • Invalid input, a rejected script, missing tokens and invalid keys fail the run with the API's message. The API key never appears in logs or output.

Self-hosting

Post Engineer is open source (Apache-2.0): github.com/Ryan-Carloso/post-engineer. Point apiUrl at your own deployment.