Skip to main content

A robust, Pillow-based alternative to fastlane frameit for composing premium mobile marketing screenshots.

Project description

screenshot-framer

A robust, Python-based CLI tool to composite premium marketing screenshots for iOS and Android applications.

screenshot-framer was built as a lightweight, flexible alternative to fastlane frameit. It bypasses the common system-level ImageMagick/FreeType font rendering failures by relying entirely on Python's self-contained Pillow library for image composition, device rounding, drop shadows, and responsive text overlay.

Features

  • No ImageMagick Required: Pure Python image manipulation using Pillow.
  • Cross-Platform Auto-Detection: Dynamically detects iOS (flat directories) and Android (nested phoneScreenshots, sevenInchScreenshots, tenInchScreenshots) architectures and automatically applies the correct scaling and border radii.
  • Dynamic Text Scaling: Automatically scales down long titles so they never clip off the edge of your marketing canvas.
  • Modern Device Styling: Instead of forcing clunky hardware bezels onto your UI, it elegantly rounds the corners of your raw screenshots and applies a premium Gaussian drop-shadow, floating it over your chosen background.
  • Fastlane Compatible: Can parse your existing title.strings and keyword.strings files directly.

Installation

pip install screenshot-framer

Usage

Create a configuration JSON file (e.g. framer_config.json) in your project:

{
  "base_dir": "./fastlane/metadata/android/en-US",
  "background": "./fastlane/metadata/android/en-US/background.png",
  "title_font": "/System/Library/Fonts/SFCompact.ttf",
  "keyword_font": "/System/Library/Fonts/SFCompact.ttf",
  "title_color": "#ffffff",
  "keyword_color": "#c8c8c8",
  "device_radius_phone": 80,
  "device_radius_seven_inch": 70,
  "device_radius_tablet": 60,
  "shadow_radius": 50,
  "shadow_opacity": 150,
  "screenshot_scale": 0.70,
  "exclude_files": ["01_dashboard.png", "raw_marketing.png"],
  "fallback_title": "Upnext",
  "default_disclaimer": "TV SHOW METADATA PROVIDED BY TVMAZE.COM"
}

Configuration Options

  • screenshot_scale: Defines how large the device will appear relative to the background canvas height (e.g., 0.70 means 70% of the canvas height).
  • exclude_files: An array of substrings. Any raw screenshot containing these strings in its filename will be skipped.
  • device_radius_*: Defines the corner roundness depending on whether the detected screenshot belongs to a phone, 7-inch tablet, or 10-inch tablet.

Then run the tool from your terminal:

screenshot-framer --config framer_config.json

How It Works

  1. Discovery: The script intelligently scans the base_dir and common fastlane subdirectories (phoneScreenshots, sevenInchScreenshots, tenInchScreenshots).
  2. Device Detection: It determines the device type (Phone, 7-inch Tablet, 10-inch Tablet) based on the containing folder or the filename (perfect for iOS devices like iPad Pro).
  3. Matching: It maps your raw screenshots to the translated strings in title.strings.
  4. Compositing: It scales your background, frames your screenshot with rounded corners, adds a premium drop shadow, and responsively fits your Title and Keyword text.
  5. Export: It outputs _framed.png files ready for the App Store and Google Play.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

screenshot_framer-0.2.0.tar.gz (6.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

screenshot_framer-0.2.0-py3-none-any.whl (7.0 kB view details)

Uploaded Python 3

File details

Details for the file screenshot_framer-0.2.0.tar.gz.

File metadata

  • Download URL: screenshot_framer-0.2.0.tar.gz
  • Upload date:
  • Size: 6.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for screenshot_framer-0.2.0.tar.gz
Algorithm Hash digest
SHA256 4b39d35d5940d8afc25aa5605992cc18ac4d6ee6e28c31029f19f962379db4e5
MD5 91b1a0735e5d8ca66cb76f6f370e5aa2
BLAKE2b-256 d995d1e80176371382332c5c6a249f4a913add55ab1f7e6fe9049b6e81393ae9

See more details on using hashes here.

Provenance

The following attestation bundles were made for screenshot_framer-0.2.0.tar.gz:

Publisher: publish.yml on akitikkx/screenshot-framer

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file screenshot_framer-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for screenshot_framer-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 095dbc4245933b6acedbebbe63a443df4eb5e477d8246f4be989c4222b7802bf
MD5 8aa447c5a9ba0bf184b17e972ffb26f3
BLAKE2b-256 bc7ba80d23480b6848e831073cea09c1d9a2114ca64527e7f7b4b8548e4c39c7

See more details on using hashes here.

Provenance

The following attestation bundles were made for screenshot_framer-0.2.0-py3-none-any.whl:

Publisher: publish.yml on akitikkx/screenshot-framer

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page