Skip to main content

Generate and embed QR codes into images via Python, CLI, and FastAPI.

Project description

QR Builder

CI Python 3.9+ License: MIT

A production-ready Python package for generating QR codes with multiple artistic styles. Perfect for marketing materials, product packaging, event flyers, and website integration.

Features

  • 5 QR Code Styles:

    • Basic - Simple QR codes with custom colors
    • With Logo - Logo/image embedded in QR center
    • With Text - Text/words displayed in QR center
    • Artistic - Image transforms INTO the QR code pattern (colorful)
    • QArt - Halftone/dithered artistic style
  • Multiple Interfaces:

    • REST API via FastAPI with OpenAPI documentation
    • CLI for command-line usage
    • Web interface with visual builder
    • WordPress-embeddable widget
    • Python library for programmatic use
  • Production Ready:

    • Docker support
    • CORS enabled for web integration
    • Batch processing for multiple images
    • Quality presets for artistic QR codes

Quick Start

Installation

# From source
git clone https://github.com/aiqso/qr-builder.git
cd qr-builder
pip install -e ".[dev]"  # Include dev dependencies for testing

CLI Usage

# Generate a basic QR code
qr-builder qr "https://example.com" qr.png --size 600

# QR with logo in center
qr-builder logo "https://example.com" logo.png output.png --scale 0.25

# QR with text in center
qr-builder text "https://example.com" "HELLO" output.png --font-color "#e07030"

# Artistic QR (image becomes the QR pattern)
qr-builder artistic "https://example.com" image.png output.png --preset large

# QArt halftone style
qr-builder qart "https://example.com" image.png output.png --version 10

# Embed QR into background image
qr-builder embed background.jpg "https://example.com" output.png \
  --scale 0.3 --position bottom-right

# Batch embed into all images in a directory
qr-builder batch-embed ./images "https://example.com" ./output --glob "*.jpg"

Python Library

from qr_builder import (
    generate_qr_only,
    generate_qr_with_logo,
    generate_qr_with_text,
    generate_artistic_qr,
    generate_qart,
    generate_qr_unified,
    QRConfig,
    QRStyle,
    ARTISTIC_PRESETS,
)

# Basic QR code
generate_qr_only("https://example.com", "qr.png", size=500)

# QR with logo
generate_qr_with_logo(
    "https://example.com",
    "logo.png",
    "output.png",
    logo_scale=0.25,
)

# QR with text
generate_qr_with_text(
    "https://example.com",
    "HELLO",
    "output.png",
    font_color="#e07030",
)

# Artistic QR with preset
generate_artistic_qr(
    "https://example.com",
    "image.png",
    "output.png",
    preset="large",
    colorized=True,
)

# Unified interface with configuration
config = QRConfig(
    style=QRStyle.ARTISTIC,
    data="https://example.com",
    output_path="output.png",
    source_image="image.png",
    preset="hd",
    colorized=True,
)
generate_qr_unified(config)

Web Interface

Start the visual web interface:

python server.py
# Visit http://localhost:8080

Features:

  • Tab-based interface for all 5 QR styles
  • Live preview
  • Color pickers
  • Preset selection for artistic QR codes
  • Download generated QR codes

REST API

Start the API server:

# Using uvicorn
uvicorn qr_builder.api:app --reload --port 8000

# Visit http://localhost:8000/docs for interactive API docs

Endpoints:

Method Endpoint Description
GET /health Health check
GET /styles List available styles and presets
POST /qr Generate basic QR code
POST /qr/text QR with text in center
POST /qr/logo QR with logo in center
POST /qr/artistic Artistic QR (image becomes QR)
POST /qr/qart Halftone/dithered QR
POST /embed Embed QR into background image
POST /batch/embed Batch embed (returns ZIP)
POST /batch/artistic Batch artistic QR (returns ZIP)

See docs/API.md for complete API documentation.

WordPress Integration

Embed the QR Builder in any WordPress site:

  1. Copy wordpress/qr-builder-widget.html
  2. Add to WordPress via Custom HTML block
  3. Update QR_API_URL to your server address

See wordpress/README.md for detailed instructions.

Artistic Presets

For artistic QR codes, use presets for optimal quality:

Preset Version Best For
small 5 Web thumbnails, social media
medium 10 General use, business cards
large 15 Print, marketing materials
hd 20 Large format, high detail

Docker Deployment

# Build and run
docker build -t qr-builder .
docker run -p 8080:8080 qr-builder python server.py

# Or with Docker Compose
docker compose up --build

Environment variables:

Variable Default Description
QR_SERVER_HOST 0.0.0.0 Server host binding
QR_SERVER_PORT 8080 Server port

Project Structure

qr-builder/
├── qr_builder/
│   ├── __init__.py      # Package exports
│   ├── core.py          # Core QR generation (5 styles)
│   ├── cli.py           # Command-line interface
│   └── api.py           # FastAPI REST API
├── server.py            # Web interface server
├── wordpress/
│   ├── qr-builder-widget.html  # WordPress embed widget
│   └── README.md               # WordPress integration guide
├── docs/
│   └── API.md           # API documentation
├── tests/
│   ├── test_core.py     # Core function tests
│   └── test_api.py      # API endpoint tests
├── .github/
│   └── workflows/
│       └── ci.yml       # GitHub Actions CI
├── pyproject.toml       # Package configuration
├── Dockerfile           # Docker image
├── docker-compose.yml   # Docker Compose config
└── README.md

Use Cases

  • Marketing materials - Branded QR codes with company images
  • Product packaging - Artistic QR codes that match design
  • Event tickets - Visually appealing check-in codes
  • Business cards - QR codes with logos or text
  • Restaurant menus - Stylish codes for online ordering
  • Social media - Eye-catching QR codes for profiles
  • Website widgets - Generate QR codes dynamically via API
  • WordPress sites - Embeddable QR generator for visitors

Requirements

  • Python 3.9+
  • Dependencies: qrcode, Pillow, amzqr, pyqart, segno, fastapi, uvicorn

License

MIT License - see LICENSE for details.

Contributing

Contributions are welcome! Please open an issue or submit a pull request.

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

Support

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

qr_builder-0.3.0.tar.gz (34.9 kB view details)

Uploaded Source

Built Distribution

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

qr_builder-0.3.0-py3-none-any.whl (30.2 kB view details)

Uploaded Python 3

File details

Details for the file qr_builder-0.3.0.tar.gz.

File metadata

  • Download URL: qr_builder-0.3.0.tar.gz
  • Upload date:
  • Size: 34.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for qr_builder-0.3.0.tar.gz
Algorithm Hash digest
SHA256 89a04ff6b375af43ac139d8fa44e9dd6110df84eaac97616c25c9a0481a1b1d0
MD5 ca41644521cee72a2c036ce45c432f4d
BLAKE2b-256 0482c618dbfba786fb988756773e9cdc1284b9518aa1f8bb4f88913458d16841

See more details on using hashes here.

File details

Details for the file qr_builder-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: qr_builder-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 30.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for qr_builder-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b9a6409ee680f350d309ad65f37f1e72124e2d7d2c7539027b62a5443d8c220c
MD5 f076869ee0b73dace687f1064d36a9ff
BLAKE2b-256 5239b3a0dc93c401f594e32f18db259b2d8321fce3aece4f72e35505c9dcf659

See more details on using hashes here.

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