Coder Social home page Coder Social logo

frix-x / klippain Goto Github PK

View Code? Open in Web Editor NEW
779.0 25.0 211.0 16.76 MB

Generic Klipper configuration for 3D printers

License: GNU General Public License v3.0

Python 29.87% Shell 70.13%
3d-printing gcode gcode-generation generic-repository klipper klipper-configuration klipper-macros 3d-printer firmware

klippain's Introduction

Klippain

Klippain - The pain-free recipe for (french)bread and butter Klipper configuration!

Klippain is a generic, modular, and highly customizable Klipper configuration for 3D printers. Designed for use on various machines such as Cartesian, CoreXY and CoreXZ, it has been reported working correctly on Voron V2.4, Voron Trident, Voron V0, Voron SwitchWire, TriZero, VZbot, Ender5, Ender3, Prusas, etc...

Klippain

Klippain is regularly updated with new features and merged PRs from users. You can reach me on the Voron Discord as Frix_x#0161.

Fun fact: "pain" \pɛ̃\ is the French word for bread, so there's no pain in this pain—only joy! Thanks to the French channel "honhonhonbaguette-FR" on the Voron Discord for the joke and name suggestion!

Features

Klippain is designed for versatility. By selecting and enabling the desired hardware and software options, it can be used on a wide range of machines.

Custom features available out of the box include a full featured set of standard macros, adaptive bed mesh, custom printer calibrations, automated input shaper workflows, and vibration measurement macros and scripts, ... Refer to the features documentation for a detailed list and usage instructions.

Installation

To install Klippain, first ensure you have already Klipper, Moonraker, and a WebUI installed on your printer. If not, you can use KIAUH.

Then, run the installation script using the following command over SSH. This script will backup your old configuration, download this GitHub repository to your RaspberryPi home directory, and set up Klippain in ~/printer_data/config. You will also be prompted to select and install MCU board_pins templates. This is recommended for faster mcu.cfg setup, but you can do it manually later if you prefer.

wget -O - https://raw.githubusercontent.com/Frix-x/klippain/main/install.sh | bash

Finally, Klippain requires a few simple steps to configure and customize it for your printer: please follow the configuration guide.

Warning:

General rule to keep the auto-update feature working: never modify Klippain files directly, but instead add overrides as per the documentation! To proceed, you can modify all the pre-installed templates in your config root folder (printer.cfg, mcu.cfg, variables.cfg and overrides.cfg) as they will be preserved on update.

Removing Klippain

In case Klippain doesn't suit your needs or if you installed it by mistake, you can easily remove Klippain and revert to your previous configuration by using the automated uninstall script. During the uninstallation process, the script will remove all specific Klippain files and configurations. Additionally, you will be given an option to restore your previously backed-up configuration, allowing your printer to return to its last working state (from before Klippain was installed).

To run the uninstall script, execute the following command over SSH:

wget -O - https://raw.githubusercontent.com/Frix-x/klippain/main/uninstall.sh | bash

Note:

All backups are preserved during the uninstallation process. So, you can easily revert back at any time if you wish to 😜

Support the Project

I strive to accommodate user requests that align with this configuration's design. Feel free to open an issue or a PR for specific hardware device support or new features.

Alternatively, consider buying me a coffee or contributing to new hardware purchases to support my work!

klippain's People

Contributors

aaarsene avatar austinrdennis avatar benoitone avatar blutack avatar claudioguareschi avatar d5aint avatar dhazelett avatar elpopo-eng avatar ericzimmerman avatar fbeaukmi avatar fragmon avatar frix-x avatar gethe avatar infowolfe avatar jurikaur avatar longdono avatar meteyou avatar nanometere avatar ndanyluk avatar nmsmith22389 avatar pvpacheco avatar rborling avatar reineruhry avatar surion79 avatar svennixx avatar tehniemer avatar tolson4 avatar w141-id avatar yomgui1 avatar zebons avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

klippain's Issues

BELT_SHAPER_CALIBRATION fail to generate png graph due to empty csv files

I'm getting this error when trying to run BELTS_SHAPER_CALIBRATION:

Traceback (most recent call last): File "/home/pi/klipper/scripts/graph_accelerometer.py", line 259, in main() File "/home/pi/klipper/scripts/graph_accelerometer.py", line 218, in main datas = [parse_log(fn, opts) for fn in args] File "/home/pi/klipper/scripts/graph_accelerometer.py", line 218, in datas = [parse_log(fn, opts) for fn in args] File "/home/pi/klipper/scripts/graph_accelerometer.py", line 22, in parse_log if not header.startswith('freq,psd_x,psd_y,psd_z,psd_xyz'): UnboundLocalError: local variable 'header' referenced before assignment

Add mcu temp

This should work with with any mcu with an STM cpu. In printer.cfg add the following include to the 'Other temperature sensors configuration' section:

[include config/hardware/temperature_sensors/mcu_temp.cfg]

Create the mcu_temp.cfg in the above location, containing the following code:

[temperature_sensor mcu]
sensor_type = temperature_mcu
min_temp =    0
max_temp =    90

Revamp vibr_calibrate_0x.cfg

is it possible to rename/revamp vibr_calibrate file because I find it not very explicit ?
We can do something like that :
vibr_calibrate_01.cfg -> shapper_calibration.cfg
vibr_calibrate_02.cfg -> axis_vibration_measurement.cfg

ValueError

@Frix-x, hey, I just tried to run your VIBRATIONS_CALIBRATION routine and I ran into a Python ValueError. I think it's because of how you're RegEx'ing with this line: https://github.com/Frix-x/klipper-voron-V2/blob/a3b33ae21b2f4c47bb86b0bc7b85f0e90eb47813/scripts/graph_vibrations.py#L176

turns out my login name (spikeygg) matches the start of your regex and the 'n' fits for resonance so instead of getting the speed for the speed variable, I get: ikeygg/reso and eventually: // ValueError: invalid literal for int() with base 10: 'ikeygg/reso'

This is probably because RegEx is greedy by default grabbing the first thing it finds. If I were doing this I'd breakout the basename with os first, that way you can be sure your operating on the filename and not the whole path. Like this:

speed = re.search('sp(.+?)n', os.path.basename(logname)).group(1)

btw: I made this change locally on my printer and ran it through the script and it worked.

macro pause_resume.cfg....restore_gcode_state move_speed should be mm/sec not mm/min

Hi, Shouldn't move_speed for restore_gcode_state be specified in mm/s rather than mm/min in your pause_resume.cfg macro? e.g.

{% set St = printer["gcode_macro _USER_VARIABLES"].travel_speed %}

Vs

{% set St = printer["gcode_macro _USER_VARIABLES"].travel_speed * 60 %}
RESTORE_GCODE_STATE NAME=PAUSE_state MOVE=1 MOVE_SPEED={St}

BTW - Really appreciate your adaptive mesh macros

horizontal_move_z can't be less than probe's z_offset

Hi there,

I followed the youtube guide and i get this message. Im using the klicky probe. Any idea why i am getting this message? This happens after the printer does the z_calibrate and tries to run the bed mesh and mesh points are being loaded.

Thanks

Relative Reference Index Calculation

The relative reference is calculated in the middle of the mesh.
If I understand correctly, relative index should be the point where you calibrated your nozzle, so for most people probably the middle of the bed.
The calculation here assumes, that the nozzle was set up in the middle and your print area always is in the middle of the bed.
Calculation should use coordinates as indicator and pick the probe point nearest to it.

To be clear, I tried calculating it myself but I cannot figure out a way to do it in Jinja, it's so limited.

Vibrations macros does not works on newly installed Moonraker

Hey,
As Moonraker changes files structures, the vibration macros does not work anymore on newly installed printer.

The shell command and plot_graphs.sh, where pathes are hardcoded, irremediably yield to error.

One way could be to convert all config to the new structure, another one to add symbolic links in the documentation.

What do you think about it?

Update process

Hi,

Can you add an update process in your README.md ?
For instance, If I want to update to your last macros but keep my changes (printer.cfg, pinout etc), how should I do ?

Thanks!

ERCF in pause and start_print.cfg

if an error loading error of the ercf occurs during print_start, the macro continues to run and the pause is only made when printing start...

Virtual Endstop (Sensorless homing) support

It would be nice to have an option in the upcoming V3 to enable Virtual Endstops for X and Y. At the moment I hard coded it by setting the endstop pins to tmc2209_stepper_x:virtual_endstop and tmc2209_stepper_y:virtual_endstop which works but is not pretty.

Limit acceleration in homing QGL etc.

I have configured an high Accel for my 2.4 (max accel 30k) and this disturbs homing and qgl.
So I propose to add a variable in variable.cfg to limit accel in those macro, something like accel_during_homing_tilt

Add calibration for the max flow

This issue is to track and not forget about this.

Goal is to be able to quicly find out the max flow for every hotend and every material you have with only a click in Mainsail/Fluidd

SAVE_CONFIG is not working

why am I having issues saving? even before you changed things I had problems.. have to move my extruder and bed heater to printer.cfg for it to save but its not working when i do this either. im saya that its conflicting.

add move type to enter probe dock when attaching

In the current version, when we want to attach a probe, we perform the entry movement reversing the exit movement.
For euclid it's better to enter by the side the movement is softly

So I propose to add a type/lenght of movement in config

variable_probe_move_to_enter_when_attaching: "front"
variable_probe_move_to_enter_when_attaching_length: 20

Error evaluating 'homing_override:gcode': TypeError: can't multiply sequence by non-int of type 'float'

Hi,

I'm setting up a fresh install and i ran into this issue when i try to home: !! Error evaluating 'homing_override:gcode': TypeError: can't multiply sequence by non-int of type 'float'

I am using the default "variable_sensorless_current_factor: 70"

attached is the relevant klipper log

`Homing X

Error evaluating 'homing_override:gcode': TypeError: can't multiply sequence by non-int of type 'float'
Traceback (most recent call last):

File "/home/pi/klipper/klippy/extras/gcode_macro.py", line 61, in render
return str(self.template.render(context))

File "/home/pi/klippy-env/lib/python2.7/site-packages/jinja2/environment.py", line 1090, in render
self.environment.handle_exception()

File "/home/pi/klippy-env/lib/python2.7/site-packages/jinja2/environment.py", line 832, in handle_exception
reraise(*rewrite_traceback_stack(source=source))

File "", line 80, in top-level template code

TypeError: can't multiply sequence by non-int of type 'float'
Error evaluating 'homing_override:gcode': TypeError: can't multiply sequence by non-int of type 'float'`

WLED/Led_effect implementation

Hi,

Just wondering if you have any ideas how an end user could implement WLED? All of the current lighting calls are baked into the non-modifiable macros and use a specific format. That makes it a bit hard to use overrides (from what I understand) since we wouldn't really need to specify rgb values or use the current format.

WLED allows us to use complex animations and offload the processing to a very inexpensive esp32. All of the setup is done on the esp32 gui.

To use it in klipper, we simply add WLED to moonraker via IP or serial, and call the specific preset that we want (which was created through the WLED interface on the esp32).

For example:

WLED_ON string=chamber preset=1

This would load any complex animations or effects we set up for preset 1 without any extra configuring on the klipper side.

Here is the documentation:
https://moonraker.readthedocs.io/en/latest/configuration/#wled

[FR] a way to disable the clicky probe

Currently when running the probe_calibrate it will try to do a probe dock and mount. My solution recently was to just remove the code inside probe_base.cfg as I use a 8mm probe.

for generalizing the config I beleive it would be helpfult o simply disable the klicky probe docking.

Sensorless homing problem

I get this error msg in the console upon start-up:
Error evaluating 'homing_override:gcode': jinja2.exceptions.UndefinedError: 'dict object' has no attribute 'sensorless_current_factor'

This happened after moving to klippain from your earlier version. Not sure where to look, the klippy log looks normal to me.

My machine is stock 2.4, with TAP and Stealthburner. normal endstops installed.

Improve README

Now that the config is becoming more generic and used as is by multiple people (at least elpopo and me) on multiple machines (at least Voron V2.4 machines and also a TriZero machine), the REAME need to be improved to become more focused on global install instructions

Relocating STATUS_LEDS to the initial Macro

At the Moment it is placed at START_PRINT. Resulting in changing the light only when printing.

Moving the STATUS_LEDS call to the macro will result in changing lights everytime the macro is called.

Add calibration for Z belts tension

This issue is to track and not forget to add a macro to calibrate and check the Z belts tension on a belted and multiple motor Z axis printer like the Voron 2.4

Planned work:

  • Add a macro that execute some move command to make the toolhead resonate in the Z direction (all the Z motors at the same time or if [force_move] is available by using it for 1x Z at a time if possible)
  • Add a python script to analyze the data for every measurement and graph something to be able to see the difference between all the Z belts

Malformed command 'CALIBRATE_Z BED_POSITION=(0, 0)'

I'm getting the above error when the print_start macro calls the auto_z_calibration macro with the computed mesh_center.

Not sure what exactly the issue is, rather I'm not sure why the {mesh_center} variable is passing (0, 0) instead of (0,0) or (174,174) to the CALIBRATE_Z macro. I believe CALIBRATE_Z BED_POSITION=(0,0) syntax works correctly as I tried that when I ran it manually.

The entire bed_mesh.cfg was copied verbatim and include behavior is working as expected.

Here is a excerpt from my PRINT_START macro if it will help.

...
{% set FL_SIZE = params.SIZE|default("0_0_0_0")|string %}
COMPUTE_MESH_PARAMETERS SIZE={FL_SIZE}

SCRUB

{% set mesh_center = printer["gcode_macro _ADAPTIVE_MESH_VARIABLES"].mesh_center %}
CALIBRATE_Z BED_POSITION={mesh_center}

BED_MESH_CLEAR
Attach_Probe_Lock
ADAPTIVE_BED_MESH
Dock_Probe_Unlock
...

Here is the console output from the commands leading up to the error

RELATIVE_REFERENCE_INDEX=12 ALGORITHM=bicubic
Computed mesh parameters: MESH_MIN=120,120 MESH_MAX=229,229 MESH_CENTER=174,174 PROBE_COUNT=5,5 ...
!! Malformed command 'CALIBRATE_Z BED_POSITION=(0, 0)'
!! Malformed command 'CALIBRATE_Z BED_POSITION=(0, 0)'

I'd appreciate any insight.

Small error in pa_calibrate macro

Hi,
found a small error in line 109 of the pa_calibrate macro:
On calculating the print_height variable, spacing_purge is subtracted, however, the true print height needs to be calculated by subtracting spacing_band and then ADDING spacing_purge.

Suggested fix:
Change line to: {% set print_height = num_bands * band_height - spacing_band + spacing_purge %}

Additionally, at the moment the calculation of print_height does not take the line_width of the purge lines into account.
Also, the bands_per_height variable is calculated with one extra spacing_band at the top that is not needed since there is no more band to be printed.

Suggested fix: See pull request.

Different Bed Size for "CALIBRATE" macro

Hello,

At the moment, the macro "CALIBRATE" call "PA" and "Flow" calibration with a fixe bed size of 300x300.

{% if TYPE=="flow" %}
        [...]
        START_PRINT [...] SIZE=130_130_170_170
        [...]
    {% elif TYPE=="pressure_advance" %}
        [...]
        START_PRINT [...] SIZE=90_90_210_210
        [...]

I think it would be beneficial to include some simple parameters to call this macro with different bed sizes. (at least 300 and 350)

Thank

Add Input Shaper Workflow and vibration graph documentation

There doesn't seem to be any documentation describing how to interpret the belt tension graphs that your scripts generate. It would be useful to know how to read the graphs:

  • What do the peaks represent?
  • What should the user be looking for?
  • How to fix issues?

Thank you.

Naming inconsistency vibr_calibrate_02.cfg

I belive there are some slight inconsistancyies in the Instructions of vibr_calibrate_02.cfg

4. Add vibrations_graph.py in the same folder in your config. You can find this file in my scripts folder

4bis. Make it executable using SSH: type 'chmod +x ./vibrations_graph.py' when in the folder.

The provided python script in [graph_vibrations.py](https://github.com/Frix-x/klipper-voron-V2/blob/main/scripts] is however called graph_vibrations.py, so just the two words spun arround.

Thanks a lot for you work !!!

Error plotting belt graphs

Tried running the belt calibration today. Both CSVs are generated but the plotting fails with an error about columns reduced from four to one on line 25436. Thoughts on how to fix?

Also is there a way to generate manually with the CSVs?

Vibrations measurements command not found

Good morning, I have this problem, I can't understand why it always gives this error.

read write awards are ok i can edit the plot_graphs.sh on fluid and save

I'm using a mks pi , the directory is ~/mks instead of ~/pi

effectively it seems that it finds the file but as I am a nuvato on linux I am not understanding if you can help me thank you

// Resonances data written to /tmp/resonances_y_20230227_152504.csv file
23:27:26 // Running Command {plot_graph}...:
23:27:26 // /home/mks/printer_data/config/scripts/plot_graphs.sh: line 7: $'\r': command not found
23:27:26 // /home/mks/printer_data/config/scripts/plot_graphs.sh: line 14: $'\r': command not found
23:27:26 // /home/mks/printer_data/config/scripts/plot_graphs.sh: line 24: $'\r': command not found
23:27:26 // /home/mks/printer_data/config/scripts/plot_graphs.sh: line 31: $'\r': command not found
23:27:27 // /home/mks/printer_data/config/scripts/plot_graphs.sh: line 32: $'\r': command not found
23:27:27 // /home/mks/printer_data/config/scripts/plot_graphs.sh: line 39: $'\r': command not found
23:27:27 // /home/mks/printer_data/config/scripts/plot_graphs.sh: line 40: $'\r': command not found
23:27:27 // /home/mks/printer_data/config/scripts/plot_graphs.sh: line 44: $'\r': command not found
23:27:27 // /home/mks/printer_data/config/scripts/plot_graphs.sh: line 45: syntax error near unexpected token $'{\r'' // /home/mks/printer_data/config/scripts/plot_graphs.sh: line 45: function plot_shaper_graph {
'
23:27:27 // Command {plot_graph} finished

#################################################################################################################
RESULTS_FOLDER=/mks/printer_data/config/adxl_results # Path to the folder where storing the results files
SCRIPTS_FOLDER=
/mks/printer_data/config/scripts # Path to the folder where the graph_vibrations.py is located
KLIPPER_FOLDER=~/mks/klipper # Path of the klipper main folder
STORE_RESULTS=0 # Number of results to keep (older files are automatically cleaned). 0 to keep them indefinitely
#################################################################################################################

Update readme file to be in accordance with macro name

In the readme file, we can find an exemple of the Gcode Start command for Superslicer :
START_PRINT EXTRUDER_TEMP={first_layer_temperature[initial_extruder] + extruder_temperature_offset[initial_extruder]} BED_TEMP=[first_layer_bed_temperature] MATERIAL=[filament_type] CHAMBER=[chamber_temperature] SIZE={first_layer_print_min[0]}{first_layer_print_min[1]}{first_layer_print_max[0]}_{first_layer_print_max[1]}

But the macros were renamed to PRINT_START and END_PRINT, so it'd be better to update the readme file to respect macro's names

Display support

Hi
Do you plan to support displays and menus? For example mini12864.

Just a typo

Hello,

You have a little typo in graph_vibrations.py
# Be sure to make this script executable using SSH: type 'chmod +x ./graph_vibrations.sh' when in the folder !
It should be ".py" not ".sh"
# Be sure to make this script executable using SSH: type 'chmod +x ./graph_vibrations.py' when in the folder !

Missing 's' in filename

In files vibr_calibrate_01.cfg and vibr_calibrate_02.cfg, the 's' is missing at the end of the file name for making it executable.

  1. Add plot_graphs.sh somewhere in your config. You can find this file in my scripts folder

3bis. Make it executable using SSH: type 'chmod +x ./plot_graph.sh' when in the folder

Otherwise, worked perfect.
Was able to make my machine run a little quieter.
Thanks for spending the time to build this.

Option 'run_current' in section 'tmc2209 extruder' must be specified

Issue

The issue seems to exist in many forms as I fix them. I've had it complain about the extruder. I also had it complain Option 'sensor_type' in section 'heater_bed' must be specified when I removed the section related to the SB2040 in the overrides.

I'm still looking into this, but wanted to open a ticket. I'm not sure how I could have done anything wrong (yet) as this is a new install from the perspective of the system.

Context

I wanted a fresh install so I moved all files to a directory called old. I then moved the kiuah directory back. I removed klipper, moonraker, etc then installed them again using Kiuah. I then ran the install script.
eg:
mkdir old;mv * old/; mv old/kiuah .

  • Installed klipper w/kiuah
  • Installed moonraker w/kiuah
  • Installed mainsail w/kiuah
  • Installed crowsnest w/kiuah
  • rebooted the pi.
  • Installed klippain wtih: wget -O - https://raw.githubusercontent.com/Frix-x/klippain/main/install.sh | bash

Used klippain guided install to install initial hardware, including selecting the sb2040 canbus toolhead.

Here are the current versions:
image

Below is the relevant logs.

Restarting printer
Start printer at Fri Apr 7 11:13:19 2023 (1680880399.4 4604.1)
klippy_cut.log

Pin named z:[Alias]

In many .cfg files the pines are named z:[name of the alias].

with the z: the config dont work. I have to delete all z: then the config load.

Home Y before X

With Klicky, you can chose what axe to home first.
With an EBB36 can you home Y first, back away a few centimeters and home X, so the EBB doesn't crash in the Z chain.

See klicky_variables.cfg below:
variable_home_backoff_x: 10 # how many mm to move away from the X endstop after homing X variable_home_backoff_y: 20 # how many mm to move away from the Y endstop after homing Y variable_override_homing: 'Y' # configures what axis to home first

Would it be possible with your macros ?

BTT_Octopus definition pins

Hello, I notice the user_templates of the BTT_Octopus uses E_HEATER=MCU_HE0 & BED_HEATER=MCU_HE1 being MCU_HE0=PA2 & MCU_HE1=PA3 respectively, in most case the user should/would have used MCU_BED0=PA1 for BED and not PA3.
I use a Rapido and wired the heater to PA1 so when I simply swapped over the MCU_HE0 & MCU_HE1 in my MCU.cfg thats when I noticed it.

Furthermore, should I copy my entire MCU.cfg content or just my swapped terminals (lights, nevermore, neopixels) and serial path in overrides.cfg or the MCU.cfg also doesnt get errased on updates?

I also use a toolhead thermistor (I never really confirmed how accurate it was but yeah still using it), it seems for this LDO toolhead board I have not manage to add it in my overrides.cfg successfully it will say and I have to modify /config/hardware/temperature_sensors/chamber_temp.cfg and use the following making the Klippain dirty obviously.

[gcode_macro _USER_VARIABLES]
variable_chamber_temperature_sensor_enabled: True
variable_chamber_temperature_sensor_name: "Chamber"
gcode:

[thermistor CMFB103F3950FANT]
temperature1: 0.0
resistance1: 32116.0
temperature2: 40.0
resistance2: 5309.0
temperature3: 80.0
resistance3: 1228.0

[temperature_sensor Chamber]
sensor_type: CMFB103F3950FANT
sensor_pin: CHAMBER_TEMPERATURE
min_temp: 0
max_temp: 100
gcode_id: chamber_th

Voron TAP support

I managed to change the code a bit to work with the voron tap but there are some changes needed to have a general approach.
Here are a few things I have found that need to be done:

  • probe action codes need a if voron tap enabeled statement
  • qgl has attach_prob & dock_probe in them, needs to be more general for probes that don't need docking (it seems like the overrides are just for dockable probes? If so then add them to a dockable_probe.cfg instead of including it through the printer.cfg
  • heating up the probe to 150deg before probing needs to be added to the start_gcode or to the general gcode, maybe let the user decide?

Nothing really devestating just a few small additions/changes.

I can work on that if it's alright with you.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.