- Home
- Skills
- Mobile Development
- Store Screenshots & Play Video (Flutter & React Native)
More screenshots
Works with the AI tools you already use
Store Screenshots & Play Video (Flutter & React Native)
Captioned, device-framed App Store and Play screenshots in every language, plus a Play preview video, made from your real Flutter, React Native or Expo app and checked against both stores' rules.
$19
Store Screenshots & Play Video (Flutter & React Native)
Example session with this skill installed
Make store screenshots for this app: iPhone, iPad and the three Play sizes, in all five listing languages, and a Google Play preview video.
- Read your context and instructions
- Compiled the store screenshots
Captured, composed and checked the full store set from the running app, plus a Play preview video. All 104 screenshots pass both stores' rules.
What was made
| Slot | Device driven | Size | Languages | Shots |
|---|---|---|---|---|
| App Store iPhone 6.9" | iPhone 17 Pro Max simulator | 1320 x 2868 | en, de, es, fr, pt-BR | 8 each |
| App Store iPad 13" | iPad Pro 13-inch simulator | 2064 x 2752 | en, de, es, fr, pt-BR | 8 each |
| Play phone | Pixel 3a emulator | 1080 x 1920 (9:16 canvas) | en-US | 8 |
| Play 7-inch tablet | Nexus 7 emulator | 1200 x 1800 | en-US | 8 |
| Play 10-inch tablet | Pixel Tablet emulator, rotated to portrait | 1600 x 2440 | en-US | 8 |
Each shot has a drawn device frame, a caption with one highlighted word in that shot's language, and a background that runs across the set. Shot 1 is a large hero device; shots 2 and 4 magnify one control in a callout (a separate region per device, because the toolbar sits lower on tablets).
Checks
python3 validate.py
0 errors, 0 warnings across ipad-13, iphone-6.9, phone, seven-inch, ten-inch.
The same checker on a deliberately broken set:
error: 02_legendary.png: has an alpha channel; both stores reject transparency
error: 03_new.png: 1290x2700 is not an accepted iPhone 6.9" Display size
error: 04_studio.png is byte-identical to 01_collection.png
error: 99_x_final_state.png: diagnostic frame from a failed capture
error: the iOS target declares iPad support but there is no iPad set
Play preview video
play_preview.mp4: 18.4 s, 1080 x 1920, H.264. Three clips filmed on the Android emulator while the test drove the app at human pace (a foil card catching a moving finger, drawing on a card, flipping a card to its back), each trimmed to its VIDEO_START / VIDEO_END marks, captions burned in, a clean 9:41 status bar, and a 2 s end card.
Found along the way
- The 10-inch tablet emulator letterboxed the portrait app into 1110 x 1480; it was rotated and recaptured at full size.
- On both tablets the editor leaves the bottom fifth of the screen empty. That is a layout fix for the app, not the screenshots.
Next steps
- Look through the contact sheets in build/screenshots/sheets/ (one per slot and language).
- Upload each folder listed in screenshots/README.md to the console field named beside it.
- Upload play_preview.mp4 to YouTube as unlisted with monetization off, and paste the watch URL into Play Console > Main store listing > Video.
Connects securely to your tools. The creator never sees your data.
About this skill
I ship small apps on my own, a shelf of them on the App Store and Google Play, and every one of them needed screenshots: iPhone, iPad, Play phone, 7-inch and 10-inch tablet, in every language the listing is in. That's well over a hundred images per app, and every time a screen changed they were out of date.
Design tools don't solve that. The screenshots drift from the app the moment you touch it. So I wrote this skill to make them from the app itself.
What it does
You describe the shots you want. In a Flutter app, Claude writes a small integration test that drives your real app to each screen. In a React Native or Expo app, the skill generates Maestro flows from your screenshots.json instead, so the app needs no test code. Then the skill:
- captures every device and language on Xcode simulators and Android emulators, at the exact pixel size each store wants, with a fresh install per device so old test data never shows up
- composes them into store images: a drawn device frame, a bold caption with a highlighted keyword, a background that runs across the whole set like a panorama, and a different layout on each shot (a big hero shot, tilted phones, a magnified callout of the one control the caption is about)
- checks them against both stores: Apple's exact sizes, Play's side and ratio limits, transparency (both stores reject it), shot counts, duplicate shots, leftover frames from a failed capture, and the rule that an app declaring iPad support needs an iPad set
- makes a Google Play preview video: it films short clips on the Android emulator while the test plays your app at human speed, trims them to the moment that matters, puts them in the same frame and captions, and joins them with a swipe. Captions are burned in because Play autoplays muted.
- makes you look: one overview image per set, and a checklist of what to look for that no script can see (a test ad banner, a debug label, white text on a pale background)
No design-tool account, no subscription, no frame images to license. The device frames are drawn in code.
Why it's built the way it is
Each rule came from something that went wrong on a real listing:
fastlane snapshotcan't drive a Flutter app (XCUITest sees one opaque view), so this usesintegration_testand renders the app's own pixels.- A tablet emulator with a landscape screen squeezes a portrait app into a small box, and that box is what gets captured. The skill rotates the emulator first.
- A test ad banner photographed into a listing reads as a broken advert. The capture refuses to run an ad-supported app without a screenshot mode switch. (It found exactly that banner in one of my own apps' Play screenshots.)
- A scene renamed without a caption used to leave a blank band and look finished. A missing caption now stops the build.
- Play's featuring guidance wants 9:16 phone shots, and most phones capture taller. The phone set is composed on a 9:16 canvas automatically.
React Native and Expo
The capture step picks the path from the project: pubspec.yaml means Flutter, a package.json that depends on react-native or expo means React Native or Expo. For React Native and Expo it writes one Maestro flow per scene, locale and platform, sets a clean status bar (simctl override on iOS, demo mode on Android), switches the language, and drops the images into the same folders the Flutter path uses, so captioning, framing, validation and the Play video work unchanged.
Tested end to end on Android with Maestro 2.11: two locales, a demo-mode status bar, then compose and validate with 0 errors. The iOS simulator path for React Native has not been run on a device yet. It needs Maestro, Java 17+ and a release build of your app (not Expo Go).
What you get
SKILL.mdwith the workflow, how to choose and order shots, captions, and the traps- four scripts:
capture.py,compose.py,validate.py,video.py(each answers--help) - Dart templates for the capture test, the video test and the drivers
- a
screenshots.jsontemplate: devices, languages, colours, captions, per-shot layouts - the store size tables, with links to Apple's and Google's pages, checked October 2026
Requirements
- Claude Code, Flutter, Python 3.9+ with Pillow (
pip install Pillow) - Xcode simulators for App Store sizes, Android emulators for Play sizes
- ffmpeg, only for the Play video
What it doesn't do
- It doesn't upload. You (or your fastlane lanes) upload the folders it writes, and it tells you which folder goes in which console field.
- It doesn't invent your captions. Claude drafts them with you; you approve.
- The video is for Google Play. Apple's App Preview format isn't covered yet.
How to use
Skills on Agensi run inside your AI agent. Copy the prompt, paste it into your agent, and it connects to Agensi and installs this skill for you. If a payment is needed, your agent shows it to you first.
Reviews
No reviews yet
Be one of the first to try it. Every listed skill passes our trust checks below.
Security scanned
Passed our 8-point scan before listing
Fresh listing
Recently published to Agensi
30-day refund
Not a fit? Get your money back
Trust & safety
Security scanned
Verified clean 4 days ago
- Passed all security checks, Safe to install
Needs access to