Skip to content
cccskills
FreePublished on GitHubEnglish overview

mobile-demo-film

Edit real mobile app recordings into silent demo videos with phone frames, title cards, cutaways, and an end card. Adjust the format, timing, and layout for feature demonstrations or short launch clips.

OriginalShow the original description

Turn mobile screen recordings into a configurable demo video with phone footage, title cards, cutaways, and an end card. Use when asked to edit a mobile feature demo or launch clip. Use mobile-demo-record to capture real app footage first.

ParadevAI/Paradev15,720 stars(GitHub 15,720 + cccskills 0)

Run score Not tested

See how to install

Good for

  • Creating a short mobile feature demo
  • Preparing a video for an app launch
  • Combining phone footage with desktop cutaways
  • Exporting portrait, landscape, or square clips

Overview

What it does

Creates silent feature videos from real mobile app screen recordings. It can combine footage inside a phone frame with explanatory title cards, desktop cutaways, and an end card. A JSON composition file sets the clips, playback speed, backdrop color, fades, and output dimensions. It supports portrait, landscape, and square formats, and can create a contact sheet of frames for review.

When it helps

Use it to show an app interaction and its result in a short clip, or to prepare a video for a new feature launch. It can shorten waiting time while keeping actions and text at a readable, natural pace.

Example requests

  • “Turn this screen recording into a 30-second portrait demo showing the action and result.”
  • “Add a desktop cutaway between the phone clips and show the logo at the end.”

Notes

Python 3.10+, Pillow 10.1+, and ffmpeg with ffprobe and libx264 are required. Audio is removed, so use another editing workflow if narration or app sounds are needed. Recording with mobile-demo-record requires macOS, but editing existing footage does not. Existing output files are overwritten.

This overview was written by AI (OpenAI Codex) from the public SKILL.md. Check the original below for the exact behavior.

Document check

AI checked the SKILL.md for operations that need care and for setup requirements. The score comes only from actually running the skill (hands-on test).

SafetyAre sending data, deleting files, and running commands disclosed?
BPartly lackingIt states that outputs are overwritten and audio is removed, but gives no overwrite confirmation step.
Easy setupDoes it need few tools or API keys, and are they documented?
AGoodIt specifies Python, Pillow, and ffmpeg requirements and gives a Pillow install example.

Not counted in the score. Rated by AI (OpenAI Codex) as of Oct 29, 2026. Treat it as a guide and read the original before installing.

Disagree? Request a re-evaluation

Tell us which point is wrong and why. No login needed. We will check it against the SKILL.md, redo the evaluation, and show the result here.

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

Files included (3)

  • SKILL.md7.2 KB
  • scripts/film.py19.9 KB
  • scripts/test_film.py5.0 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

Mobile demo film

Use this skill to edit a new demo from real app recordings. The bundled renderer produces silent video with configurable dimensions, frame rate, framing, and fades. Defaults are 1080x1920 at 30fps, with a phone frame on a warm paper backdrop. A useful default is one feature in 20 to 40 seconds; adapt the story and pacing to the request.

Prerequisites

Use Python 3.10+, Pillow 10.1+, and ffmpeg (including ffprobe and libx264). Recording with mobile-demo-record needs macOS; editing existing footage does not. Font discovery tries macOS system fonts, then Linux DejaVu fonts, then Pillow’s fallback. Specify font files for consistent typography across machines. Install Pillow in a scratch virtual environment:

python3 -m venv <scratch>/film-venv
<scratch>/film-venv/bin/pip install "Pillow>=10.1"

Use that environment's Python for the commands below. Commands assume the repo root as working directory. Output directories are created automatically. Existing outputs are overwritten; source assets and the composition spec cannot be used as the film output.

Workflow

  1. Plan one story. Write a short table of on-screen actions and durations. Start with the user's action, show the app responding, and end on the visible result. A tour can start with the finished artifact instead. Verify the feature works before filming it.
  2. Capture real footage with mobile-demo-record. Use demo data and a separate take for each beat. If the story needs an agent doing work, use a working host and agent. Capture desktop cutaways with cdp-verification when needed.
  3. Normalize before choosing cuts. Simulator recordings have variable frame rates: python3 .agents/skills/mobile-demo-film/scripts/film.py normalize raw/01.mov cfr/01.mp4. Choose start/end timestamps from this constant-rate copy. Add --fps 24 for a 24fps project (the default is 30).
  4. Compose using a JSON spec beside the recordings: python3 .agents/skills/mobile-demo-film/scripts/film.py compose <scratch>/film.json.
  5. Review a contact sheet and play the entire film: python3 .agents/skills/mobile-demo-film/scripts/film.py sheet <scratch>/film.mp4 <scratch>/sheet.jpg. Add --frames 12 --height 480 to customize sampling and thumbnail height. By default, the sheet samples eight frames; inspect transitions and typing in playback too. Check for clipped text, unreadable UI, private information, spinners, and unintended clock changes.
  6. Deliver the film and identify the build, environment, staged data, and omitted steps. Draft accompanying post copy only if requested; publishing needs user authorization.

Keep typing and reading at a natural pace. Trim or speed up waiting, and make time jumps clear. Use title cards to explain missing context rather than implying an unrecorded action happened in the app. Framing, masks, and the simulated Dynamic Island are presentation layers; do not fabricate app state inside the recording.

Composition spec

This example combines phone footage, a desktop cutaway, a result, and an end card. Replace its paths, cut points, and text for the feature being demonstrated.

{
  "output": "film.mp4",
  "backdrop": "#F2F0EB",
  "segments": [
    { "type": "phone", "src": "cfr/01.mp4", "start": 1, "end": 7, "label": "Start on your phone" },
    { "type": "card", "eyebrow": "Meanwhile", "title": "The agent works on your Mac.",
      "image": "shots/desktop.png", "duration": 4 },
    { "type": "phone", "src": "cfr/02.mp4", "start": 0, "end": 10 },
    { "type": "end", "wordmark": "Paradev", "caption": "Review the result anywhere", "duration": 2.2 }
  ]
}

Media, output, and optional titleFont/sansFont paths resolve relative to the spec file; absolute paths also work. Top-level backdrop, bezel, ink, and muted accept #RRGGBB.

Output and framing

Add a render object to the spec. Existing specs without it keep the portrait defaults. For a landscape demo:

"render": {
  "width": 1920,
  "height": 1080,
  "fps": 24,
  "crf": 18,
  "fade": 0.2,
  "phone_width": 0.45,
  "phone_height": 0.8,
  "bezel_width": 0.012,
  "corner_radius": 0.1
}

For a square clip, use "width": 1080, "height": 1080. Cards and typography scale with the canvas; the centered phone fits both width and height limits while preserving source aspect ratio. Use raw for unframed desktop footage.

Render optionMeaning and default
width, heightCanvas pixels; even integers at least 64. Defaults: 1080, 1920
fpsInteger 1–120; default 30
crfFinal H.264 quality, 0–51; lower means higher quality/larger files. Default 18
fadeFade duration in seconds; 0 disables fades. Default 0.35; capped at half each framed/still segment’s duration; raw clips have no fade
phone_width, phone_heightMaximum screen width/height as fractions of canvas dimensions, greater than 0 and at most 0.95. Defaults: 0.615, 0.82
bezel_widthBorder thickness as a fraction of the smaller canvas dimension, 0–0.25. Default 0.015
corner_radiusScreen corner radius as a fraction of screen width, 0–0.25. Default 0.137

Segments

SegmentFields
phonesrc, optional start/end in seconds, speed (default 1), label, island (false disables the overlay)
rawsrc, optional start/end, speed; unframed footage fitted to the output canvas with black padding
cardtitle, optional eyebrow, caption, image, footer, duration (default 4 seconds)
endwordmark or transparent PNG logo, optional caption, duration (default 2.2 seconds)

Keep cut points within the source duration and speed positive. Every segment must last at least one output frame. The renderer validates all segments and source paths before encoding. Card titles wrap; captions, labels, and footers should be short. The renderer removes audio, so use another editing workflow if narration or app audio is needed.

Store raw takes, specs, and finished films in a scratch directory. Share the inputs and spec when teammates need to re-edit a particular demo; they are not required to create a new one.

Reusing and checking the renderer

Run film.py --help or a subcommand with --help for CLI options. The Python module can also be imported: normalize(src, dst, fps=30), compose(spec_path) (returns the output Path), and sheet(src, dst, frames=8, height=900) work without invoking the CLI. RenderSettings holds layout calculations without mutable global canvas settings.

After editing the renderer, run its focused tests (requires ffmpeg and Pillow):

python3 -B -m unittest discover -s .agents/skills/mobile-demo-film/scripts -p 'test_*.py'

These render small portrait, landscape, and square compositions, check output dimensions, frame rate and duration, and exercise invalid specs. Also inspect a contact sheet at the intended delivery size; automated checks do not judge readability or composition.

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

10x

FreeSummary

Review how you use Superset and identify unused features that fit your workflow. Get a short list of suggestions, learn about each option, and set up selected features such as scheduled agents, parallel workspaces, or shared tasks.

  • Find unused Superset features worth exploring
  • Set up scheduled agent tasks
  • Start parallel work in separate workspaces
ParadevAI/Paradev15.7KUpdated Oct 29, 2026

automate

FreeSummary

Set up recurring tasks in Superset with an agent prompt, a schedule or event trigger, and a chosen execution workspace. After explicit confirmation, create the automation, check its saved settings, and review a real first run.

  • Scheduling a daily or weekly agent task
  • Starting agent work when a GitHub pull request opens
  • Triggering tasks from selected Slack reactions
ParadevAI/Paradev15.7KUpdated Oct 29, 2026

browser

FreeSummary

Browse pages, click controls, fill fields, and inspect screenshots or console messages through Superset's browser pane. Use it to preview a running web app, check interface behavior, and work through browser tasks in a visible session.

  • Preview a locally running web app
  • Capture screenshots of a page
  • Inspect console errors
ParadevAI/Paradev15.7KUpdated Oct 29, 2026

Build Stripe payments, subscriptions, and invoicing using verified documentation and API parameter definitions. The skill guides product selection, sandbox testing, and webhook handling, where server notifications determine payment and subscription state.

  • Choose Stripe products for payments or recurring billing
  • Implement Checkout or invoice flows
  • Investigate Stripe code that compiles but behaves incorrectly
ParadevAI/Paradev15.7KUpdated Oct 29, 2026

cdp-verification

FreeSummary

Verify a UI change or reproduce a bug in the running desktop app using the Chrome DevTools Protocol (CDP), a browser debugging interface. Follow the real user journey and compare screenshots with measurements such as route, scroll position, and persisted state.

  • Reproducing a UI bug in the running app
  • Verifying a UI change end to end
  • Checking behavior after a route or workspace switch
ParadevAI/Paradev15.7KUpdated Oct 29, 2026

ci-triage

FreeSummary

Diagnose failed GitHub Actions runs by finding the first meaningful error, separating code problems from infrastructure issues and intermittent failures, and comparing the base branch. Get a focused report explaining the PR’s involvement and recommended next steps.

  • Investigating failed PR checks
  • Separating intermittent test failures from code defects
  • Checking whether the base branch already fails
ParadevAI/Paradev15.7KUpdated Oct 29, 2026

See all skills by ParadevAI

Report a problem with this skill