Generate and embed QR codes into images via Python, CLI, and FastAPI.
Reason this release was yanked:
Published from old repo with stale metadata URLs; superseded by 0.3.2 from AIQSO/qr-builder
Project description
QR Builder
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/qvidal01/qrcode.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:
- Copy
wordpress/qr-builder-widget.html - Add to WordPress via Custom HTML block
- Update
QR_API_URLto 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.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Support
- GitHub Issues: https://github.com/qvidal01/qrcode/issues
- Documentation: https://github.com/qvidal01/qrcode
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 qr_builder-0.3.1.tar.gz.
File metadata
- Download URL: qr_builder-0.3.1.tar.gz
- Upload date:
- Size: 35.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
951e7268965da8c9d8e49b6ebabef5a2bbe9050477ac89e9db941f9d235b335c
|
|
| MD5 |
94d4ad9094a9f3182e25e38d3397e8a4
|
|
| BLAKE2b-256 |
5d52f621c699076fcdabdc4b5120fe76fd8d2f31ada6ff9071cbab891b70437a
|
File details
Details for the file qr_builder-0.3.1-py3-none-any.whl.
File metadata
- Download URL: qr_builder-0.3.1-py3-none-any.whl
- Upload date:
- Size: 30.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c5c4bded47eb2343b236f6f650f879828af1f42eacc897f5915febaa40f69eb2
|
|
| MD5 |
48b6e552dabaa36bc3a63ebf37acb4af
|
|
| BLAKE2b-256 |
30e28ecd2ef9f349580c8f617fc0dcf0b562442cebe921f85952d66d1efc7ff2
|