agentleFS
PicsArtPicsArt/gen-ai-skills/skills/ai-presenter/SKILL.md

ai-presenter

Skill6 starsChanged 19 days agoMITView on GitHub

Put a generated presenter on screen and keep them honest - lip-sync (the face on screen says the audio that plays), one take on the whole step narration, the head bubble and the head-and-screen split, the inputs for the avatar take (the voice is the voice-over-generation skill's), and the presenter's portrait - how to write it and how to check it before a take. Use when a video needs an on-camera presenter made from a portrait photo and a voice.

The file

We split this skill into the rules it gives an agent

5 rules. About 0 are common, 2 are distinctive, and 3 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈2

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 3

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    If the presenter appears during the steps, generate one kling-avatar take on the whole step narration (one voice line holding every step …

    line 21
  2. Distinctive:

    If the budget covers only the hook take, the presenter does not appear in the steps.

    line 27
  3. Very specific:

    Portrait: Every take inherits its portrait's flaws, so the portrait passes the check in references/portrait.md before any take is …

    line 45
  4. Very specific:

    Verify every presenter layout with picsart_scene_contact_sheet before review: the face fully inside the bubble or band, not cut at the …

    line 77
  5. Distinctive:

    Look at every take before it goes into a scene, with frames from its first second, its middle and its last second, and generate again on …

    line 80

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Talking head

A promo where the presenter disappears after the hook loses the human thread. Keep them present in some of the steps — as the top band of a head-and-screen split, or as a round bubble over the panel.

Read thisBefore you
references/portrait.mdwrite the presenter's portrait, or start a take from a portrait

Lip-sync

The face on screen must be saying the audio that is playing. A talking head over a voice line it did not speak is visibly out of sync and reads as fake. So:

  • If the presenter appears during the steps, generate one kling-avatar take on the whole step narration (one voice line holding every step line, the same voice as the hook), and use that take for every on-screen step, trimmed to each step's sentence (the transcript's word times give the ranges; see the spoken-captions skill). The take's own audio is the step voice-over: unmute the presenter layer and add no separate audio layer for that step. Only one layer plays it at a time.
  • If the budget covers only the hook take, the presenter does not appear in the steps. Never loop the hook take or freeze a frame as a stand-in.
  • Price the longer take alongside the hook take. Whether the presenter appears in the steps is the user's choice, and the use case asks it.

The voice and the take

  • Voice. The voice lines are made as the voice-over-generation skill says. When the presenter appears in the steps, the step lines are one line instead (above).
  • Presenter. An on-camera line is a kling-avatar take through picsart_generate: one face portrait (imageUrls) plus that line's voice as the speech audio — the catalog names it audioUrl, singular and required. picsart_generate has no field of that name: it goes in extra, with every other setting picsart_model_params({ model: "kling-avatar" }) lists, under the exact names it gives rather than names from memory. There is no duration parameter: the clip runs as long as its audio, so the line's length IS the clip's length. Quote each take with picsart_preflight. Before its voice line and portrait exist it may not price; then quote it as a paid call whose amount is not known in advance (picsart-video-rules, SPEND), and never generate its inputs to get a number. Keep on-camera lines few: takes are slow and paid.
  • Portrait. Every take inherits its portrait's flaws, so the portrait passes the check in references/portrait.md before any take is generated, whether it was generated or uploaded.

Head bubble

Head bubble. The presenter clip, fit: "contain", framed on the face with the screen-recording-layouts skill's panel formula (scale up so the face fills the circle; cover would crop the face away when the clip is landscape and the face is off its centre), masked with a rect whose roundness is half its size (a circle; ≈ 300–340 px at 1080 wide), with a 4–6 px rim shape behind it. Place it in a panel corner that the step's focus point never visits, outside the platform's UI zones (the right-hand action rail and the bottom caption area on TikTok and Reels) and clear of the caption band. If the focus moves into its corner, move the bubble to the opposite corner at a cut, never during a zoom. Enter it with a 0.25 s fade and a scale from 0.85 (the rim is a shape, so fade it with opacity keyframes; the fade presets do not apply to a shape layer); it holds still while the recording zooms, so the eye has one fixed point.

While masks fail, nest the bubble. Render one frame of the masked bubble before relying on it, as the screen-recording-layouts skill says of masks. If that frame fails and the same frame without the mask renders, clip the bubble by nesting as the screen-recording-layouts skill clips a panel, with a scene_ref to a nested scene the bubble's size, framed on the face. Don't wait for the error to name the mask: on Dev on 2026-10-01 the masked bubble failed with a generic error about downloading asset URLs, and the nested bubble rendered and exported. The nested bubble is square (screen-recording-layouts), so give its rim a roundness no more than three times the rim's width, so the square's corners stay inside the rim.

Head and screen

Head and screen split. The presenter band keeps the face in its upper half, eyes near a third of the band's height; the panel below frames the result. It is the best handoff out of the hook: cut from the full-frame hook to the split on the next line, and the presenter carries the viewer into the product.

Check

Verify every presenter layout with picsart_scene_contact_sheet before review: the face fully inside the bubble or band, not cut at the chin, and nothing covering the focus point at the reveal.

Look at every take before it goes into a scene, with frames from its first second, its middle and its last second, and generate again on any of these:

  • the mouth moves while the line is silent, or stays still while it speaks;
  • a second mouth, or one that slides off the face;
  • a blurred or smeared mouth, or teeth that melt into each other;
  • a face that drifts from the portrait's, or eyes that never blink;
  • a seam at the jaw or the neck;
  • the last word clipped: the take ends before its voice line does.

A generated presenter is AI-made. Say so when you deliver, and tell the user to switch on the platform's AI-content label when they post the video.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.