🎯 Koubou (工房) - The artisan workshop for App Store screenshots
Project description
🎯 Koubou (工房) - The Artisan Workshop for App Store Screenshots
Koubou (工房) transforms YAML into handcrafted App Store screenshots with artisan quality.
工房 (koubou) means "artisan's workshop" in Japanese - where masters create their finest work. Every screenshot is carefully crafted with professional precision using device frames, rich backgrounds, and elegant typography.
✨ Features
- 🎨 100+ Device Frames - iPhone 16 Pro, iPad Air M2, MacBook Pro, Apple Watch Ultra, and more
- 🌈 Professional Backgrounds - Linear, radial, conic gradients with precise color control
- ✨ Rich Typography - Advanced text overlays with stroke, alignment, wrapping, and custom fonts
- 🌈 Gradient Typography - Linear, radial, and conic gradients for text with custom color stops
- 📱 YAML-First Configuration - Elegant, declarative screenshot definitions
- 🚀 Batch Processing - Generate multiple screenshots efficiently from a single config
- 🔧 Flexible API - Both simple and advanced configuration options
- 💎 Artisan Quality - Pixel-perfect output ready for App Store submission
📦 Installation
Package Managers (Recommended)
PyPI (All Platforms)
pip install koubou
macOS/Linux - Homebrew
brew install bitomule/tap/koubou
Python Developers
pip install koubou[dev] # With development dependencies
Manual Installation
Option 1: Install Script (Recommended)
git clone https://github.com/bitomule/koubou.git
cd koubou
./install.sh
Option 2: From Source
git clone https://github.com/bitomule/koubou.git
cd koubou
pip install .
Verification
Verify your installation:
kou --version
kou --help
🚀 Quick Start
# Create a sample configuration
kou create_config my-screenshots.yaml
# Generate screenshots
kou generate my-screenshots.yaml
# List available device frames
kou list_frames
🎨 Configuration
Create elegant screenshots with YAML configuration:
project:
name: "My Beautiful App"
output_dir: "Screenshots/Generated"
devices:
- "iPhone 15 Pro Portrait"
defaults:
background:
type: linear
colors: ["#E8F0FE", "#F8FBFF"]
direction: 180
screenshots:
- name: "welcome_screen"
content:
- type: "text"
content: "Beautiful App"
position: ["50%", "15%"]
size: 48
color: "#8E4EC6"
weight: "bold"
- type: "text"
content: "Transform your workflow today"
position: ["50%", "25%"]
size: 24
color: "#1A73E8"
- type: "image"
asset: "screenshots/home.png"
position: ["50%", "60%"]
scale: 0.6
frame: true
Advanced Configuration
project:
name: "Feature Showcase"
output_dir: "Screenshots/Generated"
devices:
- "iPhone 15 Pro Portrait"
defaults:
background:
type: radial
colors: ["#ff9a9e", "#fecfef", "#feca57"]
screenshots:
- name: "ai_analysis"
content:
- type: "text"
content: "✨ AI-Powered Analysis"
position: ["50%", "10%"]
size: 42
color: "#2c2c54"
weight: "bold"
- type: "text"
content: "Smart insights at your fingertips"
position: ["50%", "20%"]
size: 28
color: "#1A73E8"
- type: "image"
asset: "screenshots/analysis.png"
position: ["50%", "65%"]
scale: 0.5
frame: true
Gradient Text Configuration
screenshots:
- name: "gradient_showcase"
content:
- type: "text"
content: "🌈 Gradient Magic"
position: ["50%", "15%"]
size: 48
gradient:
type: linear
colors: ["#FF6B6B", "#4ECDC4", "#45B7D1"]
direction: 45
weight: "bold"
- type: "text"
content: "Beautiful gradients for stunning text"
position: ["50%", "25%"]
size: 24
gradient:
type: radial
colors: ["#667eea", "#764ba2"]
center: ["50%", "50%"]
radius: "70%"
- type: "text"
content: "Advanced Color Control"
position: ["50%", "35%"]
size: 28
gradient:
type: linear
colors: ["#f093fb", "#f5576c", "#4facfe"]
positions: [0.0, 0.3, 1.0]
direction: 90
stroke_width: 2
stroke_gradient:
type: linear
colors: ["#333333", "#666666"]
direction: 45
🎯 Commands
kou generate <config.yaml>- Generate screenshots from configurationkou create_config <output.yaml>- Create a sample configuration filekou list_frames- List all available device frameskou --version- Show version informationkou --help- Show detailed help
Command Options
# Override output directory
kou generate config.yaml --output ./custom-screenshots
# Use custom frame directory
kou generate config.yaml --frames ./my-frames
# Enable verbose logging
kou generate config.yaml --verbose
# Create config with custom project name
kou create_config config.yaml --name "My App Screenshots"
Note: Commands use underscores (
create_config,list_frames) following Python naming conventions.
🎨 Device Frames
Koubou includes 100+ professionally crafted device frames:
iPhone Frames
- iPhone 16 Pro (Black, Desert, Natural, White Titanium)
- iPhone 16 (Black, Pink, Teal, Ultramarine, White)
- iPhone 15 Pro/Max (All titanium colors)
- iPhone 14 Pro/Max, 12-13 series, and more
iPad Frames
- iPad Air 11"/13" M2 (Blue, Purple, Space Gray, Stardust)
- iPad Pro 11"/13" M4 (Silver, Space Gray)
- iPad Pro 2018-2021, iPad mini, and classic models
Mac & Watch Frames
- MacBook Pro 2021 (14" & 16"), MacBook Air 2020/2022
- iMac 24" Silver, iMac 2021
- Apple Watch Series 4/7, Watch Ultra
📖 YAML API Reference
Project Configuration
project:
name: string # Project name
output_dir: string # Output directory (default: "output")
devices: [string, ...] # Target device list (e.g., ["iPhone 15 Pro Portrait"])
defaults: # Default settings applied to all screenshots
background: # Default background configuration
type: "solid" | "linear" | "radial" | "conic"
colors: [string, ...] # Hex colors array
direction: float? # Degrees for gradients (default: 0)
Screenshot Configuration
screenshots:
- name: string # Screenshot identifier
content: # Array of content items
- type: "text" | "image"
# Text content properties
content: string? # Text content (for type: "text")
position: [string, string] # Position as ["x%", "y%"] or ["xpx", "ypx"]
size: int? # Font size (default: 24)
color: string? # Hex color (default: "#000000")
weight: string? # "normal" or "bold" (default: "normal")
alignment: string? # "left", "center", "right" (default: "center")
# Image content properties
asset: string? # Image file path (for type: "image")
scale: float? # Scale factor (default: 1.0)
frame: bool? # Apply device frame (default: false)
Background Configuration
background:
type: "solid" | "linear" | "radial" | "conic"
colors: [string, ...] # Hex colors (e.g., ["#667eea", "#764ba2"])
direction: float? # Degrees for linear gradients (default: 0)
center: [string, string]? # Center point for radial/conic ["x%", "y%"]
Content Items
# Text Content Item
- type: "text"
content: string # Text to display
position: [string, string] # Position as ["50%", "20%"] or ["100px", "50px"]
size: int # Font size in pixels (default: 24)
# Fill Options (choose exactly one):
color: string # Solid color (hex format, e.g., "#000000")
# OR
gradient: # Text gradient
type: "linear" | "radial" | "conic"
colors: [string, ...] # Hex colors array (minimum 2)
positions: [float, ...]? # Color stops 0.0-1.0 (optional)
direction: float? # Angle in degrees (linear)
center: [string, string]? # Center point (radial/conic)
radius: string? # Radius for radial ("50%", "100px")
start_angle: float? # Starting angle (conic)
weight: string # "normal" or "bold" (default: "normal")
alignment: string # "left", "center", "right" (default: "center")
# Stroke Options (optional):
stroke_width: int? # Stroke width in pixels
stroke_color: string? # Solid stroke color (hex format)
# OR
stroke_gradient: # Gradient stroke (same structure as gradient)
# Image Content Item
- type: "image"
asset: string # Path to image file
position: [string, string] # Position as ["50%", "60%"] or ["200px", "300px"]
scale: float # Scale factor (default: 1.0)
frame: bool # Apply device frame around image (default: false)
🏗️ Architecture
Koubou uses a clean, modular architecture:
- CLI Layer (
koubou.cli): Command-line interface with rich output - Configuration (
koubou.config): Pydantic-based type-safe configuration - Generation Engine (
koubou.generator): Core screenshot generation logic - Renderers (
koubou.renderers): Specialized rendering for backgrounds, text, frames - Device Frames (
koubou.frames): 100+ device frame assets and metadata
🔧 Development
Setup Development Environment
# Clone the repository
git clone https://github.com/bitomule/koubou.git
cd koubou
# Install in development mode with all dependencies
pip install -e ".[dev]"
# Run tests
pytest
# Run linting
black src/ tests/
isort src/ tests/
flake8 src/ tests/
mypy src/
Running Tests
# Run all tests with coverage
pytest -v --cov=src/koubou
# Run specific test file
pytest tests/test_generator.py -v
# Run with live output
pytest -s
🤝 Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Run tests and linting (
pytest,black,isort,flake8,mypy) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
📄 License
MIT License - see LICENSE for details.
🎯 Koubou Philosophy
In the spirit of Japanese craftsmanship, Koubou embodies:
- 職人気質 (Shokunin-kishitsu) - Artisan spirit and dedication to craft
- 完璧 (Kanpeki) - Pursuit of perfection in every detail
- 簡潔 (Kanketsu) - Elegant simplicity in design and usage
- 品質 (Hinshitsu) - Uncompromising quality in output
Every screenshot generated by Koubou reflects these values - carefully crafted, pixel-perfect, and ready for the world's most demanding app stores.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file koubou-0.4.0.tar.gz.
File metadata
- Download URL: koubou-0.4.0.tar.gz
- Upload date:
- Size: 53.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4668af47b447607493591edcb253d13c3423683f05722e5655505887e44d85a2
|
|
| MD5 |
983ba4da29198677da6a4f9f41bf6d2f
|
|
| BLAKE2b-256 |
c106803020ec7e65814d1ee9454b808078502d08defe0e0c6f9da2f565a093f8
|
File details
Details for the file koubou-0.4.0-py3-none-any.whl.
File metadata
- Download URL: koubou-0.4.0-py3-none-any.whl
- Upload date:
- Size: 36.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f2357eec7b2aaf19f15faa8efe7750fe43894230ae1254112fc5b8f425f8e987
|
|
| MD5 |
94d5479a2461cf4507d679f24df583cf
|
|
| BLAKE2b-256 |
02e6056f3b632bf20043e094fdd003b5ab764d161cd1d783b261acfcc2a4b969
|