name: lg-demo-recorder description: Captures full demo evidence — screenshots, screen recordings, and GIFs — from emulators or physical devices for documentation, README media, and GSoC submission.
LG Demo Recorder
Overview
This skill captures visual evidence of your running Liquid Galaxy Flutter app. It produces screenshots, screen recordings (MP4), and animated GIFs suitable for README files, contest submissions, Google Drive deliverables, and mentor demos.
This is NOT optional. The Gemini Summer of Code contest requires visual proof that the app runs, connects to the LG rig (or demonstrates UI), and performs the required LG operations (logo, KML, flyTo, clean).
Announce at start: "I'm using the lg-demo-recorder skill to capture demo evidence for [purpose]."
GUARDRAIL: The Critical Advisor (.agent/skills/lg-critical-advisor/SKILL.md) is active. Demo evidence is required for submission — students cannot skip this.
Prerequisites
- App must be running on an emulator or physical device (use
lg-emulator-managerto launch) adbavailable on PATH (for Android)xcrun simctlavailable (for iOS on macOS)docs/screenshots/,docs/recordings/,docs/gifs/directories exist
Phase 1: Screenshot Capture
Android (via ADB)
# Single screenshot
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
adb exec-out screencap -p > docs/screenshots/screen_${TIMESTAMP}.png
echo "Screenshot saved: docs/screenshots/screen_${TIMESTAMP}.png"
iOS Simulator (macOS)
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
xcrun simctl io booted screenshot docs/screenshots/screen_${TIMESTAMP}.png
echo "Screenshot saved: docs/screenshots/screen_${TIMESTAMP}.png"
Capture Set — All Key Screens
Run the app through each screen and capture:
| Screen | Filename | Purpose |
|---|---|---|
| Splash | splash.png |
App startup branding |
| Connection | connection.png |
LG rig connection UI |
| Main/Home | main_screen.png |
Primary controller interface |
| Visualization | viz_active.png |
Active KML on Google Earth |
| Settings | settings.png |
Configuration screen |
| About/Help | help.png |
Information screen |
# Capture all key screens in sequence
for SCREEN in splash connection main_screen viz_active settings help; do
echo "Navigate to $SCREEN, then press Enter..."
read
adb exec-out screencap -p > "docs/screenshots/${SCREEN}.png"
echo " ✓ Captured ${SCREEN}.png"
done
echo "All screenshots captured!"
Phase 2: Screen Recording
Android (via ADB — max 180 seconds default)
# Start recording (runs in background, Ctrl+C or timeout to stop)
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
echo "Recording started... Demonstrate the app. Press Ctrl+C to stop."
adb shell screenrecord --time-limit 60 /sdcard/demo_${TIMESTAMP}.mp4
# Pull the recording to local machine
adb pull /sdcard/demo_${TIMESTAMP}.mp4 docs/recordings/demo_${TIMESTAMP}.mp4
adb shell rm /sdcard/demo_${TIMESTAMP}.mp4
echo "Recording saved: docs/recordings/demo_${TIMESTAMP}.mp4"
iOS Simulator (macOS)
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
echo "Recording started... Demonstrate the app. Press Ctrl+C to stop."
xcrun simctl io booted recordVideo docs/recordings/demo_${TIMESTAMP}.mp4
echo "Recording saved: docs/recordings/demo_${TIMESTAMP}.mp4"
Demo Script (What to Record)
Walk through this sequence during recording:
- App launch — show splash screen (2-3 seconds)
- Connection — connect to LG rig (or show the connection UI)
- Main screen — show all available actions
- Send KML — demonstrate sending a visualization to the rig
- FlyTo — navigate Google Earth to a location
- Orbit — start an orbit around a POI
- Clean — clear all KML from the rig
- Settings — show configuration options
- Disconnect — clean disconnect
Phase 3: GIF Generation
From Recording (using ffmpeg)
# Check if ffmpeg is available
which ffmpeg || echo "Install ffmpeg: brew install ffmpeg (macOS) or sudo apt install ffmpeg (Linux)"
# Convert MP4 to GIF (good quality, reasonable size)
RECORDING="docs/recordings/demo_latest.mp4"
ffmpeg -i "$RECORDING" \
-vf "fps=10,scale=320:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" \
-loop 0 \
docs/gifs/demo.gif
echo "GIF saved: docs/gifs/demo.gif"
Quick GIF (lower quality, smaller file)
ffmpeg -i "$RECORDING" \
-vf "fps=8,scale=240:-1" \
-loop 0 \
docs/gifs/demo_small.gif
Phase 4: README Integration
Add demo media to the project README:
## Demo
### Screenshots
| Splash | Connection | Main Screen |
|--------|-----------|-------------|
|  |  |  |
### Video Demo

> Full video: [docs/recordings/demo.mp4](docs/recordings/demo.mp4)
Phase 5: Contest Deliverable Packaging
For the contest submission folder:
# Create deliverable package
DELIVERABLE_DIR="deliverables/$(date +%Y%m%d)_v1.0"
mkdir -p "$DELIVERABLE_DIR"
# Copy all evidence
cp docs/screenshots/*.png "$DELIVERABLE_DIR/"
cp docs/recordings/*.mp4 "$DELIVERABLE_DIR/"
cp docs/gifs/*.gif "$DELIVERABLE_DIR/"
# Copy APK (required for Task 2)
cp flutter_client/build/app/outputs/flutter-apk/app-release.apk "$DELIVERABLE_DIR/"
echo "Deliverable package ready at: $DELIVERABLE_DIR"
ls -la "$DELIVERABLE_DIR"
Contest Evidence Checklist (Task 2)
The student MUST capture evidence of each Task 2 requirement:
| Task 2 Requirement | Screenshot Name | What to Show |
|---|---|---|
| Send LG Logo | task2_logo_sent.png |
Logo visible on left slave screen |
| Send 3D Pyramid KML | task2_pyramid.png |
Colored 3D pyramid on Google Earth |
| FlyTo Home City | task2_flyto.png |
Google Earth showing student's home city |
| Clean Logos | task2_clean_logo.png |
Left screen cleared of logo |
| Clean KMLs | task2_clean_kml.png |
Google Earth cleared of all KML |
| App UI | task2_ui_dashboard.png |
The phone controller UI with action buttons |
| Connection | task2_connected.png |
Connection screen showing "Connected" state |
| Release APK | app-release.apk |
Built via flutter build apk --release |
"If you don't have access to a physical LG rig, capture the UI screens and the SSH connection attempt. Document clearly in the README what each button does."
Checklist
- Splash screen screenshot captured
- All key screen screenshots captured
- Full demo video recorded (30-60 seconds)
- GIF generated for README
- README updated with media
- Evidence committed to git
- Deliverable package prepared for Google Drive
Handoff
- Evidence captured → Return to calling workflow (usually
full-pipelineStage 10 Quiz & Graduation) - App not running →
.agent/skills/lg-emulator-manager/SKILL.mdto launch emulator first - ffmpeg missing →
.agent/skills/lg-setup-guide/SKILL.mdfor install guidance - Need more testing →
.agent/skills/lg-tester/SKILL.mdfor automated tests
🔗 Skill Chain
After demo evidence is captured and committed, automatically offer the next stage:
"Demo evidence is captured and committed! Screenshots, recordings, and GIFs are ready for your submission. Time for the final quiz to validate your understanding of the entire project. Ready for graduation? 🎓"
If student says "ready" → activate .agent/skills/lg-quiz-master/SKILL.md.