Files
firmware/docs/first-print.md
Oleksandr ShyshatskyiandClaude Opus 5 65a7528e09 The manual assumed a printer that arrives broken. It arrives calibrated.
The pages written on top of the old README inherited its premise: that after
flashing you face a gauntlet -- go/no-go checks, a safety net, a mandatory
calibration -- before the machine can be trusted with a model. That is not
what happens. The factory numbers import themselves on the first boot, a bed
mesh loads at the start of every print, and the mod is built to run the files
the stock firmware ran. A printer that printed before the flash prints after
it. "Your first print" now says so in its first line, and everything under it
is optional, ordered by what you would actually reach for: check the offsets
are applied, and calibrate only if that disagrees with the machine.

Three audiences now, because owner and contributor was not the real split.
"For experienced users" sits between them: How a print runs, and How
calibration works. Someone who knows Klipper and wants to change what happens
around their file has a place to go that is neither a walkthrough nor the
build system.

What was cut is most of what changed. Pages that were cryptic to the reader
they were aimed at -- Printing, Upgrading -- are out of the nav and kept on
disk to be rewritten rather than deleted. Within the pages that stayed:
Expected output, Probe sampling, What is being measured, the symptom table,
the dark-screen diagnosis, TOOL_Z_ADJUST, PLATE_CHECK, the ff-*.cfg
inventory, [ff_legacy] and SAVE_CONFIG in a paragraph about factory
calibration. Filenames and internals earn their place on an owner page only
when the reader has to type them or look at them; the rest moved to the
experienced pages or to Internals, where the audience wants them.

Calibration became a section rather than a page, because tool offsets are not
the only calibration: bed mesh has its own page now, and its own gotcha
written down -- BED_MESH_CALIBRATE writes `default`, a print loads
`MESH_DATA`, so a mesh probed by hand is a mesh no print will use. Input
shaping is described but has no procedure page yet.

Several claims came out because they were not true. "Is this for you" listed
calibration and input shaping as things the mod gives you; both are the
touchscreen's own sequences, recovered and reimplemented, and the notes say
so plainly. What the mod actually gives you is that anything speaking
Moonraker can drive the machine -- on stock, FlashForge's Klipper does not
toolchange at all, it raises a flag and waits for an application that is not
watching a Mainsail print, and the print hangs at the first T2. The page now
opens by telling most owners not to flash it.

Contributors are still deferred. Their pages are regrouped, not rewritten.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01S3XZh4SqPdXAowVndz6tMr
2026-08-28 23:33:29 +03:00

142 lines
5.5 KiB
Markdown

# Your first print
**If your printer was printing before you flashed, it will print now.** The
factory numbers came across on the first boot, a bed mesh is loaded at the
start of every print, and the mod is built to run the same files the stock
firmware ran. There is nothing you have to set up first.
What follows is what is worth doing anyway, the first time, before you leave
a long print unattended. None of it is mandatory. All of it is quicker than
scraping a failed first layer off the plate.
---
## Where everything is
Everything is on the printer's own address:
| | |
|---|---|
| `http://<printer-ip>/` | Mainsail |
| `http://<printer-ip>:7125` | Moonraker's API — what slicers upload to |
| `http://<printer-ip>/webcam/` | the camera stream (mjpg-streamer on `:8080`) |
| `ssh root@<printer-ip>` | the shell — password from `anvil-password.txt` |
```
/usr/data/anvil-install.log what the installer did
/usr/data/logs/anvil-boot.log services + UI choice at each boot
/usr/data/logs/printer.log klipper
/usr/data/logs/helixscreen.log helixscreen
```
They are the first thing to read when something is wrong, and the first thing
to quote when you ask on [the Discord](https://discord.gg/ggJyfgVA4v).
---
## Check the offsets are applied
**Recommended.** Not because it is likely to be wrong, but because this is
the one thing that damages the machine when it is, and it costs two minutes.
Before moving anything:
* `TOOLCHANGE_STATUS` — current tool as derived from the dock sensors, every
sensor's state, each tool's nozzle position and `z_adjust`, `station_z`,
dock coordinates and the derived offsets (`offset_z` is each tool's
absolute bed-frame gap, ~3.2). Check the `dock_x`/`dock_y` rows are
numbers, not `nan`.
* `TOOL_OFFSET_STATUS` — saved calibration per tool and for the station,
and a warning if anything is staged but not yet `SAVE_CONFIG`'d.
* Physical Z check (clean bed, nothing on it):
```gcode
G28
T0
TOOLCHANGE_SET_PRINT_OFFSET NOZZLE=220 BED=80 LAYER=0.25 TOOL=0
G1 X150 Y150 F6000
G1 Z0.1 F600
```
`T0` already applies the ~+3.2 mm gap (watch the gcode Z offset in the
UI); the offset command reports the full Z with a term-by-term breakdown,
and the nozzle should end up a paper-thickness above the bed at the
center. If it presses into the plate instead, STOP — the offset is not
being applied; do not print until `TOOLCHANGE_STATUS` and
`TOOL_OFFSET_STATUS` are clean. Afterwards restore the idle state:
```gcode
G1 Z10 F1200
TOOLCHANGE_PARK ; drops the per-tool frame
TOOLCHANGE_SET_PRINT_OFFSET CLEAR=1 ; and this the job term
```
`SET_GCODE_OFFSET Z=0` is *not* the way to clear the job term any more:
it cannot tell that term from your babystep, so it would take both.
A touchscreen recalibration no longer affects this module. Recalibrate from
Klipper instead — [XYZ tool calibration](calibration.md) — or repeat the
import step if you really want the touchscreen's numbers.
---
## If something looks off, calibrate
Only if you need it — a machine that measures correctly above does not need
this. Run it when the check disagrees with reality, when a tool has been
refitted or dropped, or when one tool prints at a different height from the
rest.
Re-measuring replaces the factory numbers with your own; it does not repair
anything else, and it is not a routine step. Background:
[Calibration](calibration-overview.md).
**Take the PEI sheet off first** — the calibration station sits below the bed
plane — then home and calibrate:
```gcode
G28
CALIBRATE_TOOL_OFFSETS
SAVE_CONFIG
```
Step by step, with every message it can refuse with, and what each refusal
means: [XYZ tool calibration](calibration.md).
Afterwards, `TOOLCHANGE_STATUS` and `TOOL_OFFSET_STATUS` should show a nozzle
triple and a dock position for every tool, and nothing should say
`NOT CALIBRATED`.
---
## The two verification files
Two G-code files live in [`gcode/`](../gcode/) in the repository. They are
not models: they exercise the things a real print depends on, in the order a
real print uses them, so a mistake shows up on a bare plate rather than
halfway through a job.
Send them the way you send any print — Mainsail's upload, or your slicer's
Moonraker target.
| File | What it does |
|---|---|
| [`creator5-safe-moves.gcode`](../gcode/creator5-safe-moves.gcode) | The whole sequence with the heat and the filament taken out. Nothing extrudes, no heater is given a target, and after homing nothing moves below Z50. It answers whether homing, tool changes and the end sequence behave — before a nozzle can reach the plate. |
| [`creator5-feature-test.gcode`](../gcode/creator5-feature-test.gcode) | The real thing, hot, with two tools: one ring per tool to read XY offsets off the plate, a solid first layer to judge squish, the fan map, a chamber-heater check, and a tower with a tool change on every layer. |
Run the safe one first. Each file's own header repeats what it does, so
whoever is standing at the machine has it in front of them.
Two refusals are the gates working rather than faults: a complaint that the
machine is not calibrated, and "Refusing to home Z: cannot tell whether a
tool is mounted", which means the dock switches disagree — run
`TOOLCHANGE_STATUS` and find the one that is lying.
---
## A real print
Now slice something small and print it the way you will print everything
else: the stock FlashForge profile, uploaded through Mainsail or your
slicer's Moonraker target. Stay at the machine for the first one.