Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

transcriptionstream/phomymo

Repository files navigation

Phomymo

A free, browser-based label designer for Phomemo thermal printers. No drivers needed - connects via Bluetooth or USB.

Try it now: https://phomymo.affordablemagic.net

Phomymo Label Designer Mobile UI

Quick Start

  1. Open https://phomymo.affordablemagic.net in Chrome (or any Chromium-based browser)
  2. Click Connect to pair with your printer via Bluetooth (or USB for PM-241)
  3. Design your label and click Print

To run locally (Web Bluetooth requires HTTPS or localhost):

cd src/web
python3 -m http.server 8080
# Open http://localhost:8080 in Chrome

Requires: Chrome, Edge, or another Chromium-based browser. Web Bluetooth is not available in Firefox or Safari. Android Chrome is supported with full touch UI; iOS is not supported. PM-241 printers require USB (WebUSB).

Features

Design Elements - Text (multiple fonts including local system fonts, sizes, styles, alignment, background colors), images with scale/aspect lock, barcodes (Code128, EAN-13, UPC-A, Code39), QR codes, and shapes (rectangle, ellipse, triangle, line) with solid, dithered grayscale, and stroke fills.

Editing - Drag to move, corner/edge resize handles, rotation. Multi-select (Shift+click), grouping (Ctrl/Cmd+G), undo/redo, keyboard nudge, layer ordering, clipboard image paste (Ctrl/Cmd+V).

Label Sizes - Preset sizes for each printer type, round labels, custom dimensions. Auto-switches based on connected printer. Multi-label rolls with clone or individual zone modes.

Templates & Batch Printing - Variable fields with {{FieldName}} syntax, CSV import, preview grid, and batch printing with progress tracking.

Instant Expressions - Dynamic values at print time using [[expression]] syntax: [[date]], [[time]], [[datetime]], or custom formats like [[date|MM/DD/YYYY]]. Works in text, barcodes, and QR codes.

Print Preview - Toggle dither preview to see exact thermal print output before printing.

Export - Save/load designs to browser storage, export/import as JSON, export to PDF or PNG.

Mobile - Full-featured touch UI with pinch-to-zoom, two-finger pan, slide-up property panels, and complete feature parity with desktop.

Printer Status - Live battery level, paper status, firmware version, and serial number with auto-query on connect.

Supported Printers

Model Width Notes
P12 / P12 Pro 12mm Continuous tape label maker
A30 12-15mm Continuous tape, faster print speed
M02 / M02S / M02X 48mm (384px) Mini pocket printers, continuous paper
M02 Pro 53mm (626px) 300 DPI high-resolution mini printer
M03 53mm (432px) Mini sticker printer
T02 48mm (384px) Mini sticker printer
M04S / M04AS 53/80/110mm 300 DPI multi-width printer (select paper size in settings)
M110 / M120 48mm (384px) Narrow label makers
M200 / M250 75mm (608px) Mid-size labels
M220 / M221 72mm (576px) Wide labels
M260 72mm (576px) Wide label maker
D30 / D35 / D50 / D110 12-15mm Smart mini label makers (rotated protocol)
Q30 / Q30S 12-15mm Similar to D30
PM-241 / PM-241-BT 102mm (4") Shipping labels, USB only (TSPL protocol)

The app auto-detects your printer model from the Bluetooth device name and configures the correct protocol, print width, DPI, and label presets. If auto-detection fails, you can manually select your model in Print Settings, or the app will prompt you on first connection.

D-series printers print labels rotated 90° - the app handles this automatically. PM-241 printers use Bluetooth Classic (not BLE), so use the USB connection instead.

Custom Printer Definitions

You can add, edit, and override printer definitions through Print Settings > Manage Printers. This lets you:

  • Add new printers not yet in the built-in list with your own protocol, width, DPI, and alignment settings
  • Override built-in printers to adjust settings like alignment or width for your specific hardware
  • Set auto-detect patterns so your custom definitions are recognized automatically by BLE device name

Custom definitions are saved in your browser's localStorage and take priority over built-ins. Modified built-in printers can be reset to defaults at any time.

Built-in definitions are loaded from printers.json at startup.

Keyboard Shortcuts

Shortcut Action
Ctrl/Cmd + Z Undo
Ctrl/Cmd + Shift + Z Redo
Ctrl/Cmd + D Duplicate selected
Ctrl/Cmd + G Group selected
Ctrl/Cmd + Shift + G Ungroup
Ctrl/Cmd + V Paste image from clipboard
Delete / Backspace Delete selected
Arrow keys Nudge by 1px
Shift + Arrow keys Nudge by 10px
Shift + Click Add to selection

Connection Tips

When the Bluetooth device picker appears, select the device showing a signal strength indicator. Devices listed without signal strength may be cached/ghost entries that won't connect properly.

Project Structure

phomymo/
├── src/
│ └── web/
│ ├── index.html # Main UI
│ ├── app.js # Application logic
│ ├── canvas.js # Canvas rendering & dithering
│ ├── elements.js # Element management
│ ├── handles.js # Selection handles
│ ├── storage.js # localStorage persistence
│ ├── templates.js # Variable substitution & CSV
│ ├── ble.js # Web Bluetooth transport
│ ├── usb.js # WebUSB transport
│ ├── printer.js # Print protocols
│ ├── printers.json # Built-in printer definitions
│ ├── constants.js # Shared constants
│ └── utils/
│ ├── bindings.js # Event binding helpers
│ ├── errors.js # Error handling
│ └── validation.js # Input validation
└── README.md

Acknowledgments

Protocol research and inspiration:

Libraries: JsBarcode, QRCode.js, jsPDF

Support the Project

If Phomymo is useful to you, consider making a donation to support ongoing development.

License

MIT License - see LICENSE file for details.

About

Design & Print directly to Phomemo printers without the Phomemo app or drivers - just a chrome based browser.

Topics

Resources

Stars

Watchers

Forks

Sponsor this project

Contributors

AltStyle によって変換されたページ (->オリジナル) /