ptouch-api/README.md
2025-10-28 20:12:49 +01:00

130 lines
3.4 KiB
Markdown

# ptouch-remote
Web interface and REST api for Brother P-touch label printers.
![ptouch remote screenshot](./images/light.png#gh-light-mode-only)
![ptouch remote screenshot](./images/dark.png#gh-dark-mode-only)
## Installation
You can download pre-built binaries from the
[releases page](https://codeberg.org/icewind/ptouch-remote/releases) or build it
yourself using `cargo build`.
## Configuring
```toml
[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-remote.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
```bash
ptouch-remote [--config config.toml]
```
## Permissions
You'll need to either run `ptouch-remote` as root or setup a udev rule to change
the owner or permissions to allow `ptouch-remote` to access the label printer
over usb.
See [51-ptouch-remote.rules](./51-ptouch-remote.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-remote-everyone.rules](./51-ptouch-remote-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.
- `margin_width`: the left and right margin on the tape that can't be printed.
- `media_type`: material type of the loaded tape.
- `text_color`: text color for the loaded tape.
- `tape_color`: tape color for the loaded tape.
(note that the tape is assumed to be horizontal here, so "width" is the short
short direction)
## 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.
```nix
{
inputs.ptouch-remote.url = "git+ssh://git@codeberg.org/icewind/ptouch-remote.git";
outputs = { self, nixpkgs, ptouch-remote }: {
nixosConfigurations.my-machine = nixpkgs.lib.nixosSystem {
modules =
[
ptouch-remote.nixosModules.default
({config, ...}: {
# enable the api service and setup the udev rules
services.ptouch-remote = {
enable = true;
# socket = "/path/for/socket/to/listen"; # defaults to /run/ptouch-remote/ptouch-remote.sock
};
# expose the api to the outside world
services.nginx = {
virtualHosts."ptouch.example.com" = {
locations."/" = {
proxyPass = "http://unix://${config.services.ptouch-remote.socket}";
};
};
};
})
# ... other configuration ...
];
};
};
}
```