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.4.0.tar.gz (6.9 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.4.0-py3-none-any.whl (8.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: screenshot_framer-0.4.0.tar.gz
  • Upload date:
  • Size: 6.9 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.4.0.tar.gz
Algorithm Hash digest
SHA256 f1041bd7faa793c2e974b0e0109aa3711f8a277437bae8335ffe7f06abc2b26f
MD5 e2af0a37afa915fc8d50ba266efba8e7
BLAKE2b-256 fba400ce5f4c29a27c3b4bd332f529d2714f031abb8fc2dfb8c5f55fe72d4690

See more details on using hashes here.

Provenance

The following attestation bundles were made for screenshot_framer-0.4.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.4.0-py3-none-any.whl.

File metadata

File hashes

Hashes for screenshot_framer-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 459fcba7660100deae81d79a4b7a972f261f0369640bfb997558e7330d29a0fc
MD5 fb7329aca464ed7eff4ba13764b475b7
BLAKE2b-256 20d92db51c5669f3f6387f442822fdd27d33468318118397654a42d67503cfa5

See more details on using hashes here.

Provenance

The following attestation bundles were made for screenshot_framer-0.4.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