FlashForge Python API
Python library for controlling FlashForge 3D printers with async support for the modern HTTP API and the legacy TCP protocol.
Supported Printers
| Printer | Support |
|---|---|
| Adventurer 5M | Full |
| Adventurer 5M Pro | Full |
| AD5X | Full |
| Creator 5 | Full (HTTP-only) |
| Creator 5 Pro | Full (HTTP-only) |
| Adventurer 3 / 4 | Dedicated TCP clients |
Installation
pip install flashforge-python-api
Quick Start
Modern LAN-mode HTTP printers require:
- printer IP address
- serial number
- check code (per-printer credential, not returned by discovery)
import asyncio
import os
from flashforge import FlashForgeClient, FiveMClientConnectionOptions, PrinterDiscovery
async def main():
check_code = os.getenv("FLASHFORGE_CHECK_CODE", "").strip()
if not check_code:
print("Set FLASHFORGE_CHECK_CODE before running this example")
return
discovery = PrinterDiscovery()
printers = await discovery.discover()
if not printers:
print("No printers found")
return
printer = printers[0]
if not printer.serial_number:
print("Discovered printer did not report a serial number")
return
options = FiveMClientConnectionOptions(
http_port=printer.event_port,
tcp_port=printer.command_port,
)
async with FlashForgeClient(
printer.ip_address,
printer.serial_number,
check_code,
options=options,
) as client:
status = await client.get_printer_status()
if not status:
return
await client.init_control()
status = await client.get_printer_status()
print(f"Printer: {client.printer_name}")
print(f"State: {status.machine_state if status else 'unknown'}")
await client.control.home_axes()
asyncio.run(main())
Main Entry Points
FlashForgeClient: primary client for modern printersPrinterDiscovery: recommended discovery APIFlashForgeA4Client: documented TCP client for Adventurer 4 Lite / Pro printersFlashForgeA3Client: documented TCP client for Adventurer 3 printersFlashForgeTcpClientandclient.tcp_client: lower-level TCP access for direct commands and generic legacy workflows
Capabilities
- printer discovery
- printer status and machine information
- job control
- file listing, uploads, and thumbnails
- temperature and motion control, including per-nozzle and chamber temperature control (Creator 5)
- LED, camera, and filtration control where supported
- AD5X and Creator 5 / Creator 5 Pro material-station, slot configuration, and material mapping
- sliced 3MF parsing: read the tools, materials, colors, estimates, and thumbnail of a
.3mfbefore upload
Parse a Sliced 3MF
A sliced 3MF tells you which filaments (tools) a print uses. The Creator 5 series does not report this for stored files, so read the 3MF before you upload it. Then build one material mapping per filament.
import asyncio
from flashforge import AD5XMaterialMapping, parse_3mf
async def build_mappings(path: str) -> list[AD5XMaterialMapping]:
# parse_3mf is synchronous file I/O, so run it in a worker thread.
info = await asyncio.to_thread(parse_3mf, path)
print(f"{info.file_name}: {info.tool_count} tool(s), sliced for {info.printer_family}")
mappings = []
for filament in info.filaments:
mappings.append(
AD5XMaterialMapping(
tool_id=filament.tool_id, # 0-based: filament 1 is tool 0
slot_id=filament.tool_id + 1, # choose the station slot to print from
material_name=filament.material_name,
tool_material_color=filament.color or "#FFFFFF",
slot_material_color=filament.color or "#FFFFFF",
)
)
return mappings
In a real app, pick slot_id and slot_material_color from the slots the printer reports. Pass the mappings to upload_file_creator5 / start_creator5_job (Creator 5 series) or upload_file_ad5x (AD5X).
parse_3mf accepts one sliced plate only. A project file with no sliced G-code raises ThreeMFNotSlicedError. A file with more than one sliced plate raises ThreeMFMultiplePlatesError. All 3MF errors subclass ThreeMFError.
Documentation
Metadata
Release files for flashforge-python-api 1.6.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| flashforge_python_api-1.6.0.tar.gz | 1.8 MB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| flashforge_python_api-1.6.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.9 MB
Release files / flashforge_python_api-1.6.0.tar.gz
| Download URL | flashforge_python_api-1.6.0.tar.gz |
|---|---|
| Size | 1.8 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fa4ebeaede1acab54ef365c3b5ae4f693ab0eb724624eb7f60454aff543522d0
|
|
BLAKE2b-256 checksum How to use checksums |
0c6f3634fa9058380e8643a1cd2eb90e7fd82bcf9a3409c9b183fc3cea6eb21d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|
Release files / flashforge_python_api-1.6.0-py3-none-any.whl
| Download URL | flashforge_python_api-1.6.0-py3-none-any.whl |
|---|---|
| Size | 109.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8f2a95effd9a3f76ee8d2c1f2628ddb531275b3bbda14c106a12a894d030b444
|
|
BLAKE2b-256 checksum How to use checksums |
0be30f893ed1776988c61a932af375bc083174abb4b3208ffb5084a0667bf144
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|
Security for flashforge-python-api 1.6.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.