{"id":15653995,"url":"https://github.com/ronoaldo/flashforgefinderintegration","last_synced_at":"2025-04-30T22:24:45.759Z","repository":{"id":40427026,"uuid":"266886809","full_name":"ronoaldo/FlashforgeFinderIntegration","owner":"ronoaldo","description":"FlashForge Finder tools for Ultimaker Cura Slicer","archived":false,"fork":false,"pushed_at":"2024-04-07T19:58:05.000Z","size":439,"stargazers_count":30,"open_issues_count":11,"forks_count":16,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-23T17:55:50.854Z","etag":null,"topics":["3d-printer","3d-printing","cura","plugin","reverse-engineering"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ronoaldo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-05-25T21:49:04.000Z","updated_at":"2025-04-05T18:29:18.000Z","dependencies_parsed_at":"2024-10-23T03:45:03.097Z","dependency_job_id":"985bbd51-8206-4fb9-bc59-f35f2968e58a","html_url":"https://github.com/ronoaldo/FlashforgeFinderIntegration","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ronoaldo%2FFlashforgeFinderIntegration","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ronoaldo%2FFlashforgeFinderIntegration/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ronoaldo%2FFlashforgeFinderIntegration/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ronoaldo%2FFlashforgeFinderIntegration/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ronoaldo","download_url":"https://codeload.github.com/ronoaldo/FlashforgeFinderIntegration/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251790583,"owners_count":21644241,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["3d-printer","3d-printing","cura","plugin","reverse-engineering"],"created_at":"2024-10-03T12:48:45.274Z","updated_at":"2025-04-30T22:24:45.727Z","avatar_url":"https://github.com/ronoaldo.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Flashforge Finder Cura utilities\n\nThis project contains several Cura slicer utilities that enhance the\nexperience for Flashforge Finder users.\n\n# Install\n\n## From Marketplace\n\nVersion 1.0.0 available, and version 1.0.1 still under review!\n\n## Binary releases\n\nDownload from the .curapackages from Releases page and drop them into Cura.\nAfter you restart Cura, plugins will be installed and you can save .GX files already.\n\nIn order to add Flashforge Finder, you need to use the Extensions -\u003e\nFlashforge Finder -\u003e Install files menu entry. After that step, you can see FlashForge Finder\nin the Add Printer dialog.\n\n## From source\n\nYou can checkout the repository and use the GNU Make tool to build the .curapackage\nfiles yourself:\n\n\tgit clone https://github.com/ronoaldo/FlashforgeFinderIntegration\n\tcd FlashforgeFinderIntegration\n\tmake\n\nAfter that, there will be two .curapackage files in the build directory.\nFollow the same steps as the \"Binary Releases\" section to use them.\n\nOptionally, you can just copy the two folders under plugins/ directory\nin your Cura configuration plugins direcotry. Go to \"Help -\u003e Show configuration directories\"\nmenu in order to achieve that.\n\n# About the support for .gx (xgcode) files\n\nGX files are normal g-code but with an extra binary header used\nby FlashForge Finder and similar printers.\n\nThe header contains a few data used by the printer firmware, such as\na thumbnail of the objet to print, print time, temperature and other\ninformation.\n\nThis work is based on the ChituCodeWriter from https://github.com/Spanni26/ChituCodeWriter\nand the detailed reverse-engineering description of the binary header\nfrom this issue on Github.\n\n# Whishlist \n\n* ~Add printer definition and submit plugin + printer definition to cloud~ Available here https://github.com/eskeyaar/Flashforge-Finder-\n* Add send job/monitor support\n\n# Binary xgcode 1.0 header\n\n*Github user https://github.com/cme-linux made a great work reverse engineering\nthe binary header fields and shared this as a feature request for Slic3r.*\n\nTo extract .BMP from .GX in Linux:\n\n\tdd if=”file.gx” of=”file.bmp” skip=58 count=14454 iflag=skip_bytes,count_bytes\n\nTo extract G-Code from .GX in Linux:\n\n\tdd if=”file.gx” of=”file.gcode” skip=14512 iflag=skip_bytes\n\nByte offsets in the .GX file, as stated in this feature request, are 0-based.\nAll numbers are little-endian binary (2 or 4 bytes) unless specified to be ASCII plaintext.\n\nOffsets through 0x1B seem to contain constant data:\n\n* The string \"xgcode 1.0\" terminated with a newline \u0026 NUL.\n* Then four 32-bit constants. (0, 58, 14512, 14512)\n  * 58 is a pointer to the start of the bitmap\n  * 14512 is a pointer to the start of the G-Code\n\nOffsets 0x1C through 0x39 seem to contain the following variables.\nThe first three are 4 bytes; the other ones are 2 bytes.\n\n * 0x1C - print time in seconds, 4 bytes.\n * 0x20 - filament usage in mm, 4 bytes.\n * 0x24 - left extruder filament usage in mm, 4 bytes.\n * 0x28 - multi-extruder type; the latest FlashPrint version (1.23.0) seems to put 0x0B here\n * 0x2A - layer height, microns (for example, 180 means 0.18 mm)\n * 0x2C - unknown; maybe unused (zero)\n * 0x2E - number of perimeter shells\n * 0x30 - print speed, mm/s\n * 0x32 - platform temp, Celsius\n * 0x34 - extruder temp, Celsius \n * 0x36 - left extruder temp, Celsius\n * 0x38 - unknown; maybe unused (zero)\n\nFlashForge software/firmware uses that data these ways:\n\n1. The printer itself uses only the preview bitmap \u0026 the 4-byte print duration.\n2. FlashPrint has a \"Slice Parameters\" window that uses the 4-byte duration \u0026\n  filament length numbers. The other data in the \"Slice Parameters\" window comes\n  from parsing the comments at the start of the G-Code, not from the binary header fields:\n  (That means that Slic3r needs to generate these comments in the same format as FlashPrint.)\n\n* Layer height in mm (not microns)\n* Number of perimeter shells\n* Fill density (percentage)\n* Fill pattern (keywords I've seen are)\n  * hexagon\n  * triangle\n  * line\n  * 3dInfill\n* Print speed\n* Travel speed\n* Extruder temp (1-extruder printers use the comment for right_extruder)\n* Platform temp\n\nAfter the header is the bitmap. This starts at offset 0x3A (decimal 58), ends @ offset 0x38AF.\nThe next offset, 0x38B0 (decimal 14512), is the start of the G-code.\nThe length of the bitmap is 0x3876 (decimal 14454) bytes.\n\nThe picture is in the ordinary .BMP format, uncompressed, 80 x 60 pixels (0x50 by 0x3C).\nSome of the following parameters would be taken care of automatically by a .BMP library,\nbut I'll list these parameters anyway. The pixels start at byte offset 0x36 into the .BMP\nsection of the .GX file. There are 256 shades of gray, written as 24-bit color,\n3 bytes per pixel, all 3 bytes having the same value.\n\nThe .BMP pixels-per-meter values are set to 0x1274 which is 120 dpi. BMP files contain\nthe pixel rows in bottom-to-top order.\n\nThe background is black and the 3D model is shown in an angled perspective view\n(lines parallel to the coordinate axes converge slightly into the distance).\n\n# Usefull links\n\n* GX header reverse engineer discussion: https://github.com/slic3r/Slic3r/issues/4869\n* Finder wire protocol: https://www.reddit.com/r/3Dprinting/comments/9lcdti/flashforge_finder_wireless_monitoring_tools/\n* Finder web-based API implementation: https://github.com/01F0/flashforge-finder-api/tree/master/api\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fronoaldo%2Fflashforgefinderintegration","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fronoaldo%2Fflashforgefinderintegration","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fronoaldo%2Fflashforgefinderintegration/lists"}