Files
firmware/docs/installing.md
T
MonstrofilandClaude Opus 5 e20ed98dac Refuse to install on FlashForge firmware older than 1.9.6 (#17)
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>
2026-09-08 10:39:37 +03:00

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:

The printer's screen after a refused flash: Reforge, not installed, update FlashForge firmware first, then flash this again. Needs 1.9.6 or newer. Nothing was changed.

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

  1. Format a USB stick as FAT32. Not exFAT, not NTFS.
  2. 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.
  3. Power the printer off.
  4. 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.
  5. Wait for the beep. The printer sounds when the install has finished.
  6. Reboot manually. Turn the power switch on the right side of the printer, near the power cable, off and on again.
  7. 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:

Boot screen: reading factory calibration Boot screen: setup complete

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.