Turn any app screenshot into Play Store–ready graphics — with minimal effort. A free browser tool for Google Play feature graphics (1024 × 500) and screenshots (1080 × 1920). Upload captures, pick a layout, add captions and theme colors, and export a ZIP of pixel-perfect PNGs — no Figma templates, no manual resizing for the Play Console.
Zero build step. Pure HTML + CSS + vanilla JS
- Any-size uploads — drop emulator, device, or design handoff screenshots; layouts frame and crop them to store dimensions automatically.
- Feature graphic at the Play Store's required 1024 × 500.
- Screenshots at 1080 × 1920 with two layouts:
- 1 device — single phone with a bold caption.
- 2 devices — two overlapping phones for showing related screens.
- Theme controls — background, accent, and text colors, plus separate Google Font pickers for heading (eyebrow + headline) and body (subline) text.
- Drag-and-drop screenshot uploads with live preview.
- One-click ZIP export containing all slides at their native pixel sizes.
It's a static site — no install needed. Open index.html in a browser, or serve the folder if you want File API behavior to match production:
# Option A: open directly
open index.html
# Option B: serve with any static server
python3 -m http.server 8080
# then visit http://localhost:8080All fonts in the picker are loaded on demand from Google Fonts — only Montserrat is preloaded at startup; any other family is fetched the first time you select it (via a <link rel="stylesheet"> injected into the page) and cached by the browser. The picker currently exposes a curated set of display + body families:
Montserrat · Inter · Poppins · Roboto · Oswald · Bebas Neue · Space Grotesk · Plus Jakarta Sans · Work Sans · DM Sans · Rubik · Manrope · Anton · Archivo Black · Playfair Display · Merriweather · Lora · Source Sans 3
To add more, drop the family name into the FONT_OPTIONS array in js/app.js. Anything Google Fonts hosts will work — the URL is built dynamically from the name.
The export pipeline waits for document.fonts.ready before capturing each slide, so PNGs always render with the selected family (not the system fallback).
Each slide is rendered into an off-screen DOM node at its real export size (1024×500 or 1080×1920), then captured to PNG with html-to-image. All PNGs are then bundled with JSZip and downloaded as appshot-YYYY-MM-DD.zip.
The exported ZIP looks like:
appshot-2026-05-25.zip
├── feature-graphic.png (1024 × 500)
├── screenshot-01.png (1080 × 1920)
├── screenshot-02.png (1080 × 1920)
└── screenshot-03.png (1080 × 1920)
If Appshot Studio saved you an afternoon of Figma templates, Canva mockups, and hand-resizing screenshots for the Play Console, you can buy me a donut 🍩.

