Token导航 LogoToken导航TokenDH.com
研究检索只读github未标认证来源可访问许可证需确认审计提醒

app-demo-agent应用程序演示 Agent

Agent Skill

app-demo-agent 用于查找、检索和筛选相关信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要根据关键词、任务场景或来源线索快速定位候选结果时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

总安装

198

周安装

8

GitHub Stars

10

下载量

62
CodexClaudeCursorGemini CLI

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

2

许可证

unknown

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:app-demo-agent(应用程序演示 Agent)
来源仓库:https://github.com/michaelboeding/skills
仓库路径:skills/app-demo-agent
安装命令:
npx skills add https://github.com/michaelboeding/skills --skill app-demo-agent
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/michaelboeding/skills --skill app-demo-agent

简介

app-demo-agent 用于查找、检索和筛选相关信息。

  • 适合在 Codex、Claude、Cursor、Gemini CLI 中根据关键词或任务场景快速定位候选结果。
  • 通过 npx skills add 命令从指定 GitHub 仓库安装,需结合原始 README 核验具体用法。
  • 安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。
  • 当前功能聚焦于屏幕录制转演示视频,涉及多工具协同处理音视频内容。

SKILL.md

App Demo Producer

Turn raw screen recordings into polished app demo videos with AI-generated voiceover, device frames, and background music.

This is an orchestrator skill that combines:

  • Screen recording analysis (FFmpeg frame extraction + Claude vision)
  • Voiceover script generation (Claude)
  • Device framing (device-framer)
  • Voice synthesis (Gemini TTS / OpenAI TTS / ElevenLabs)
  • Background music (Lyria / Suno / Udio)
  • Final assembly (FFmpeg via media-utils)

Workflow

Step 1: Gather Requirements (REQUIRED)

⚠️ DO NOT skip this step. DO NOT start processing until you have ALL answers.

Use interactive questioning — ask ONE question at a time, wait for the response, then ask the next.

Question Flow

⚠️ Use the AskUserQuestion tool for each question below.

Q1: Screen Recording

"I'll turn that into a polished demo! First — where's the screen recording? *(provide the file path, e.g., ~/Desktop/recording.mp4)*"

*Wait for response. Verify the file exists.*

Q2: What does the app do?

"Give me a quick overview of what this app does and what the recording shows. *(e.g., 'It's a task management app. The recording shows creating a task, setting a due date, and marking it complete.')*"

*Wait for response. This context dramatically improves the voiceover script.*

Q3: Device Frame

"Should I wrap it in a device frame? - Yes — iPhone 16 Pro (default) - Yes, specific device — *(I'll show you options)* - No — Keep as-is"

*Wait for response. If they want a specific device, run --list-devices and let them pick.*

Q3b: Device Color *(if device frame selected)*

"What color for the [device name]? *(list the available colors for the selected device)*"

*Wait for response. Show the actual color options from the device registry.*

Q3c: Background Color *(if device frame selected)*

"What background color for the video? - Dark (#0a0a0a) — cinematic, great for social media - White (#ffffff) — clean, good for presentations/websites - Transparent — for compositing *(note: output will be WebM, not MP4)* - Custom — specify a hex color"

*Wait for response. If transparent, set output format to WebM with alpha. If custom, validate the hex color.*

Q4: Voiceover

"How should we handle the voiceover? - Generate — I'll analyze the recording and write a script that narrates what's on screen - You provide — Give me the script text - None — No voiceover"

*Wait for response.*

Q5: Voice Style *(if voiceover enabled)*

"What kind of voice? Tone: - Professional / polished - Friendly / conversational - Energetic / excited - Calm / reassuring - Or describe your own tone Gender preference: - Male - Female - No preference"

*Wait for response.*

Q6: Voice Selection *(if voiceover enabled)*

Based on the user's tone and gender preference, recommend a specific voice and let them confirm or pick another:

"Based on your preferences, I'd recommend [voice name] ([provider]). Here are some options: | Voice | Provider | Tone | | --- | --- | --- | | Kore | Gemini | Friendly, clear, female | | Charon | Gemini | Professional, authoritative, male | | Puck | Gemini | Upbeat, energetic, male | | Aoede | Gemini | Breezy, warm, female | | nova | OpenAI | Friendly, natural, female | | onyx | OpenAI | Deep, professional, male | Want to go with [recommendation], or pick a different one?"

*Wait for response.*

Q7: Background Music

"Want background music? If so, what vibe? - Modern / minimal — clean, tech-forward - Upbeat / positive — energetic, fun - Corporate / professional — polished, confident - Ambient / calm — soft, relaxed - Custom — describe the vibe you want - No music — voiceover only (or silent)"

*Wait for response.*

Q8: Output

"Where should I save the final video? *(default: same directory as the input, with _demo suffix)*"

*Wait for response.*

Quick Reference

QuestionDetermines
Screen RecordingInput file
App OverviewContext for voiceover script
Device FrameWhether to use device-framer and which device
Device ColorColor variant for the selected device
Background ColorBackground behind the device frame
VoiceoverGenerate script vs user-provided vs none
Voice StyleTone and gender preference
Voice SelectionSpecific TTS voice and provider
Background MusicWhether to generate music and what style
OutputWhere to save final video

Step 2: Analyze the Screen Recording

Extract keyframes from the recording. Use scene detection to capture frames at actual screen transitions rather than fixed intervals — this gives you frames at the moments that matter.

python3 ${CLAUDE_PLUGIN_ROOT}/skills/app-demo-agent/scripts/extract_frames.py \
  INPUT_VIDEO \
  -o ~/demo_project/frames/ \
  --scene-detect \
  --timestamps

If scene detection doesn't find enough transitions (e.g., scrolling content), fall back to fixed intervals:

python3 ${CLAUDE_PLUGIN_ROOT}/skills/app-demo-agent/scripts/extract_frames.py \
  INPUT_VIDEO \
  -o ~/demo_project/frames/ \
  --interval 2 \
  --max-frames 20 \
  --timestamps

Options:

OptionDefaultDescription
--scene-detectoffDetect actual screen transitions instead of fixed intervals
--scene-threshold0.3Scene sensitivity 0.0-1.0, lower = more sensitive
--interval2Seconds between frame captures (fixed interval mode)
--max-frames20Maximum number of frames to extract
-o, --output./frames/Output directory for frames
--timestampsoffAlso output a timestamps.json mapping

This creates numbered PNG screenshots: frame_001.png, frame_002.png, etc. The timestamps.json maps each frame to its exact timestamp in the video.

Now read each frame image using the Read tool to understand the screen flow. Build a mental timeline:

0s  - App opens, home screen visible
2s  - User taps "New Task" button
4s  - Task creation form appears
6s  - User types task name
8s  - User sets due date
10s - User taps "Save"
12s - Task appears in list with checkmark

Use the user's app description (Q2) combined with what you see in the frames to understand the full flow.


Step 3: Write the Voiceover Script

⚠️ This is the most important step. The voiceover must match what's happening on screen at every moment. A generic script that doesn't align with the visuals will feel disconnected and unprofessional.

First, get the exact video duration:

ffprobe -v quiet -show_entries format=duration -of csv=p=0 INPUT_VIDEO

Then write a timed script that maps narration to the frame timeline you built in Step 2. Every line of the script should correspond to what's visible on screen at that moment.

Script Rules

  1. Content must match the screen — if the user is tapping a button at 4s, the narration at 4s should describe that action. Never narrate something that isn't visible.
  2. Fill the full video duration — the voiceover should naturally span the entire recording. Not too short (dead silence at the end), not too long (audio gets cut off). Aim for the TTS output to be within 2-3 seconds of the video length.
  3. Flow with transitions — when the screen transitions between views, use that moment for a brief pause or transitional phrase. Don't talk over a screen change.
  4. Be natural and conversational — not robotic marketing speak.
  5. Highlight key features — call out what makes the app special as those features appear on screen.

Write the script as a timed outline first

Map each line to the timestamp where it should be spoken:

[0-3s]   "Meet TaskFlow — the simplest way to stay on top of your day."
[3-6s]   "Tap the plus button to create a new task."
[6-10s]  "Give it a name... set a due date... and you're done."
[10-14s] "Your tasks show up right on your home screen, organized by priority."
[14-17s] "One tap to mark it complete."
[17-20s] "That's it — no clutter, no complexity. TaskFlow."

Then convert to a single block for TTS

Remove the timestamps and join into flowing text. Use punctuation to control pacing:

Meet TaskFlow — the simplest way to stay on top of your day.
Tap the plus button to create a new task.
Give it a name... set a due date... and you're done.
Your tasks show up right on your home screen, organized by priority.
One tap to mark it complete.
That's it — no clutter, no complexity. TaskFlow.

Pacing guide

Video DurationTarget Word CountPace
15s30-40 wordsFast, punchy
30s60-80 wordsStandard
45s90-120 wordsComfortable
60s120-150 wordsRelaxed
90s+~150 words/minNatural conversational

Tips:

  • Short sentences work better for TTS pacing
  • Periods create natural pauses (~0.5s)
  • Ellipsis (...) creates longer pauses (~1s)
  • Em dashes (—) create brief pauses (~0.3s)
  • Front-load the hook — first sentence matters most
  • End with the app name or a clear CTA

Present the timed script to the user for approval before generating audio. Show both the timed outline and the final text block. Ask if they want changes to wording, pacing, or emphasis.


Step 4: Frame the Video (Optional)

If the user wants a device frame, wrap the recording:

python3 ${CLAUDE_PLUGIN_ROOT}/skills/device-framer/scripts/frame_video.py \
  INPUT_VIDEO \
  -o ~/demo_project/framed.mp4 \
  -d iphone-16-pro --color natural-titanium \
  --bg '#0a0a0a' --scale 0.5 --padding 100

Recommended combos for demos:

VibeDeviceColorBackground
Premium darkiphone-16-pronatural-titanium#0a0a0a
Modern vibrantiphone-17-procosmic-orange#1a1a2e
Clean lightiphone-aircloud-white#f0f4f8
Boldiphone-16ultramarine#0a0a0a
Classiciphone-16-pro-maxblack-titanium#111111

⚠️ Use --scale 0.5 for most demos — native resolution is very large.

The framed video becomes the input for the rest of the pipeline.


Step 5: Generate Voiceover Audio

Use one of the voice generation scripts:

Gemini TTS (recommended — free, high quality):

python3 ${CLAUDE_PLUGIN_ROOT}/skills/voice-generation/scripts/gemini_tts.py \
  --text "Your voiceover script here..." \
  --voice Orus \
  --style "Clear, confident, app demo narration" \
  -o ~/demo_project/voiceover.wav

OpenAI TTS:

python3 ${CLAUDE_PLUGIN_ROOT}/skills/voice-generation/scripts/openai_tts.py \
  --text "Your voiceover script here..." \
  --voice nova \
  -o ~/demo_project/voiceover.mp3

ElevenLabs:

python3 ${CLAUDE_PLUGIN_ROOT}/skills/voice-generation/scripts/elevenlabs.py \
  --text "Your voiceover script here..." \
  --voice rachel \
  -o ~/demo_project/voiceover.mp3

⚠️ You can also use --text-file instead of --text to read the script from a file:

python3 ${CLAUDE_PLUGIN_ROOT}/skills/voice-generation/scripts/gemini_tts.py \
  --text-file ~/demo_project/script.md \
  --voice Kore \
  --style "Friendly, clear, app demo narration" \
  -o ~/demo_project/voiceover.wav

Duration Check (CRITICAL)

After generating the voiceover, immediately check if it matches the video duration:

# Get voiceover duration
VO_DUR=$(ffprobe -v quiet -show_entries format=duration -of csv=p=0 ~/demo_project/voiceover.wav)

# Get video duration
VID_DUR=$(ffprobe -v quiet -show_entries format=duration -of csv=p=0 INPUT_VIDEO)

echo "Voiceover: ${VO_DUR}s, Video: ${VID_DUR}s"

If there's a mismatch greater than 3 seconds, fix it before proceeding:

SituationFix
Voiceover too longShorten the script — remove filler words, tighten phrasing, cut a line. Regenerate.
Voiceover slightly long (< 5s over)Extend the video with a freeze frame at the end: ffmpeg -i video.mp4 -vf "tpad=stop_mode=clone:stop_duration=5" -c:a copy extended.mp4
Voiceover too shortAdd more descriptive lines, slow the pace with pauses (ellipsis), or add a closing line. Regenerate.
Voiceover slightly short (< 3s under)Acceptable — the video will have a brief silent outro which can feel natural.

Always prefer adjusting the script over stretching the video. The script should be written to fit the video, not the other way around.

Voice Recommendations for Demos

ToneGemini VoiceOpenAI VoiceElevenLabs Voice
Default / ProfessionalOrus (recommended)onyxjosh
FriendlyKorenovarachel
EnergeticPuckechodomi
CalmAoedeshimmerbella
AuthoritativeCharonalloyadam

Default voice: Orus (Gemini TTS) — firm, clear, professional. Works well for most app demos.


Step 6: Generate Background Music (Optional)

If the user wants music:

⚠️ Always match the video duration exactly. Get the video duration first, then pass it to the music generator:

# Get exact video duration
DURATION=$(ffprobe -v quiet -show_entries format=duration -of csv=p=0 INPUT_VIDEO | cut -d. -f1)

python3 ${CLAUDE_PLUGIN_ROOT}/skills/music-generation/scripts/lyria.py \
  --prompt "modern, minimal, tech product demo, clean, upbeat, positive" \
  --duration $DURATION \
  -o ~/demo_project/music.wav

Music prompts for demos:

App TypeMusic Prompt
Productivity"minimal, modern, clean, focused, light electronic"
Social/Fun"upbeat, playful, positive, acoustic, indie"
Finance/Business"professional, confident, modern, ambient, corporate"
Health/Wellness"calm, organic, warm, gentle, ambient"
Gaming"energetic, electronic, dynamic, exciting, bass"
Creative tool"inspiring, flowing, ambient, creative, modern"

Step 7: Mix Audio

If you have both voiceover and music, mix them:

python3 ${CLAUDE_PLUGIN_ROOT}/skills/media-utils/scripts/audio_mix.py \
  --voice ~/demo_project/voiceover.wav \
  --music ~/demo_project/music.wav \
  -o ~/demo_project/final_audio.mp3 \
  --music-volume 0.2 \
  --fade-in 1.0 \
  --fade-out 2.0

Recommended settings for demos:

  • --music-volume 0.15 to 0.25 — music should be subtle under narration
  • --fade-in 1.0 — gentle music intro
  • --fade-out 2.0 — clean ending

If voiceover only (no music), skip this step and use the voiceover file directly.


Step 8: Merge Audio with Video

Strip existing audio from the video (if any) and merge the new audio:

# Strip existing audio first
python3 ${CLAUDE_PLUGIN_ROOT}/skills/media-utils/scripts/video_strip_audio.py \
  -i ~/demo_project/framed.mp4 \
  -o ~/demo_project/silent_video.mp4

# Merge new audio
python3 ${CLAUDE_PLUGIN_ROOT}/skills/media-utils/scripts/video_audio_merge.py \
  --video ~/demo_project/silent_video.mp4 \
  --audio ~/demo_project/final_audio.mp3 \
  -o ~/demo_project/output/app_demo_final.mp4

If the video has no audio to strip, merge directly:

python3 ${CLAUDE_PLUGIN_ROOT}/skills/media-utils/scripts/video_audio_merge.py \
  --video ~/demo_project/framed.mp4 \
  --audio ~/demo_project/final_audio.mp3 \
  -o ~/demo_project/output/app_demo_final.mp4

Step 9: Deliver

Present the final video to the user:

  1. Tell them where the output file is
  2. Mention the duration and file size
  3. Offer adjustments:

- "Want me to change the voiceover script?" - "Different voice or music style?" - "Different device frame or background color?" - "Adjust the music volume?"


Project Structure

demo_project/
├── frames/                   # Extracted keyframes for analysis
│   ├── frame_001.png
│   ├── frame_002.png
│   └── timestamps.json       # Frame timestamp mapping
├── framed.mp4                # Device-framed video (if applicable)
├── voiceover.wav             # Generated voiceover
├── music.wav                 # Generated background music
├── final_audio.mp3           # Mixed voiceover + music
├── silent_video.mp4          # Video with audio stripped
├── script.md                 # Voiceover script (for reference)
└── output/
    └── app_demo_final.mp4    # Final deliverable

Full Pipeline (Quick Reference)

For quick reference, here's the full pipeline in order:

SKILL="${CLAUDE_PLUGIN_ROOT}/skills"
PROJECT=~/demo_project
INPUT=recording.mp4

# 1. Extract frames for analysis
python3 $SKILL/app-demo-agent/scripts/extract_frames.py $INPUT -o $PROJECT/frames/ --timestamps

# 2. [Claude analyzes frames + writes voiceover script]

# 3. Frame the video (optional)
python3 $SKILL/device-framer/scripts/frame_video.py $INPUT -o $PROJECT/framed.mp4 \
  -d iphone-16-pro --color natural-titanium --bg '#0a0a0a' --scale 0.5

# 4. Generate voiceover
python3 $SKILL/voice-generation/scripts/gemini_tts.py \
  --text-file $PROJECT/script.md --voice Orus \
  --style "Clear, confident, app demo narration" -o $PROJECT/voiceover.wav

# 5. Generate music (optional)
python3 $SKILL/music-generation/scripts/lyria.py \
  --prompt "minimal, modern, tech demo" --duration 30 -o $PROJECT/music.wav

# 6. Mix audio
python3 $SKILL/media-utils/scripts/audio_mix.py \
  --voice $PROJECT/voiceover.wav --music $PROJECT/music.wav \
  -o $PROJECT/final_audio.mp3 --music-volume 0.2

# 7. Strip + merge
python3 $SKILL/media-utils/scripts/video_strip_audio.py -i $PROJECT/framed.mp4 -o $PROJECT/silent.mp4
python3 $SKILL/media-utils/scripts/video_audio_merge.py \
  --video $PROJECT/silent.mp4 --audio $PROJECT/final_audio.mp3 \
  -o $PROJECT/output/app_demo_final.mp4

What You Can Create

InputOutput
Raw screen recordingPolished demo with voiceover
App walkthrough captureNarrated product tour
Feature demo recordingMarketing-ready feature highlight
Tutorial screen captureProfessional tutorial with narration
Bug reproduction videoAnnotated bug report video
Prototype recordingInvestor demo with voiceover

Prerequisites

  • FFmpegbrew install ffmpeg (required for all media processing)
  • Pillowpip install Pillow (required if using device framing)
  • Voice generation — at least one of:

- GOOGLE_API_KEY or GOOGLE_CLOUD_PROJECT (Gemini TTS — recommended) - OPENAI_API_KEY (OpenAI TTS) - ELEVENLABS_API_KEY (ElevenLabs)

  • Music generation (optional) — GOOGLE_API_KEY or GOOGLE_CLOUD_PROJECT for Lyria

Voice & Music Pairing Guide

Demo StyleVoice (Gemini)Music Prompt
General / defaultOrus (firm)"modern, clean, minimal, professional"
SaaS product tourOrus (firm)"modern, clean, minimal, professional"
Mobile app showcasePuck (upbeat)"upbeat, positive, mobile, fresh"
Enterprise demoCharon (authoritative)"corporate, confident, ambient, subtle"
Creative toolAoede (breezy)"inspiring, creative, flowing, warm"
Developer toolOrus (firm)"tech, minimal, electronic, focused"
Consumer appKore (friendly)"playful, modern, light, accessible"

Limitations

  • Requires existing screen recording — this skill does not capture screens
  • Frame analysis depends on image clarity — blurry recordings produce weaker scripts
  • Video duration limits TTS — very long recordings (5+ min) may need the script split into segments
  • Device framer adds processing time — especially for long videos
  • Music generation — Lyria clips max at ~30s, may need to loop for longer videos

Error Handling

ErrorSolution
"FFmpeg not found"Install: brew install ffmpeg
"No frames extracted"Check input video is valid, try lower --interval
"GOOGLE_API_KEY not set"Set up API key per main README
"Pillow not installed"Run: pip install Pillow
Audio/video duration mismatchVoiceover script may be too long/short — adjust and regenerate
Device framer failsCheck frame PNG files exist in device-framer/frames/

Example Prompts

Simple:

"Here's a screen recording of my app — turn it into a polished demo video"

With details:

"I have a screen recording at ~/Desktop/myapp.mov. It's a fitness app showing the workout tracking feature. Put it in an iPhone 16 Pro frame, add a friendly voiceover, and some upbeat background music."

Minimal:

"Add voiceover narration to this screen recording: ~/recordings/demo.mp4"

Full control:

"Take ~/Desktop/recording.mp4, frame it in iPhone 17 Pro cosmic orange on dark background, generate a professional voiceover script, use Gemini TTS with Charon voice, add minimal electronic background music, save to ~/Desktop/final_demo.mp4"

适合场景

01

用户想查找某类 Agent Skill 时

02

需要根据任务场景推荐可安装能力包时

03

需要对比不同来源的安装命令和来源信息时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

Codex

36.17%
按下载量换算22

Claude

31.38%
按下载量换算19

Cursor

17.96%
按下载量换算11

Gemini CLI

9.07%
按下载量换算6

安全审计

Gen Agent Trust Hub

可疑

Socket

通过

Snyk

通过

权限和风险

只读

该 Skill 主要提供规则、说明或参考内容,本身偏只读;真正读写文件、联网或执行命令仍取决于宿主 Agent 的任务。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。来源安全扫描存在 warning/failed 结果,不能写成本站确认安全。当前只有一个来源,正式发布前建议补源仓库或其他目录站核验。

来源信息

继续浏览同类 Skills