- Background
- Special thanks to all the contributors
- Installation
- Common Features for the Stand Alone Printer & for Octoprint
- The 7x7-Mesh
- Linear Advance
- Hosts Commands and Support for Runnout Sensor
- Raised Max Temperatures Values
- Software protection against false positive reading of HotBed Termistor
- Input Shaping Menu
- Added Extrusion Flow Item to the Tune Menu
- Added a Display Settings subMenu to the Prepare Menu
- Improved M600 feature
- Fixed Print Information details for SD Print
- Linear Advance quick Menu
- Custom Extrusion Menu
- Printer Statistics
- PETG/ABS Preheat Settings
- Custom Height after Homing
- CRTouch Probe tests
- Bed Level Visualizer
- Features for Octoprint
- FAQS
After Creality released the Ender 3 V3 SE source code, many forks started to work on it and suddenly I was involved in this thread on Creality's Forum were good folks from everywhere started a conversation about what could be good enhancements for the Firmware. So I thought will be a nice contribution for the community to merge the most common forks into One Repo and start from there new features for the firmware.
Also I wanted to go a little bit further, since I'm using Octoprint, so I started to focusing on the integration of the Firmware with it, specially to make my LCD alive again.
- @aschmitt1909
- @queeup-Forks
- @rtorchia
- @eduard-sukharev
- And the folks from Creality Forum because they are making continuos tests and feature requests.
Caution
Disclaimer
I'm not responsable of the damage or brick that may happen to your printer if you don't know what are you doing. I'm provided this fork tested on my own printer without warranties.**
The Release of the firmware starting from version 1.0.9.8_1c is compiled with two FeedRates(speed of movements):
Which uses the same stock's feedrates:
#define HOMING_FEEDRATE_MM_M { (50*60), (50*60), (4*60) }
#define MAX_ACCEL_EDIT_VALUES { 8000, 8000, 200, 8000 }
#define DEFAULT_MAX_FEEDRATE { 500, 500, 5, 30 }
#define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 }
#define DEFAULT_MAX_ACCELERATION { 2500, 2500, 100, 2500 }
#define DEFAULT_ACCELERATION 2500Which uses bigger values to move faster the printer; but generates more noise.
#define HOMING_FEEDRATE_MM_M { (80*60), (80*60), (80*60) }
#define MAX_ACCEL_EDIT_VALUES { 8000, 8000, 500, 8000 }
#define DEFAULT_MAX_FEEDRATE { 600, 600, 12, 30 }
#define MAX_FEEDRATE_EDIT_VALUES { 900, 900, 40, 60 }
#define DEFAULT_MAX_ACCELERATION { 3500, 3500, 200, 3000 }
#define DEFAULT_ACCELERATION 3000Important
-
When choosing betwen Fast or Normal FeedRates, after flashing the new firmware YOU MUST reset the printer so the default values are loaded again.
-
Take a look on this Discussion Topic to understand why you perceive more Noise when using the firmware.
-
All issues opened without reading release notes are going to be closed automatically.
You can find the latest code on the main branch
Tip
First you need to flash creality firmware version 1.0.6. and the TFT files for the display. If your printer is already in that version you can do it directly.
From: Latest Release of Printer's Firmware without Gcode Preview download the ZIP that fits your Octoprint configuration, recommended 150000 baud rate.
or From: Latest Release of Printer's Firmware with Gcode Preview download the ZIP that fits your Octoprint configuration, recommended 150000 baud rate.
Unzip and:
- Turn Off your printer.
- Format you SD to FAT32 recommended to use MiniTool Partition or Gparted.
- Rename the file to something random, i.E. “OC198B.bin” and copy to the SD.
- Put the SD on your Printer SD-Card Reader(Not the LCD).
- Turn On your printer.
- Wait for the update to finish - it needs ~10-15 seconds.
- Run a new Autolevel.
For Octoprint:
- Download the Latest Release plugin: navaismo/OctoPrint-E3v3seprintjobdetails
- Install it manually using the Plugin Manager.
- Follow the below section of Octoprint to configure it.
You can find the latest code SMT32F401 branch
Tip
First you need to flash creality firmware version 1.0.9. and the TFT files for the display. If your printer is already in that version you can do it directly.
From: Latest Release of Printer's Firmware without Gcode Preview with the SMT32F401 tag on it, download the ZIP that fits your Octoprint configuration, recommended 150000 baud rate.
or From: Latest Release of Printer's Firmware with Gcode Preview with the SMT32F401 tag on it, download the ZIP that fits your Octoprint configuration, recommended 150000 baud rate.
Unzip and:
- Turn Off your printer.
- Format you SD to FAT32 recommended to use MiniTool Partition or Gparted.
- Create a folder called "STM32F4_UPDATE" in the root of the SD Card
- Rename the bin file to something random, i.E. “OC198B.bin” and copy to the SD inside the SMT32F4_UPDATE folder.
- Put the SD on your Printer SD-Card Reader(Not the LCD).
- Turn On your printer.
- Wait for the update to finish - it needs ~10-15 seconds.
- Run a new Autolevel.
For Octoprint:
- Download the Latest Release plugin: navaismo/OctoPrint-E3v3seprintjobdetails
- Install it manually using the Plugin Manager.
- Follow the below section of Octoprint to configure it.
Based on the fork of @aschmitt1909, and merged with the PR#18 from @eduard-sukharev
Based on the fork of @queeup-Forks, for this version follow these instructions to enable it:
- #30
- https://forum.creality.com/t/ender-3-v3-se-config-settings-to-roll-our-own-firmware-please/6333/278
Based on the fork of @rtorchia
Based in the fork of TomasekJ
- For BED 110°C
- For Nozzle 300°C
Be careful with the Nozzle Temperature because the PTFE Tube from extruder will deform startint at 260°C
Starting last month(2025-06-01) my printer sometimes had a bad reading on the bed termistor causing crash on prints with several hours running, and these readings were randomly and during a short period but the printer still cancelled a job. So beacuse of that I added in the Firmware a protection for small readings to ignore it unless we have confirmation and get the same temp several times.
Merged the PR#22 from @eduard-sukharev to Enable the Input Shaping Menu in the LCD.
You can automate the configuration of your Input Shaping with the Octoprint-Pinput_Shaping plugin for Marlin here
Enabled the option in Tune menu to modify the extrusion flow/rate of the printer during the print job.
The submenu contains:
-
Option to mute or unmute the LCD when you press the Knob. From feature request in: Issue #27. Sometimes you want to be quiet. To preseve the state of the feature go to Menu Control --> Save settings.
-
Option to set the Maximum Brightness during current runtime. From feature request in Issue #46.
-
Option to set the (Dimm)Brightness when the printer became inactive.
-
Option to set the Time Before dimming the screen.
-
Option to save settings in EEPROM.
When using M600 code to change filament now the head will park and raise Z to a decent distant to handle the purges. Also was increased the purge lenght to have a better extrusion clean.
Important
- When using standalone printer, the Knob will control the Pause and Continue processes. If you connect the host(Octoprint) then the Knob became useless and you need to control the Pause and Continue from the Octoprint GUI until you disconnect or restart the printer.
Merged the fix of PR#39 from @eduard-sukharev to get the print details like filament, Estimated time and layer height, when printing from SD Card.
Added a quick Linear Advance Menu under Motion Menu from feature request on Issue#26
Added a custom Extrusion Menu under Prepare Menu from feature request on Issue#27. You can Extrude based on different tempearatures and lengths to match your material.
Tip
- Set your desired temperature above 195°C, else an error will come out.
- Set your desired extrusion length above 10mm, else an error will come out.
- Click on proceed.
After that the Noozzle will heat till +-3 Degrees of the desired temp and will extrude the desired length automatically.
Finally just click on the confirm button to go out the menu.
Added Submenu under Control Menu to show the Print Stats gather by Marlin. From feature request on Issue #48
Added options for preheat new Materials: PETG and ABS under Control and Pepare Menus. From feature request on Issue #49
Added option to edit the height of the nozzle after homing. From feature request on Issue #49
Added option to test the probe to deploay and stow inside Move Menu. From feature request on Issue #105
Added option to see the Bed level iso view along the QR code to get help, this is part of the PR #52 which enable Advanced help messages by @eduard-sukharev
To have the most of Octoprint and this firmware you will need to install the Custom Octoprint Plugin for the printer.
To work correctly the plugin needs the following Plugins to be installed already:
Disable or Unistalled:
- Disable Display Layer Progress
Depending on the Firmware version that you've downloaded add the Baud Rate in the additional baud rates box.
Note: If youe are using OCTO4A the only baud rate that will work is 115200 due to an Android or Octo4A limitation.
To properly show the Ready connection string at Menu's header add the following in the
- After Serial Connection to printer established
- Before Serial Connection to printer is closed
- For After Print Job Completes:
G1 X0 Y220
- For After Print Job is Cancelled:
In this section is important to add the last M117 command it will help to clear some variables before going to Main Menu
; relative moving G91 ; move head 10mm up G1 Z10 F800 ; absolute moving G90 ; move print head out of the way G1 X0 Y220 F3000 ; disable motors M84 ; disable all heaters {% snippet 'disable_hotends' %} M104 S0 ; Set Hotend to 0 {% snippet 'disable_bed' %} M140 S0 ; Set Bed to 0 ;disable fan M106 S0 ; send message to printer. M117 Print was cancelled
- For After Print Job is Paused:
{% if pause_position.x is not none %} ; relative XYZE G91 M83 ; retract filament of 0.8 mm up, move Z slightly upwards and G1 Z+5 E-0.8 F4500 ; absolute XYZE M82 G90 ; move to a safe rest position, adjust as necessary G1 X0 Y220 {% endif %}
- For Before Print Job is Resumed
{% if pause_position.x is not none %} ; relative extruder M83 ; prime nozzle G1 E-0.8 F4500 G1 E0.8 F4500 G1 E0.8 F4500 ; absolute E M82 ; absolute XYZ G90 ; reset E G92 E{{ pause_position.e }} ; WARNING!!! - use M83 or M82(extruder absolute mode) according what your slicer generates M83 ; extruder relative mode ; move back to pause position XYZ G1 X{{ pause_position.x }} Y{{ pause_position.y }} Z{{ pause_position.z }} F4500 ; reset to feed rate before pause if available {% if pause_position.f is not none %}G1 F{{ pause_position.f }}{% endif %} {% endif %}
Of course you can change it to your desired behaviour above are just working examples in my setup.
Enable the option to Turn On the Job details on the LCD. Otherwise left M117 and any other plugin will send information to it.
M177 has a basic implementation and I'm not planning on improve M117 messages
If you installed the firmware from the Repo that Enable the Gcode Preview Using Octoprint, enble the slicer so the plugin can send it to the LCD.
Important
- The supported size for the GCODE Preview is a size of 96x96.
- Supported Slicers are Cura and Orca.
- In Orca use the following 96x96/JPG.
- In Cura default 96x96 setting is enough.
- In your slicer use a filament color other than black or the Image will be barely visible.
- Previews will only work after enable those settings and for the new Files that you upload, any old file will not work
- Transmitting and Rendering the preview will take up to 2 minutes.
-
Time Pogress: Will render the circle percent progress based on the estimation of the Time Printer or PTG plugin. Is a known issue that Printer or PTG arent accurate at all so this is not the best option.
-
Layer Progress: Will render the circle progress based on the calculation of the percent bewteen the Curren Layer and the Total Layers.
-
M73 Progress: Will render the circle progress based on the information that the Gcode file send trhough M73 command. This is the recommended one.
You need to enable your slicer to send this information is not by default and must follow the standar command like: M73 P10 R60
If you disable the Thumbnail in the plugin's configuration or using the Firmware from this REPO, the default Creality Image will be rendered:
Most of the questions has been answered in the Issue section of the Repo but here are the most common:
+ 1. Why I don't see the updates in real time on the LCD?TL;DR: Because rendering the LCD will affect your print quality.
Take a look on the Issue #7 to get the full backgorund of why the Real Time response was removed.
+ 2. Do I need Octoprint to work with this?No, the common feeatures works for both, you just will see the stock LCD Layout. The new layout with Gcode Preview, Layer count etc. Will be render only using Octoprint.
+ 3. Why you don't Increase the connection Baud Rate?TL;DR: Because printer cannot handle communication above 150000.
Take a look on the Issue #5 to get the full backgorund.
+ 4. Got a leveling error?This error is only present when using Octoprint and is expected since you flashed a new Grid with no values. So after flashing the new firmware start a new fresh level procedure and then connect Octoprint again.
+ 5. Why the Render of GCcode Preview takes so much time?
+ 5a Why there is no Gcode Preview without Octoprint?TL;DR: Because LCD is closed and we haven't found it it has a SRAM to store images. An thats why is only supported by Octoprint and not stand alone. To process the image and send it.
Take a look on this Discussion to see the efforts. Eduard and I spent a lot of time trying to find an Address with no luck.
+ 6. Sometimes when Thumbnail Enabled the printer pauses and has weird movement behaviour before the print starts?This is because the plugin programaticaly pauses the print job until the Thumbnail is rendered, to avoid affect the print quality.
It is recommended to Load the file first and then click on Print. If is a direct print, is recommended to preheat the filament so the transmission will start faster, else it will wait till nozzle reach the temperature.
+ 7. Sometimes when the thumb is disabled an loaded the Job in LCD I see the Default image dissapearing slowly while the other is rendering. Can you just clean the LCD?This is a personal decision, I like a lot to see how the Creality Man dissapear slowly, it brings me peace.
+ 8. Sometimes in the Tune Menu appears the Nozzle and Bed Icons, Why?This is beacuse the encoder/Knob is moved too fast and enter in an unknow state that by default try to render the lower info area. If you move it slowly this will no appear.
+ 9. My motors sound different, are it dying. Was the current increased?No, none of the above take a look on this disscusion topic to find more baout it
BAU:
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
TL;DR:
If your house burns down because this app malfunctioned, you cannot sue me.
Additional documentation can be found at the Marlin Home Page. Please test this firmware and let us know if it misbehaves in any way. Volunteers are standing by!
Marlin 2.0 takes this popular RepRap firmware to the next level by adding support for much faster 32-bit and ARM-based boards while improving support for 8-bit AVR boards. Read about Marlin's decision to use a "Hardware Abstraction Layer" below.
Download earlier versions of Marlin on the Releases page.
Before building Marlin you'll need to configure it for your specific hardware. Your vendor should have already provided source code with configurations for the installed firmware, but if you ever decide to upgrade you'll need updated configuration files. Marlin users have contributed dozens of tested example configurations to get you started. Visit the MarlinFirmware/Configurations repository to find the right configuration for your hardware.
To build Marlin 2.0 you'll need Arduino IDE 1.8.8 or newer or PlatformIO. Detailed build and install instructions are posted at:
| Platform | MCU | Example Boards |
|---|---|---|
| Arduino AVR | ATmega | RAMPS, Melzi, RAMBo |
| Teensy++ 2.0 | AT90USB1286 | Printrboard |
| Arduino Due | SAM3X8E | RAMPS-FD, RADDS, RAMPS4DUE |
| ESP32 | ESP32 | FYSETC E4, E4d@BOX, MRR |
| LPC1768 | ARM® Cortex-M3 | MKS SBASE, Re-ARM, Selena Compact |
| LPC1769 | ARM® Cortex-M3 | Smoothieboard, Azteeg X5 mini, TH3D EZBoard |
| STM32F103 | ARM® Cortex-M3 | Malyan M200, GTM32 Pro, MKS Robin, BTT SKR Mini |
| STM32F401 | ARM® Cortex-M4 | ARMED, Rumba32, SKR Pro, Lerdge, FYSETC S6 |
| STM32F7x6 | ARM® Cortex-M7 | The Borg, RemRam V1 |
| SAMD51P20A | ARM® Cortex-M4 | Adafruit Grand Central M4 |
| Teensy 3.5 | ARM® Cortex-M4 | |
| Teensy 3.6 | ARM® Cortex-M4 | |
| Teensy 4.0 | ARM® Cortex-M7 | |
| Teensy 4.1 | ARM® Cortex-M7 | |
| Linux Native | x86/ARM/etc. | Raspberry Pi |
- Submit Bug Fixes as Pull Requests to the (bugfix-2.0.x) branch.
- Follow the Coding Standards to gain points with the maintainers.
- Please submit your questions and concerns to the Issue Queue.
The Issue Queue is reserved for Bug Reports and Feature Requests. To get help with configuration and troubleshooting, please use the following resources:
- Marlin Documentation - Official Marlin documentation
- Marlin Discord - Discuss issues with Marlin users and developers
- Facebook Group "Marlin Firmware"
- RepRap.org Marlin Forum
- Tom's 3D Forums
- Facebook Group "Marlin Firmware for 3D Printers"
- Marlin Configuration on YouTube
Marlin is constantly improving thanks to a huge number of contributors from all over the world bringing their specialties and talents. Huge thanks are due to all the contributors who regularly patch up bugs, help direct traffic, and basically keep Marlin from falling apart. Marlin's continued existence would not be possible without them.
Regular users can open and close their own issues, but only the administrators can do project-related things like add labels, merge changes, set milestones, and kick trolls. The current Marlin admin team consists of:
- Scott Lahteine [@thinkyhead] - USA - Project Maintainer
- Roxanne Neufeld [@Roxy-3D] - USA
- Keith Bennett [@thisiskeithb] - USA
- Victor Oliveira [@rhapsodyv] - Brazil
- Chris Pepper [@p3p] - UK
- Jason Smith [@sjasonsmith] - USA
- Luu Lac [@sjasonsmith] - USA
- Bob Kuhn [@Bob-the-Kuhn] - USA
- Erik van der Zalm [@ErikZalm] - Netherlands
Marlin is published under the GPL license because we believe in open development. The GPL comes with both rights and obligations. Whether you use Marlin firmware as the driver for your open or closed-source product, you must keep Marlin open, and you must provide your compatible Marlin source code to end users upon request. The most straightforward way to comply with the Marlin license is to make a fork of Marlin on Github, perform your modifications, and direct users to your modified fork.
While we can't prevent the use of this code in products (3D printers, CNC, etc.) that are closed source or crippled by a patent, we would prefer that you choose another firmware or, better yet, make your own.

























