Simple REST api for Brother P-touch printers
  • Rust 40.6%
  • JavaScript 37.1%
  • Nix 13%
  • CSS 5.2%
  • HTML 4.1%
Find a file
2025-09-19 00:53:48 +02:00
.forgejo/workflows cleanup ci 2025-09-19 00:31:55 +02:00
nix initial version 2025-09-18 02:59:36 +02:00
src change status output 2025-09-18 19:27:13 +02:00
.envrc init 2025-09-18 01:00:16 +02:00
.gitignore initial version 2025-09-18 02:59:36 +02:00
51-ptouch-api-everyone.rules readme updates 2025-09-19 00:53:48 +02:00
51-ptouch-api.rules initial version 2025-09-18 02:59:36 +02:00
Cargo.lock change status output 2025-09-18 19:27:13 +02:00
Cargo.toml change status output 2025-09-18 19:27:13 +02:00
flake.lock init 2025-09-18 01:00:16 +02:00
flake.nix release ci 2025-09-19 00:31:16 +02:00
README.md readme updates 2025-09-19 00:53:48 +02:00

ptouch-api

Simple REST api for Brother P-touch label printers.

Installation

You can download pre-built binaries from the releases page or build it yourself using cargo build.

Configuring

[listen]
# by default the server listens over tcp
# address = "0.0.0.0" # defaults to "127.0.0.1"
# port = 1234 # defaults to 7074
# you can set it to listen over a unix socket instead.
socket = "/run/ptouch-api.sock"

In additional to the listen configuration, the server will automatically detect if it get's activated trough systemd socket activation and takes the provided socket.

Usage

ptouch-api [--config config.toml]

Permissions

You'll need to either run ptouch-api as root or setup a udev rule to change the owner or permissions to allow ptouch-api to access the label printer over usb.

See 51-ptouch-api.rules for an example udev rule, placing this into /etc/udev/rules.d and adjusting the username as desired should give the specified user access to the ptouch printer.

Alternatively you can use 51-ptouch-api-everyone.rules to give all users on the system access to the label printer.

API

  • GET /status: get printer and tape status for details about the fields.
  • PUT /print: print the uploaded image, supports png, jpg and bmp

Status

The returned status is a json with the following fields

  • media_width: width of the loaded tape in mm.
  • pixel_width: the width of the printed image in pixels.
  • media_type: material type of the loaded tape.
  • text_color: text color for the loaded tape.
  • tape_color: tape color for the loaded tape.

Supported printers

The following printers are currently supported

  • PT-9200DX
  • PT-2300
  • PT-2420PC
  • PT-2450PC
  • PT-1950
  • PT-2700
  • PT-1230PC
  • PT-2430PC
  • PT-1230PC_PLite
  • PT-2430PC_PLite
  • PT-2730
  • PT-H500
  • PT-E500
  • PT-P700
  • PT-P750W
  • PT-P700_PLite
  • PT-P750W_PLite
  • PT-D410
  • PT-D450
  • PT-D460BT
  • PT-D600
  • PT-D610BT
  • PT-P710BT

NixOs module

For NixOs users, a module is available as a flake that includes everything needed run the api.

{
  inputs.ptouch-api.url = "git+ssh://git@codeberg.org/icewind/ptouch-api.git";

  outputs = { self, nixpkgs, ptouch-api }: {
    nixosConfigurations.my-machine = nixpkgs.lib.nixosSystem {
      modules =
        [
          ptouch-api.nixosModules.default
          ({config, ...}: {
            # enable the api service and setup the udev rules
            services.ptouch-api = {
              enable = true;
              # socket = "/path/for/socket/to/listen"; # defaults to /run/ptouch-api/ptouch-api.sock
            };
            # expose the api to the outside world
            services.nginx = {
              virtualHosts."ptouch.example.com" = {
                locations."/" = {
                  proxyPass = "http://unix://${config.services.ptouch-api.socket}";
                };
              };
            };
          })
          # ... other configuration ...
        ];
    };
  };
}