Created
July 22, 2026 06:35
-
-
Save asilbalaban/7fd0b8b2ed5707f8bb4f63fae4099e7a to your computer and use it in GitHub Desktop.
ENDER 3 CURA 5.13 THUMBNAIL GENERATOR
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #-------------------------------------- | |
| # Cura JPEG Thumbnail creator | |
| # Professional firmware for Ender3v2 | |
| # Miguel A. Risco-Castillo | |
| # 2021-07-01 | |
| # Patched for Cura 5.x (PyQt6) - 2026 | |
| # Contains code from: | |
| # https://github.com/Ultimaker/Cura/blob/master/plugins/PostProcessingPlugin/scripts/CreateThumbnail.py | |
| #-------------------------------------- | |
| import base64 | |
| from UM.Logger import Logger | |
| from cura.Snapshot import Snapshot | |
| from PyQt6.QtCore import QByteArray, QIODevice, QBuffer | |
| from ..Script import Script | |
| class CreateJPEGThumbnail(Script): | |
| def __init__(self): | |
| super().__init__() | |
| def _createSnapshot(self, width, height): | |
| Logger.log("d", "Creating thumbnail image...") | |
| try: | |
| return Snapshot.snapshot(width, height) | |
| except Exception: | |
| Logger.logException("w", "Failed to create snapshot image") | |
| def _encodeSnapshot(self, snapshot): | |
| Logger.log("d", "Encoding thumbnail image...") | |
| try: | |
| thumbnail_buffer = QBuffer() | |
| thumbnail_buffer.open(QBuffer.OpenModeFlag.ReadWrite) | |
| thumbnail_image = snapshot | |
| thumbnail_image.save(thumbnail_buffer, "JPG") | |
| base64_bytes = base64.b64encode(thumbnail_buffer.data()) | |
| base64_message = base64_bytes.decode('ascii') | |
| thumbnail_buffer.close() | |
| return base64_message | |
| except Exception: | |
| Logger.logException("w", "Failed to encode snapshot image") | |
| def _convertSnapshotToGcode(self, encoded_snapshot, width, height, chunk_size=78): | |
| gcode = [] | |
| encoded_snapshot_length = len(encoded_snapshot) | |
| gcode.append(";") | |
| gcode.append("; thumbnail begin {}x{} {}".format( | |
| width, height, encoded_snapshot_length)) | |
| chunks = ["; {}".format(encoded_snapshot[i:i+chunk_size]) | |
| for i in range(0, len(encoded_snapshot), chunk_size)] | |
| gcode.extend(chunks) | |
| gcode.append("; thumbnail end") | |
| gcode.append(";") | |
| gcode.append("") | |
| return gcode | |
| def getSettingDataString(self): | |
| return """{ | |
| "name": "Create JPEG Thumbnail", | |
| "key": "CreateJPEGThumbnail", | |
| "metadata": {}, | |
| "version": 2, | |
| "settings": | |
| { | |
| "width": | |
| { | |
| "label": "Width", | |
| "description": "Width of the generated thumbnail", | |
| "unit": "px", | |
| "type": "int", | |
| "default_value": 230, | |
| "minimum_value": "0", | |
| "minimum_value_warning": "12", | |
| "maximum_value_warning": "800" | |
| }, | |
| "height": | |
| { | |
| "label": "Height", | |
| "description": "Height of the generated thumbnail", | |
| "unit": "px", | |
| "type": "int", | |
| "default_value": 180, | |
| "minimum_value": "0", | |
| "minimum_value_warning": "12", | |
| "maximum_value_warning": "600" | |
| } | |
| } | |
| }""" | |
| def execute(self, data): | |
| width = self.getSettingValueByKey("width") | |
| height = self.getSettingValueByKey("height") | |
| snapshot = self._createSnapshot(width, height) | |
| if snapshot: | |
| encoded_snapshot = self._encodeSnapshot(snapshot) | |
| snapshot_gcode = self._convertSnapshotToGcode( | |
| encoded_snapshot, width, height) | |
| for layer in data: | |
| layer_index = data.index(layer) | |
| lines = data[layer_index].split("\n") | |
| for line in lines: | |
| if line.startswith(";Generated with Cura"): | |
| line_index = lines.index(line) | |
| insert_index = line_index + 1 | |
| lines[insert_index:insert_index] = snapshot_gcode | |
| break | |
| final_lines = "\n".join(lines) | |
| data[layer_index] = final_lines | |
| return data |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment