A printer still on 1.9.4 does not come up on this package: the board firmware that release pairs with differs from the one klippy is built to talk to, the MCU never connects, and the failure is at the bottom of the stack -- no Klipper, so no screen and no Mainsail. From the outside it is indistinguishable from a bad flash, and the only way out is flashing stock again. So it is refused before anything is written, with the fix in the message: install FlashForge's own current firmware first, then this. That costs one more flash and leaves a working printer either way. WHAT IS READ is /usr/prog/PROGRAM/software, which holds one directory named for the version of FlashForge's software component -- install_component wipes the previous one before renaming the new one in. No package of ours ever ships a software component, so it goes on describing the printer rather than the mod. The highest is taken when a machine somehow holds two, so a leftover from an interrupted install cannot refuse a printer that should go ahead, and the comparison is field-by-field numeric because a string compare makes 1.9.10 older than 1.9.6. AN UNREADABLE VERSION IS INSTALLED ON. The two failures are not the same size: letting one through costs a printer that has to be flashed back to stock, while refusing on one would break the install path on every machine whose layout is not the one being read. THE REFUSAL HAS TO BE VISIBLE. It happens before the panel is switched to start.img and app_startup.sh goes on booting the printer, so from the outside the flash would just have done nothing. installer/stock-too-old.img is the frame it paints instead -- the same raw 480x800@32 framebuffer dump start.img is, rendered by the same ffscreen.py, so it needs nothing on the printer but `cat > /dev/fb0`. The version in it is DRAWN, so bin/pack.sh carries the command to re-render it when MIN_STOCK_VER changes. anvil-NOT-INSTALLED.txt on the USB stick is the copy that survives the power cycle. Three tests, on the replica. The machine there is a real one in the way that matters -- its /usr/prog/PROGRAM/software holds FlashForge's own 1.9.7 -- so "current firmware installs" needs no setup, the refusal swaps that directory for one holding 1.9.4 and restores it, and the third asserts that a stale 1.9.4 left BESIDE the real version does not refuse. The control matters more than the refusal: a gate that refused everything would pass the refusal test and brick every flash. qa/replica/test_upgrade.py is 19/19; the lane's 10 other failures are the ones master has on this bake. Claude-Session: https://claude.ai/code/session_01Fn1k6kaHWhUrsmBfpxjUcG Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
6.7 KiB
Installing
The printer's own updater does the work: one file on a FAT32 stick, plugged in at power-on. No jailbreak, no soldering, no opening the case, no ssh.
What to have ready
Before you flash anything:
- The stock FlashForge package for your model, downloaded and to hand. It is the undo button: copy it to a stick and flash it, and the printer is back to how it was. That is the only recovery step needing nothing but a USB port — no ssh, no screen. The stock packages are published at ghzserg/FF.
- Your printer's model and firmware version, both from Settings → About. A package for the other model is refused, and so is a printer on FlashForge firmware older than 1.9.6 — see Your printer's firmware has to be 1.9.6 or newer below. A package for the other model is not a valid recovery image either.
- The printer's IP address, and a machine that can reach it.
- Time to stand at the machine. The first print after a flash is not something to start and walk away from.
Whatever stick you use: FAT32, with the package at the root of it, not in a folder.
Which file do I need
Creator 5 and Creator 5 Pro are not interchangeable. The printer refuses a package built for the other model — the most common reason a flash "does nothing" — so pick the file whose name matches your machine on the Releases page:
| Your printer | The file |
|---|---|
| Creator 5 | Creator5-anvil-<date>.tgz |
| Creator 5 Pro | Creator5Pro-anvil-<date>.tgz |
Not sure which you have? On the printer: Settings → About.
Your printer's firmware has to be 1.9.6 or newer
Check Settings → About on the printer. If the firmware version there starts with anything below 1.9.6, install FlashForge's own current firmware first — Reforge will not install until you do.
The reason is the board firmware. On those older releases the boards inside the printer speak a different dialect to the one Reforge's Klipper expects, and the printer comes up with no motion and no screen at all. Rather than let that happen, the flash stops and tells you, and the printer boots as it did before:
FlashForge's own package updates the boards for you. Download the one for your model:
| Your printer | FlashForge 1.9.7 |
|---|---|
| Creator 5 | Creator5-1.9.7-1.2.9-20260810.tgz |
| Creator 5 Pro | Creator5Pro-1.9.7-1.2.9-20260810.tgz |
It installs exactly the way Reforge does — stick in, power on, wait — so the steps below work for it too. Let it finish and reboot, check Settings → About again, then flash Reforge.
Keep that file. It is also the undo button: flashing it puts the printer back to stock whenever you want it back.
The flash
- Format a USB stick as FAT32. Not exFAT, not NTFS.
- Copy the file for your model to the root of the stick. Not in a folder. Leave the name exactly as it is — the printer looks for that pattern.
- Power the printer off.
- Plug the stick in and power the printer on. It finds the package by itself and starts installing. The screen tells you to wait while it works; this takes a few minutes. Do not cut the power.
- Wait for the beep. The printer sounds when the install has finished.
- Reboot manually. Turn the power switch on the right side of the printer, near the power cable, off and on again.
- Pull the stick once it has rebooted — your root password is on it, in
anvil-password.txt.
The boot after that one is the long one, and it is the mod's rather than FlashForge's: a progress bar on a plain screen, for a minute or two, before HelixScreen appears. What the first boot does says what is happening behind it.
What the first boot does
The first boot after a flash is longer than the ones after it, and the screen shows a progress bar rather than HelixScreen for most of it. What you'll see, partway through and at the end:
Two things happen that happen only once:
- Your machine's factory calibration comes across. The dock and nozzle positions measured for your printer at the factory are copied into Klipper's own configuration, so it starts from its own numbers rather than from nothing. You do not have to do anything for this.
- A root password is chosen, and written to the stick. See below.
Do not cut the power during the first boot. While that copy is being saved is the one moment where an interrupted boot can cost you the factory numbers.
Your root password
The first install picks a random root password for your printer and writes it
to anvil-password.txt on the stick you flashed from. Read it, save it
somewhere safe, and delete the file from the stick.
- If the stick is not writable, no password is set at all — the install log says so.
- Later updates keep whatever password the printer already has, including one you have changed yourself. The stick gets a password exactly once.
Check that ssh root@<printer-ip> works before you go any further. That shell
is how you get in when the screen is dark, and it is worth confirming while
everything is still fine.
What it changes on the printer
Nothing you have to configure. The package brings its own Klipper additions and config files with it and wires them up itself, so the printer comes up working.
Your printer.cfg is never touched — not by this flash and not by any
update. It is your file, and it is where your own settings go.
The first flash does copy it. Reforge keeps its Klipper config in a directory
of its own, /usr/data/anvil-data/config, and seeds it once with your
printer.cfg and the config files beside it, calibration and all. That copy is
the live one from then on; FlashForge's /usr/data/config is left untouched,
which is what lets you flash back to stock cleanly. If you ever edit
printer.cfg by hand, edit the one in /usr/data/anvil-data/config.
Then work through Your first print, in order, with the emergency stop within reach: it starts with the checks that say whether the flash went well.

