mrkeyoor.com_
Wed 07 Oct 07:31 UTC
Dev Toolsevaluationupdated 07 Oct 2026

niimbot review

niimbot is an experimental firmware patch for the Niimbot B1 label printer on firmware 5.22. It removes the darkness limit on third-party labels and connects the printer's five density settings to print-head energy. The documentation is in English and includes the patched binaries, reverse-engineering notes, assembly hooks, and a small USB printing tool.

Verdict

Our niimbot run installed 35 packages and built in 21 seconds total, but it had no automated test target and never proved a flash on physical hardware. Use it only on a B1 already running firmware 5.22, after checking the supplied MD5 and accepting that recovery may become a hardware problem. Everyone else should keep the stock firmware and use a printer client such as niimblue.

We ran it

Lab card: what happened when we ran niimbotScreenshot of niimbot (github.com/ThreeDaPrint/niimbot)
Install✓ · 17s35 packages · 37 MB
Build✓ · 4s
Testsn/ano test script
Known vulns0(pip-audit)
Repo13 files~320 lines of source · 0.3 MB · 0 CI workflows

Answers from our run

Does niimbot build from source?

Dependencies installed in 17 seconds (35 packages), and the build succeeded in 4 seconds. We cloned commit 3c7a489 into a clean Debian container with 3 CPUs and no project-specific setup.

Does niimbot have tests you can run?

Not through a standard command: the project exposes no test script or target that our harness could run.

Does niimbot have known vulnerabilities in its dependencies?

pip-audit found none in the dependency tree at the time of our run.

Who should not use niimbot?

Owners of any printer other than the B1 on firmware 5.22: the README says flashing another model or crossing major firmware versions can brick the device.

What are the alternatives to niimbot?

niimblue, NiimPrintX. Our niimbot run installed 35 packages and built in 21 seconds total, but it had no automated test target and never proved a flash on physical hardware.

Setup2/5Build passes, but flashing needs exact firmware and physical recovery
Docs4/5Detailed patch map, assembly, checksums, printing, and fallback
Community2/5124 stars and maintainer replies, but the project is weeks old
Maturity1/5One model and version, no release tag, license, CI, or test target

Who it’s for

Niimbot B1 owners who have confirmed firmware 5.22 and want darker prints on third-party label rolls.
Hardware tinkerers who can inspect Cortex-M0 assembly, compare firmware bytes, and recover to stock firmware.
Right-to-repair researchers studying the B1 protocol, density setting, or RFID behavior.
Developers who can test each density on paper before trusting the modified firmware.

Who it’s NOT for

Owners of any printer other than the B1 on firmware 5.22: the README says flashing another model or crossing major firmware versions can brick the device.
Anyone experimenting on their only working printer: the project gives no warranty, and recovery still depends on the device accepting another flash.
Teams that require automated hardware regression checks: the repository has five printable test images, but our run found no test script or target.
Businesses that need clear reuse rights: the repository has no license file, and GitHub reports no license.
Users wanting a finished Bluetooth label-design app: the included Python tool is a minimal USB driver, while flashing uses a separate Node.js CLI.

Setup reality

Our sandbox installed commit 3c7a489 in 17 seconds, pulling 35 packages and using 37 MB. The build succeeded in 4 seconds. There was no test script or target, so tests were skipped. Pip-audit reported 0 known vulnerabilities.

Flashing needs a physical B1 already running firmware 5.22, USB serial access, Node.js, and the separate @mmote/niimblue-node CLI. The Python printing tool imports pyserial and Pillow and expects the printer at /dev/ttyACM0 by default.

The 0.3 MB checkout has 13 files, no Dockerfile, no CI workflow, and no tests directory. A successful software build does not confirm that the binary flashes, prints correctly, or can be recovered on your printer.

Firmware 5.22 on the B1 is the entire supported target

niimbot changes one printer and one firmware line: the Niimbot B1 running version 5.22. The repository's main binary makes density levels D1 through D5 control print darkness, including on third-party or untagged paper. Its documented mapping runs from coefficient 270 at D1 to 400 at D5. The author calls D3 the practical minimum for typical paper and reserves D1 for more sensitive thermal stock. We did not verify those print results.

That narrow target is the first check, not a footnote. The README warns against flashing another model or moving between major firmware branches such as 5.x and 6.x. It says either mistake can brick the printer. Before touching the binary, the included Python driver can query the B1's firmware version over USB. If the answer is anything except 5.22, the supplied images are out of scope.

Two 120,288-byte binaries offer density control or fixed darkness

The repository contains two firmware files, each 120,288 bytes. B1_5.22_density_coeff.bin is the main patch, with a documented MD5 of 023ff56326fe8c65f01b68f32ebdba99. The fallback image keeps full darkness fixed and drops density control. The README also points users back to official 5.22 firmware for a full stock revert. Matching a checksum guards against a damaged download; it does not establish that your printer is compatible.

The reverse-engineering notes are unusually specific for a 13-file repository. They identify the density byte, show the five multipliers, describe two Cortex-M0 code-cave detours, and publish the assembly and linker script. The notes say the patch changes 112 bytes on top of the fixed-darkness build. That is enough for a skilled reader to audit the intended edits. The original vendor source and a reproducible end-to-end firmware build are not present.

What happened when we ran it

Our sandbox installed commit 3c7a489 in 17 seconds, adding 35 packages and occupying 37 MB. The build completed successfully in 4 seconds. Pip-audit found 0 known vulnerabilities. The checkout itself was 0.3 MB, with 13 files and about 320 lines of source. It had no Dockerfile and no CI workflow files.

Tests were skipped because the repository provides no test script or target, and our scan found no tests directory. The five PNG files under test-labels are manual print samples for D1 through D5, not automated cases. Our run therefore says the Python-side environment can install and the available build step can finish. It says nothing about flash success, paper darkness, RFID behavior, print-head temperature, or recovery after a bad image.

A 4-second build cannot validate the physical flash

The documented flash command calls @mmote/niimblue-node, a separate Node.js package, against a USB serial device such as /dev/ttyACM0. After flashing, the B1 is expected to power itself off and reappear on the same port after the user turns it on. Printing from this repository uses src/niimbot_b1.py, which depends on pyserial and Pillow and accepts only 384-pixel-wide images. That is a hands-on hardware procedure, even though our software build took 4 seconds.

Validation means printing all five supplied labels at their matching density settings and looking for a steady D1-to-D5 progression. The maintainer told one issue reporter that the patched 5.22 firmware had been tested on third-party rolls without an original RFID tag, using the project's USB driver. The same reply says they had not tested a genuine roll after its counter ran out. A 6.19 user reported that their printer still refused untagged media, which sits outside this patch's stated support.

Recovery depends on the B1 still accepting another image

The README provides a same-major fallback and points to stock 5.22 firmware, but it cannot promise recovery from every experiment. Open issue 4 concerns a user-modified 5.22 image that left a B1 able to print and connect while refusing a normal reflash. The maintainer explained that the published images do not include the 64 KB bootloader and suggested a stock reflash plus a full power cut. The user's damaged image was their own modification, not one of the two supplied binaries.

That distinction matters. The issue does not show that this repository's firmware bricked a printer. It does show how quickly firmware research becomes physical troubleshooting when an edit lands in the wrong place. The project's own advice to port the patch with a coding model should be treated as an analysis aid only. Compare every changed byte, keep the original image, and do not flash generated firmware without a manual review.

Three open issues and no license keep this experimental

GitHub showed 124 stars and 3 open issues on October 7, 2026. The repository was created on September 19 and last pushed on September 21. Maintainer replies arrived on September 27, and one documentation issue about the missing linker script was fixed and closed the day it was opened. That is responsive early activity, but there is no tagged release history yet.

GitHub reports no license, and the 13-file tree contains no license file. Public code is visible, yet reuse and redistribution rights are not stated. Combined with one supported model, one firmware version, no CI, and no automated test target, that makes niimbot a useful research artifact rather than a general printer upgrade. Its best reader owns the exact spare hardware and understands why a 4-second green build is only the beginning.

Alternatives

ProjectWhat it isPick it when
niimblueAn MIT-licensed web and desktop client for designing and printing labels on NIIMBOT hardware.pick this instead when you want a maintained printing interface without modifying printer firmware.
NiimPrintXA GPL-licensed Python library for printing over Bluetooth to several NIIMBOT models, including the B1.pick this instead when application-level Bluetooth printing matters more than changing darkness limits in firmware.

What people are saying

  1. [velocity-scout] ThreeDaPrint/niimbot

Sources

  1. niimbot repository and README
  2. B1 density coefficient reverse-engineering notes
  3. RFID behavior discussion for firmware 5.22 and 6.19
  4. Recovery discussion for a user-modified firmware image
  5. niimbot measured commit

More dev tools reviews

skills · sys1grep · ZygiskNext · AirCard-iOS · expo-dynamic-notifications · wx-cli-again · the whole board →