Skip to main content

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 printers
  • PrinterDiscovery: recommended discovery API
  • FlashForgeA4Client: documented TCP client for Adventurer 4 Lite / Pro printers
  • FlashForgeA3Client: documented TCP client for Adventurer 3 printers
  • FlashForgeTcpClient and client.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 .3mf before 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)

Source distribution for flashforge-python-api 1.6.0
File Size Uploaded Provenance
flashforge_python_api-1.6.0.tar.gz 1.8 MB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for flashforge-python-api 1.6.0
File Interpreter ABI Platform
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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page