flashforge-python-api 1.0.0__py3-none-any.whl → 1.0.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -10,6 +10,7 @@ from ...models.machine_info import FFGcodeFileEntry
10
10
  from ...models.responses import GenericResponse, GCodeListResponse, ThumbnailResponse
11
11
  from ..constants.endpoints import Endpoints
12
12
  from ..network.utils import NetworkUtils
13
+ from pydantic import ValidationError
13
14
 
14
15
  if TYPE_CHECKING:
15
16
  from ...client import FlashForgeClient
@@ -90,7 +91,22 @@ class Files:
90
91
  return []
91
92
 
92
93
  # Parse the response using GCodeListResponse
93
- result = GCodeListResponse(**data)
94
+ try:
95
+ result = GCodeListResponse(**data)
96
+ except ValidationError:
97
+ raw_list = data.get("gcodeList", [])
98
+ if isinstance(raw_list, list):
99
+ entries: List[FFGcodeFileEntry] = []
100
+ for file_name in raw_list:
101
+ if isinstance(file_name, str):
102
+ entries.append(
103
+ FFGcodeFileEntry(
104
+ gcodeFileName=file_name,
105
+ printingTime=0,
106
+ )
107
+ )
108
+ return entries
109
+ return []
94
110
 
95
111
  # AD5X and newer printers provide detailed info in gcodeListDetail
96
112
  if result.gcode_list_detail and len(result.gcode_list_detail) > 0:
@@ -105,8 +121,8 @@ class Files:
105
121
  # Convert string array to FFGcodeFileEntry objects
106
122
  return [
107
123
  FFGcodeFileEntry(
108
- gcode_file_name=file_name,
109
- printing_time=0
124
+ gcodeFileName=file_name,
125
+ printingTime=0
110
126
  )
111
127
  for file_name in result.gcode_list
112
128
  ]
flashforge/client.py CHANGED
@@ -88,6 +88,7 @@ class FlashForgeClient:
88
88
  async def __aenter__(self):
89
89
  """Async context manager entry."""
90
90
  await self._ensure_http_session()
91
+ await self.initialize()
91
92
  return self
92
93
 
93
94
  async def __aexit__(self, exc_type, exc_val, exc_tb):
@@ -114,7 +114,7 @@ class FFPrinterDetail(BaseModel):
114
114
  estimated_left_weight: Optional[float] = Field(default=None, alias="estimatedLeftWeight")
115
115
  estimated_right_len: Optional[float] = Field(default=None, alias="estimatedRightLen")
116
116
  estimated_right_weight: Optional[float] = Field(default=None, alias="estimatedRightWeight")
117
- estimated_time: Optional[int] = Field(default=None, alias="estimatedTime")
117
+ estimated_time: Optional[float] = Field(default=None, alias="estimatedTime")
118
118
  external_fan_status: Optional[str] = Field(default=None, alias="externalFanStatus")
119
119
  fill_amount: Optional[float] = Field(default=None, alias="fillAmount")
120
120
  firmware_version: Optional[str] = Field(default=None, alias="firmwareVersion")
@@ -191,7 +191,7 @@ class FFMachineInfo(BaseModel):
191
191
  # Current print estimates
192
192
  est_length: float = 0.0
193
193
  est_weight: float = 0.0
194
- estimated_time: int = 0
194
+ estimated_time: float = 0.0
195
195
 
196
196
  # Fans & LED status
197
197
  external_fan_on: bool = False
@@ -0,0 +1,211 @@
1
+ Metadata-Version: 2.4
2
+ Name: flashforge-python-api
3
+ Version: 1.0.1
4
+ Summary: A comprehensive Python library for controlling FlashForge 3D printers
5
+ Project-URL: Homepage, https://github.com/GhostTypes/ff-5mp-api-py
6
+ Project-URL: Documentation, https://github.com/GhostTypes/ff-5mp-api-py#readme
7
+ Project-URL: Repository, https://github.com/GhostTypes/ff-5mp-api-py.git
8
+ Project-URL: Issues, https://github.com/GhostTypes/ff-5mp-api-py/issues
9
+ Author-email: GhostTypes <notghosttypes@gmail.com>
10
+ License-Expression: MIT
11
+ License-File: LICENSE
12
+ Keywords: 3d-printer,api,async,control,flashforge,python
13
+ Classifier: Development Status :: 5 - Production/Stable
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.8
17
+ Classifier: Programming Language :: Python :: 3.9
18
+ Classifier: Programming Language :: Python :: 3.10
19
+ Classifier: Programming Language :: Python :: 3.11
20
+ Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Topic :: Scientific/Engineering
22
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
23
+ Classifier: Topic :: System :: Hardware :: Hardware Drivers
24
+ Requires-Python: >=3.8
25
+ Requires-Dist: aiohttp>=3.8.0
26
+ Requires-Dist: netifaces>=0.11.0
27
+ Requires-Dist: pydantic>=2.0.0
28
+ Requires-Dist: requests>=2.31.0
29
+ Provides-Extra: all
30
+ Requires-Dist: black>=23.0.0; extra == 'all'
31
+ Requires-Dist: mypy>=1.0.0; extra == 'all'
32
+ Requires-Dist: pillow>=10.0.0; extra == 'all'
33
+ Requires-Dist: pre-commit>=3.0.0; extra == 'all'
34
+ Requires-Dist: pytest-asyncio>=0.21.0; extra == 'all'
35
+ Requires-Dist: pytest-cov>=4.0.0; extra == 'all'
36
+ Requires-Dist: pytest>=7.0.0; extra == 'all'
37
+ Requires-Dist: ruff>=0.1.0; extra == 'all'
38
+ Provides-Extra: dev
39
+ Requires-Dist: black>=23.0.0; extra == 'dev'
40
+ Requires-Dist: mypy>=1.0.0; extra == 'dev'
41
+ Requires-Dist: pre-commit>=3.0.0; extra == 'dev'
42
+ Requires-Dist: pytest-asyncio>=0.21.0; extra == 'dev'
43
+ Requires-Dist: pytest-cov>=4.0.0; extra == 'dev'
44
+ Requires-Dist: pytest>=7.0.0; extra == 'dev'
45
+ Requires-Dist: ruff>=0.1.0; extra == 'dev'
46
+ Provides-Extra: imaging
47
+ Requires-Dist: pillow>=10.0.0; extra == 'imaging'
48
+ Description-Content-Type: text/markdown
49
+
50
+ <div align="center">
51
+
52
+ # FlashForge Python API
53
+
54
+ A comprehensive Python library for controlling FlashForge 3D printers.
55
+
56
+ [![PyPI](https://img.shields.io/pypi/v/flashforge-python-api?style=for-the-badge&logo=pypi&logoColor=white)](https://pypi.org/project/flashforge-python-api/)
57
+ [![Python](https://img.shields.io/badge/Python-3.8%2B-blue?style=for-the-badge&logo=python&logoColor=white)](https://www.python.org/)
58
+ [![License](https://img.shields.io/badge/License-MIT-green?style=for-the-badge&logo=opensourceinitiative&logoColor=white)](LICENSE)
59
+
60
+ </div>
61
+
62
+ <div align="center">
63
+
64
+ ## Features & Capabilities
65
+
66
+ | Feature | Description |
67
+ | :--- | :--- |
68
+ | **Printer Discovery** | Automatic UDP broadcast discovery of printers on the network |
69
+ | **Full Control** | Movement (G1), Homing (G28), Temperature (M104/M140), Fans, LED |
70
+ | **Real-time Monitoring** | Live status (M119), Temperatures (M105), Print Progress (M27) |
71
+ | **Job Management** | Start, Pause, Resume, Cancel, File Upload & Listing |
72
+ | **Advanced Parsing** | Thumbnail extraction (M662), Endstop monitoring, Machine state |
73
+ | **Dual Protocol** | Modern HTTP API + Legacy TCP G-code support |
74
+ | **Async Support** | Native async/await implementation for all operations |
75
+ | **Type Safety** | Full type hints and Pydantic models for robust development |
76
+
77
+ <br>
78
+
79
+ ## Supported Hardware
80
+
81
+ | Model | Support Level | Connection Type |
82
+ | :--- | :--- | :--- |
83
+ | **FlashForge Adventurer 5M / 5M Pro** | Full Support | HTTP + TCP |
84
+ | **FlashForge Adventurer 5X** | Full Support | HTTP + TCP |
85
+ | **FlashForge Adventurer 3 / 4** | Partial Support | TCP (Legacy) |
86
+ | **Other Networked FlashForge Printers** | Experimental | TCP (Generic) |
87
+
88
+ <br>
89
+
90
+ ## Compatible Slicers
91
+
92
+ | Slicer | Compatibility | Notes |
93
+ | :--- | :--- | :--- |
94
+ | **OrcaSlicer** | High | Recommended for Adventurer 5M series |
95
+ | **FlashPrint** | Full | Official FlashForge slicer |
96
+ | **Orca-FlashForge** | High | Optimized for FlashForge printers |
97
+ | **Cura / PrusaSlicer** | Basic | Requires correct G-code flavor |
98
+
99
+ <br>
100
+
101
+ ## Installation
102
+
103
+ | Command |
104
+ | :--- |
105
+ | `pip install flashforge-python-api` |
106
+
107
+ </div>
108
+
109
+ <div align="center">
110
+ <h2>Usage Examples</h2>
111
+ </div>
112
+
113
+ <div align="center">
114
+ <h3>Printer Discovery</h3>
115
+ Discover printers on your local network automatically.
116
+ </div>
117
+
118
+ ```python
119
+ from flashforge import FlashForgePrinterDiscovery
120
+ import asyncio
121
+
122
+ async def discover():
123
+ discovery = FlashForgePrinterDiscovery()
124
+ printers = await discovery.discover_printers_async()
125
+ for printer in printers:
126
+ print(f"Found: {printer.name} at {printer.ip_address}")
127
+
128
+ asyncio.run(discover())
129
+ ```
130
+
131
+ <div align="center">
132
+ <h3>Basic Control</h3>
133
+ Connect to a printer and perform basic operations like setting temperature and homing.
134
+ </div>
135
+
136
+ ```python
137
+ from flashforge import FlashForgeClient
138
+ import asyncio
139
+
140
+ async def control_printer():
141
+ # Initialize client with printer details
142
+ client = FlashForgeClient("192.168.1.100", "SERIAL_NUMBER", "CHECK_CODE")
143
+
144
+ if await client.initialize():
145
+ print(f"Connected to {client.printer_name}")
146
+
147
+ # Set bed temperature to 60°C
148
+ await client.temp_control.set_bed_temp(60)
149
+
150
+ # Home all axes
151
+ await client.control.home_xyz()
152
+
153
+ await client.dispose()
154
+
155
+ asyncio.run(control_printer())
156
+ ```
157
+
158
+ <div align="center">
159
+ <h3>Real-time Status Monitoring</h3>
160
+ Monitor printer status, temperatures, and print progress.
161
+ </div>
162
+
163
+ ```python
164
+ from flashforge import FlashForgeClient
165
+ import asyncio
166
+
167
+ async def monitor_printer():
168
+ async with FlashForgeClient("192.168.1.100", "SERIAL", "CODE") as client:
169
+ # Get comprehensive status
170
+ status = await client.get_printer_status()
171
+ print(f"Machine State: {status.machine_state}")
172
+
173
+ # Get temperatures via TCP
174
+ temps = await client.tcp_client.get_temp_info()
175
+ if temps:
176
+ bed = temps.get_bed_temp()
177
+ extruder = temps.get_extruder_temp()
178
+ print(f"Bed: {bed.get_current()}°C / {bed.get_target()}°C")
179
+ print(f"Extruder: {extruder.get_current()}°C / {extruder.get_target()}°C")
180
+
181
+ # Check print progress
182
+ layer_p, sd_p, current_layer = await client.tcp_client.get_print_progress()
183
+ print(f"Progress: {layer_p}% (Layer {current_layer})")
184
+
185
+ asyncio.run(monitor_printer())
186
+ ```
187
+
188
+ <div align="center">
189
+ <h3>File Operations & Thumbnails</h3>
190
+ List files on the printer and extract thumbnails.
191
+ </div>
192
+
193
+ ```python
194
+ from flashforge import FlashForgeClient
195
+ import asyncio
196
+
197
+ async def file_ops():
198
+ async with FlashForgeClient("192.168.1.100", "SERIAL", "CODE") as client:
199
+ # List files
200
+ files = await client.files.get_file_list()
201
+ for filename in files:
202
+ print(f"File: {filename}")
203
+
204
+ # Get thumbnail
205
+ thumb = await client.tcp_client.get_thumbnail(filename)
206
+ if thumb and thumb.has_image_data():
207
+ print(f"Thumbnail found: {len(thumb.get_image_bytes())} bytes")
208
+ # thumb.save_to_file_sync(f"{filename}.png")
209
+
210
+ asyncio.run(file_ops())
211
+ ```
@@ -1,12 +1,12 @@
1
1
  flashforge/__init__.py,sha256=YwiGqt8E6Q5s3_iWxT0skY-468iQwKi2bRmj9pmdDhE,4302
2
- flashforge/client.py,sha256=4Rl6U30zH-p4R1hTTN3KLejbb-Dm7VTgKqLTtMR99vY,12773
2
+ flashforge/client.py,sha256=dkzIGgFQW37cstXKAAJEg4wmyuQiNdWxHbMgPHOsqxA,12805
3
3
  flashforge/api/__init__.py,sha256=Syz3l0UO1ryK5bMKnI_Neh1PTmlkl8iKgzZrdWhArc0,334
4
4
  flashforge/api/constants/__init__.py,sha256=JyFtW3DcynTD_VWzw3T7MCs6BYaf9Xkypi_WYUgqFA4,162
5
5
  flashforge/api/constants/commands.py,sha256=tcCyAueNYZ7CrYxVy92r9alF6f5AcapErBBgGL1Xqwk,328
6
6
  flashforge/api/constants/endpoints.py,sha256=aGDxZk2f_Qsfi_QeIujP8ocDux_wiBBYldaGUuyg8BA,270
7
7
  flashforge/api/controls/__init__.py,sha256=5nHCY3U6KJIknYY_VnPjLFQIiPmEEAA6QlkC14AjAzY,292
8
8
  flashforge/api/controls/control.py,sha256=4PEYVeHkJTvsIYq2ck_rJ9kGkozsSgJUPkFHvFEfJNk,12061
9
- flashforge/api/controls/files.py,sha256=1-W4qmCvy80Z_IJAOFB25vHht0sQ-rGVONIKdGitQNc,6824
9
+ flashforge/api/controls/files.py,sha256=ieQI3IaWPNwyxLoIP3Ea_xtg_bTmZkleSM460yhFgIk,7626
10
10
  flashforge/api/controls/info.py,sha256=5Vv879QL8Qxx6xFyGjIh4xjLzwcQlLdfjeNkxPxZgbw,12496
11
11
  flashforge/api/controls/job_control.py,sha256=iC3bmK00r4rS7fsAuRZR-RNWguJ8rl8dCDV1L1a-leM,23169
12
12
  flashforge/api/controls/temp_control.py,sha256=H4fdJXXrnRMQvvZhslhNAtAR78S-4Nk79OxDqOEHRM0,3108
@@ -21,7 +21,7 @@ flashforge/api/network/utils.py,sha256=gpRU24eYtOajV-lWEjMdanjs110xG-jn2EirD5gIo
21
21
  flashforge/discovery/__init__.py,sha256=1Dz3zqh5ltsv34ZhugWkoC4MKp8qbz3SWpxNkPSIlMU,277
22
22
  flashforge/discovery/discovery.py,sha256=fAY8EFw5u8R-wlh21_GrXHLL2KpAxkp0EQi8fNbgJbU,15172
23
23
  flashforge/models/__init__.py,sha256=qRV-iuENmwyeiO63cQYA6qFB-UYG36HadSMzgZabGPA,983
24
- flashforge/models/machine_info.py,sha256=1Vry0BKHRR4T9_Eo-FudeHUQwt--qpUvegi4NDIobOw,12102
24
+ flashforge/models/machine_info.py,sha256=Y7nfCepE6sc8slpPsFCFOGXdzxMzUA2Dtod3WHGk7TU,12108
25
25
  flashforge/models/responses.py,sha256=LbRiT74j31fra86xorcuUmeWtV27KCj6mysERlUJzZI,5143
26
26
  flashforge/tcp/__init__.py,sha256=JYbv_ATMJL1vJ1VP-KPcxdMM7V_aapDkZrCUhPaWLtQ,835
27
27
  flashforge/tcp/ff_client.py,sha256=58z6qzfolIOovtzW-C3GwgrOxZV67cOMC5vGjYnsZ7c,20787
@@ -36,8 +36,8 @@ flashforge/tcp/parsers/print_status.py,sha256=75KlzAMMjvpR4hCvK0LbHKwE_7hm2jExCF
36
36
  flashforge/tcp/parsers/printer_info.py,sha256=qur6zekWsTY_RsCt6Nndc1eElvJIhSXCpUfX0Z40ONQ,5443
37
37
  flashforge/tcp/parsers/temp_info.py,sha256=YaDNCJZvwYhqD3li1aJl-66nVrZ2_lkoQVgiA1x35_w,8276
38
38
  flashforge/tcp/parsers/thumbnail_info.py,sha256=hi-e3Dy8h8Vw1Uu5SVAodQKSJEhP0-z1NhnO3rOuYMo,9282
39
- flashforge_python_api-1.0.0.dist-info/METADATA,sha256=CpxLhCrr-UC1IChGYUWbENnLzxUnLe56aS3kXoRoskE,5083
40
- flashforge_python_api-1.0.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
41
- flashforge_python_api-1.0.0.dist-info/entry_points.txt,sha256=AkOxlsLvQ7cvMLxn7tlzfKp_DCH2hXhbVceHIXxawpU,66
42
- flashforge_python_api-1.0.0.dist-info/licenses/LICENSE,sha256=lW2RvsgnKpSECUO1251Wj_EMkdmuA6Vlxea-eje7wuM,1088
43
- flashforge_python_api-1.0.0.dist-info/RECORD,,
39
+ flashforge_python_api-1.0.1.dist-info/METADATA,sha256=aI0TqrnzqTEM8P0eujjh2_wcXlNdFXIO3LCfr870Dso,7202
40
+ flashforge_python_api-1.0.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
41
+ flashforge_python_api-1.0.1.dist-info/entry_points.txt,sha256=AkOxlsLvQ7cvMLxn7tlzfKp_DCH2hXhbVceHIXxawpU,66
42
+ flashforge_python_api-1.0.1.dist-info/licenses/LICENSE,sha256=lW2RvsgnKpSECUO1251Wj_EMkdmuA6Vlxea-eje7wuM,1088
43
+ flashforge_python_api-1.0.1.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.27.0
2
+ Generator: hatchling 1.28.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -1,123 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: flashforge-python-api
3
- Version: 1.0.0
4
- Summary: A comprehensive Python library for controlling FlashForge 3D printers
5
- Project-URL: Homepage, https://github.com/GhostTypes/ff-5mp-api-py
6
- Project-URL: Documentation, https://github.com/GhostTypes/ff-5mp-api-py#readme
7
- Project-URL: Repository, https://github.com/GhostTypes/ff-5mp-api-py.git
8
- Project-URL: Issues, https://github.com/GhostTypes/ff-5mp-api-py/issues
9
- Author-email: GhostTypes <notghosttypes@gmail.com>
10
- License-Expression: MIT
11
- License-File: LICENSE
12
- Keywords: 3d-printer,api,async,control,flashforge,python
13
- Classifier: Development Status :: 5 - Production/Stable
14
- Classifier: Intended Audience :: Developers
15
- Classifier: Programming Language :: Python :: 3
16
- Classifier: Programming Language :: Python :: 3.8
17
- Classifier: Programming Language :: Python :: 3.9
18
- Classifier: Programming Language :: Python :: 3.10
19
- Classifier: Programming Language :: Python :: 3.11
20
- Classifier: Programming Language :: Python :: 3.12
21
- Classifier: Topic :: Scientific/Engineering
22
- Classifier: Topic :: Software Development :: Libraries :: Python Modules
23
- Classifier: Topic :: System :: Hardware :: Hardware Drivers
24
- Requires-Python: >=3.8
25
- Requires-Dist: aiohttp>=3.8.0
26
- Requires-Dist: netifaces>=0.11.0
27
- Requires-Dist: pydantic>=2.0.0
28
- Requires-Dist: requests>=2.31.0
29
- Provides-Extra: all
30
- Requires-Dist: black>=23.0.0; extra == 'all'
31
- Requires-Dist: mypy>=1.0.0; extra == 'all'
32
- Requires-Dist: pillow>=10.0.0; extra == 'all'
33
- Requires-Dist: pre-commit>=3.0.0; extra == 'all'
34
- Requires-Dist: pytest-asyncio>=0.21.0; extra == 'all'
35
- Requires-Dist: pytest-cov>=4.0.0; extra == 'all'
36
- Requires-Dist: pytest>=7.0.0; extra == 'all'
37
- Requires-Dist: ruff>=0.1.0; extra == 'all'
38
- Provides-Extra: dev
39
- Requires-Dist: black>=23.0.0; extra == 'dev'
40
- Requires-Dist: mypy>=1.0.0; extra == 'dev'
41
- Requires-Dist: pre-commit>=3.0.0; extra == 'dev'
42
- Requires-Dist: pytest-asyncio>=0.21.0; extra == 'dev'
43
- Requires-Dist: pytest-cov>=4.0.0; extra == 'dev'
44
- Requires-Dist: pytest>=7.0.0; extra == 'dev'
45
- Requires-Dist: ruff>=0.1.0; extra == 'dev'
46
- Provides-Extra: imaging
47
- Requires-Dist: pillow>=10.0.0; extra == 'imaging'
48
- Description-Content-Type: text/markdown
49
-
50
- # 🖨️ FlashForge Python API
51
-
52
- A comprehensive Python library for controlling FlashForge 3D printers.
53
-
54
- ## ✨ Features
55
-
56
- - **🎮 Full Printer Control**: Movement, temperature, speed, LED, filtration, camera control
57
- - **📋 Job Management**: Start, pause, resume, cancel prints, file upload and management
58
- - **📊 Real-time Monitoring**: Live status, temperature, progress, and machine state tracking
59
- - **🔍 Network Discovery**: Automatic printer discovery via UDP broadcast
60
- - **🔄 Dual Communication**: HTTP API (modern) + TCP G-code (legacy) support
61
- - **🛡️ Type Safety**: Full type hints and Pydantic models for robust development
62
- - **⚡ Async Support**: Native async/await support for all operations
63
- - **🖼️ Advanced Features**: Thumbnail extraction, endstop monitoring, print progress tracking
64
-
65
- ## 🚀 Quick Start
66
- > 💡 The "new" HTTP API requires LAN-mode, and a check code for authentication. [This](https://www.youtube.com/watch?v=krdEGccZuKo) video shows how to set up LAN-mode, and get the code.
67
-
68
- ```python
69
- from flashforge import FlashForgeClient, FlashForgePrinterDiscovery
70
-
71
- # Find printers on the network
72
- discovery = FlashForgePrinterDiscovery()
73
- printers = await discovery.discover_printers_async()
74
-
75
- # Connect to your printer
76
- client = FlashForgeClient(
77
- host="192.168.1.100", # Your printer's IP
78
- serial="ABCD1234", # Your printer's serial
79
- check_code="12345678" # Your printer's check code
80
- )
81
-
82
- # Basic operations
83
- await client.info.get_machine_status() # Get printer status
84
- await client.temp_control.set_bed_temp(60) # Set bed temperature
85
- await client.control.home_xyz() # Home all axes
86
- ```
87
-
88
- ## 📦 Installation & Setup
89
-
90
- ```bash
91
- # Clone the repository
92
- git clone https://github.com/your-username/flashforge-python-api.git
93
- cd flashforge-python-api
94
-
95
- # Setup & Install
96
- uv sync # Install core dependencies
97
- uv sync --all-extras # Install with all optional dependencies
98
- ```
99
-
100
- ## 🔧 Requirements
101
-
102
- - **🐍 Python**: 3.8+ (recommended: 3.11+)
103
- - **🖨️ Printer**: FlashForge with network connectivity
104
- - **🌐 Network**: Printer and computer on same network for discovery
105
- - **🔑 Credentials**: Printer serial number and check code
106
-
107
- ## 🎯 Supported Models
108
-
109
- **✅ Tested with:**
110
- - FlashForge Adventurer 5M Series
111
- - FlashForge Adventurer 4
112
-
113
- **💫 Should work with:**
114
- - FlashForge printers with network connectivity
115
- - Printers supporting HTTP API (new) and/or TCP G-code (legacy)
116
-
117
- > 💡 **Note**: Some features (camera control, filtration) are model-specific and will be automatically detected.
118
-
119
- ## 🌟 Related Projects
120
- - **💻 C# API (Windows)**: [ff-5mp-api](https://github.com/GhostTypes/ff-5mp-api)
121
- - **🌐 TypeScript API (Cross-Platform)**: [ff-5mp-api-ts](https://github.com/GhostTypes/ff-5mp-api-ts)
122
- - **🎨 FlashForgeUI (Electron, Cross-Platform)**: [FlashForgeUI-Electron](https://github.com/Parallel-7/FlashForgeUI-Electron)
123
-