# Creality K1 & K1 Max - Klipper

## Root... ajusta tu máquina al detalle

Como ya hemos comentado la K1 tiene acceso limitado a su firmware Klipper, la propia Creality ha liberado el [**proceso aquí**](https://github.com/CrealityOfficial/K1_Series_Annex/blob/main/root%20guide/K1%20Series%20root%20guide.pdf), en nuestro caso usaremos el método del compañero [**Guillouz**](https://github.com/Guilouz) que también tenéis [**disponible en su Github**](https://github.com/Guilouz/Creality-K1-and-K1-Max/wiki/Install-Rooted-Firmware).

**El porqué es importante,&#x20;**<mark style="color:orange;">**dependiendo del tipo de usuario que utilice la máquina**</mark>**, disponer de acceso root a la máquina?**

Principalmente por el hecho de que **Creality emplea una versión de Klipper personalizada, capada en ciertas funciones y desactualizada con respecto a las versiones oficiales** lo que nos **puede limitar en el uso y disfrute de ciertas funciones de Klipper que podrían mejorar considerablemente nuestra K1**.

{% hint style="success" %} <mark style="color:green;">**AGRADECIMIENTOS!!!**</mark>

**Os invitamos, por el gran trabajo y aporte, a**[ **invitar a un café al compañero Guillouz a través de su Ko-fi**](https://ko-fi.com/guilouz)**.**
{% endhint %}

En los siguientes pasos os vamos a describir el proceso de tener acceso root a nuestra Creality K1 y K1 Max y añadir mejoras en la configuración y gestión de esta que, a día de hoy, no están disponibles en la máquina.

{% hint style="danger" %} <mark style="color:red;">**IMPORTANTE!!!**</mark>

* **este proceso puede invalidar la garantía de tu máquina**
* **el uso y modificación de la configuración y firmware de la máquina puede hacer que esta no funcione correctamente o se produzcan fallos**

**Si no tienes conocimientos de lo que vas a realizar te recomendamos NO realizar estos pasos.**

**Es responsabilidad de cada uno proceder a realizar estos cambios y cualquier posible fallo o daño originado en el proceso o uso.**
{% endhint %}

Comenzamos el proceso:

**En el caso de que nuestro firmware instalado no tenga opción de root**, actualmente las versiones [1.3.2.1](https://drive.google.com/file/d/1-hD7gfqsY3cuEoSbo1h7D2EJTM5Njihk/view?usp=share_link) ([changelog](https://raw.githubusercontent.com/Guilouz/Creality-K1-and-K1-Max/main/Changelogs/Changelog_1.3.2.1.txt)) y [1.3.2.8](https://drive.google.com/file/d/1E7lPZyGdIBAcshr9Ivz-4JR23cSM9dmM/view?usp=share_link) ([changelog](https://raw.githubusercontent.com/Guilouz/Creality-K1-and-K1-Max/main/Changelogs/Changelog_1.3.2.8.txt)) o superiores ya cuentan con opciones root, deberemos actualizar.

{% hint style="warning" %} <mark style="color:orange;">**ATENCIÓN!!!**</mark>

**Cuando actualizamos a una nueva versión de firmware el fichero gcode\_macros.cfg será eliminado por lo que es aconsejable realizar un backup antes de realizar el proceso. Os incluiremos una forma de realizar esos backups a un repositorio de Github y tenerlo automatizado.**

**Por otro lado tu printer.cfg suele no ser modificado aunque en cualquier caso también es aconsejable realizar un backup.**

**Por supuesto lo anteriormente comentado solamente es posible una vez tengamos acceso root a nuestra máquina.**
{% endhint %}

* Utilizaremos un USB con formato FAT32/4096 donde copiaremos el `.img` del firmware, en el punto anterior tienes un link a ellos, que copiaremos en la raíz el USB.\ <mark style="color:green;">**Los links a los firmwares de la parte superior son válidos tanto para el modelo K1 como el K1 Max.**</mark>
* Conectaremos, con la impresora encendida y en la pantalla de home, el USB y nos aparecerá un aviso indicando que tenemos un nuevo firmware. Pulsaremos Upgrade y esperaremos a que finalice el proceso.
* Una vez finalizado el proceso, la impresora se reiniciará, cuando nos aparezca la pantalla home de nuevo podremos retirar el USB
* Es más que aconsejable realizar un `Reset Factory` para restaurar los valores a los de fábrica.

{% hint style="info" %}
Reset Factory:

Como ya hemos comentado es aconsejable realizar un Reset Factory antes de realizar el proceso de root. La forma más sencilla de realizar el proceso normalmente es utilizando la [**herramienta que Creality nos facilita que podemos descargar desde aquí**](https://github.com/Guilouz/Creality-K1-and-K1-Max/raw/main/Scripts/Creality_K1_Reset_Utility.zip).

Simplemente descomprimir el zip descargado y abrir el fichero con nuestro navegador web favorito (Chrome, Edge, Safari, etc..) Creality\_K1\_Reset\_Utility.html.

<img src="/files/H5eDXwPzOlTVC095E2qb" alt="" data-size="original">

Tan solo tendremos que poner la IP de nuestra impresora que podremos obtener en la parte de configuración de red desde la pantalla de la impresora y pulsar el botón RESET.
{% endhint %}

Si ya contamos con una versión de firmware que soporta root, realizaremos los siguientes pasos:

* Desde la pantalla iremos a la opción `Settings -> Root account information`

<figure><img src="/files/uDoDIzeiHGSokKa3sgP2" alt=""><figcaption></figcaption></figure>

* Os aconsejamos leer detenidamente el texto y los avisos sobre realizar root sobre la máquina, si estamos de acuerdo **marcaremos el check de `I have understood the risks of root login` y pulsaremos `OK`**

<figure><img src="/files/PATrDyw3NPS9O9IvUTQo" alt=""><figcaption></figcaption></figure>

* A continuación nos dará los datos de nuestro root para poder [**acceder por SSH a nuestro firmware**](https://klipper.3dwork.io/klipper/empezamos/puesta-en-marcha-inicial#conexion-a-ssh)

<figure><img src="/files/vTs4eZ4NvgNvf5RBckKR" alt=""><figcaption></figcaption></figure>

{% hint style="danger" %} <mark style="color:red;">**IMPORTANTE!!!**</mark>

**El acceso root ha de reactivarse cada vez que realicemos un reset de nuestra impresora a los valores de fábrica.**
{% endhint %}

### Instalación de Helper Script para K1

Klipper está basado en Linux y su manejo interno va a requerir de ciertos conocimientos básicos de este para poder realizar ciertas acciones.

En este caso, para facilitar el proceso, el compañero [**Guillouz**](https://github.com/Guilouz) nos ha facilitado mucho la vida con una herramienta a base de menús, al estilo [Kiauh](https://klipper.3dwork.io/klipper/instalacion#instalando-kiauh). Para poder instalar este más que interesante asistente de instalación:

* Accederemos por SSH, utilizando nuestro cliente favorito, a nuestra K1 utilizando la IP de esta y los datos de usuario/password que obtuvimos en el paso anterior.\
  En nuestro caso utilizamos como cliente [**Terminus**](https://termius.com/download) que es sencillo, potente, muy visual además de multiplataforma, también se puede usar otros como Putty:

<figure><img src="/files/vWArEyXfsAESrr77VX4M" alt=""><figcaption></figcaption></figure>

* desde la línea de comandos lanzaremos el siguiente comando para la instalación del Helper Script K1:

{% code title="SSH CLI" %}

```bash
git clone https://github.com/Guilouz/Creality-Helper-Script.git /usr/data/helper-script
```

{% endcode %}

{% hint style="info" %}
En el caso que tengamos problemas para el clonado del repositorio del Helper Script K1:

* Verificaremos con el comando `date` que tenemos la hora ajustada correctamente, es importante la zona horaria también. Podemos ajustar la fecha/hora con:

`date -s "YYYY-MM-DD HH:MM:SS"`

* En caso que sigamos sin problemas podemos indicar que Git no verifique los certificados SSL, algo no óptimo pero que puede solventarnos el problema:

`git config --global http.sslVerify false`
{% endhint %}

* Una vez instalado lanzaremos el Helper Script K1 utilizando el siguiente comando:

{% code title="SSH CLI" %}

```bash
sh /usr/data/helper-script/helper.sh
```

{% endcode %}

{% hint style="info" %}
Actualización Helper Script K1:

Aunque, una vez instalado, también disponemos de una opción dentro de los menús para poder comprobar actualizaciones con la opción `u (Check Script Updates)`\
![](/files/AsNT6L8EWychC1r9btsX)
{% endhint %}

<figure><img src="/files/ETYUDMN2loFdfpCQIH0d" alt=""><figcaption></figcaption></figure>

### Instalación componentes Klipper en K1

En este punto ya tenemos todo listo para verdaderamente transformar nuestra K1 para poder personalizarla y ajustarla a nuestro gusto libremente.

Utilizando el **Helper Script K1** procederemos a:

{% hint style="warning" %} <mark style="color:orange;">**ATENCIÓN!!! Errores durante la instalación de componentes/paquetes:**</mark>

**En el caso que tengamos errores durante la instalación de los componentes,ejemploo:**

**`Connecting to github.com (20.248.137.48:443) wget: TLS error from peer (alert code 80): 80 wget: error getting response: Connection reset by peer Download failed. Exit code: 1 [/CODE]`**

**Pueden estar relacionados con diferentes problemas:**

* **Nuestra K1 se conectó a nuestra red pero no tiene acceso a internet, os aconsejamos revisar la configuración de red de vuestra K1 o vuestro router**
* **Que necesitemos instalar el gestor de paquetes Entware, desde el Helper Script K1 elegiremos la opción `1 (Install)` pulsaremos `ENTER` y en el siguiente menú la opción `5 (Entware)` y volveremos a intentar la instalación.**
* **Falta del paquete wget-ssl, en el caso que veamos errores de TSL/SSL es posible que nos falte este paquete en nuestro sistema. Desde la línea de comandos lanzaremos**

  <pre class="language-bash"><code class="lang-bash"><strong>opkg install wget-ssl
  </strong></code></pre>

{% endhint %}

<figure><img src="/files/lg34lTkhOEZi5Qw4Echb" alt=""><figcaption></figcaption></figure>

* **Instalación Moonraker and Nginx**, paso previo e imprescindible es la instalación de Moonraker que es la API que va a permitir a otros componentes que instalemos "hablar" con Klipper. Por otro lado, Nginx es un demonio web que permitirá el funcionamiento de Moonraker además de las UI que queramos instalar.

<figure><img src="/files/wWuAyIsAPjwF2IRmoIJg" alt=""><figcaption></figcaption></figure>

* **Instalación de UI Web**, será la interfaz web con la cual podremos gestionar nuestra máquina y tenemos tres opciones en este caso:

{% tabs %}
{% tab title="Mainsail" %}
Mainsail es una de las interfaces web para Klipper más utilizadas y con más opciones que podemos contar.

Para poder instalarla elegiremos la opción `1 (Install)` pulsaremos `ENTER` y en el siguiente menú la opción `3 (Mainsail)` y procederemos a la instalación.

<figure><img src="/files/2Mzy2IwHbfVJgF5wyy05" alt=""><figcaption></figcaption></figure>

Recuerda que una vez instalado y para acceder iremos a nuestro navegador de nuestro ordenador/móvil/tablet y pondremos \<IP\_K1>:4409 (donde sustituiremos \<IP\_K1> por la IP que obtuvimos en pasos anteriores y utilizamos para conectar por SSH).

<figure><img src="/files/WRtIyLeLG7ASzQGK0QQD" alt=""><figcaption></figcaption></figure>

Ya podremos gestionar nuestra impresora!!!
{% endtab %}

{% tab title="Fluidd" %}
Fluidd es otra de las interfaces web para Klipper más utilizadas aunque su desarrollo no es tan activo como Mainsail tiene funciones muy interesantes.

Para poder instalarla elegiremos la opción `1 (Install)` pulsaremos `ENTER` y en el siguiente menú la opción `2 (Fluidd)` y procederemos a la instalación.

Recuerda que una vez instalado y para acceder iremos a nuestro navegador de nuestro ordenador/móvil/tablet y pondremos \<IP\_K1>:4408 (donde sustituiremos \<IP\_K1> por la IP que obtuvimos en pasos anteriores y utilizamos para conectar por SSH).

<figure><img src="/files/fL6CgXydI1399AXWEnFb" alt=""><figcaption></figcaption></figure>

Ya podremos gestionar nuestra impresora!!!
{% endtab %}

{% tab title="Mainsail/Fluidd Cloud" %}
Otra opción con la que podemos utilizar tanto Mainsail como Fluidd sin necesidad de utilizar nada es mediante las versiones Cloud de estas

Con poner en nuestro navegador:

<table><thead><tr><th width="135">Servicio</th><th>URL</th></tr></thead><tbody><tr><td>Mainsail</td><td><pre class="language-klipper-config"><code class="lang-klipper-config">https://my.mainsail.xyz
http://my.mainsail.xyz
</code></pre></td></tr><tr><td>Fluidd</td><td><pre><code>https://app.fluidd.xyz
http://app.fluidd.xyz
</code></pre></td></tr></tbody></table>

Nos solicitará añadir una nueva impresora donde pondremos, dependiendo del interfaz, la IP y puerto de nuestro Moonraker.
{% endtab %}
{% endtabs %}

### **Instalación componentes extras de sistema**

El sistema utilizado por Creality para estas K1 como ya hemos comentado está muy limitado lo cual de por si no es malo para un usuario que quiera utilizar la máquina tal como viene pero si queremos sacar más provecho de ella necesitaremos instalar componentes extras a este.

#### Entware

Entwaare es un respositorio de software para sistemas Linux que nos va a permitir la instalación de componentes extras a nuestro sistema.

La instalación es muy sencilla:

* Lanzaremos Helper Script desde nuestro cliente SSH favorito `cd && sh ./installer.sh`
* Una vez ya tenemos los menus de Helper Script iremos a la opción 1 \[Install] y de las opciones, dentro de UTILITIES, elegiremos 4 \[Install Entware]

<figure><img src="/files/k5TsAlAdm9UY6RMDkCYL" alt=""><figcaption></figcaption></figure>

* Una vez instalado:
  * podemos encontrar la lista que paquetes/software disponibles [aquí](https://bin.entware.net/mipselsf-k3.4/Packages.html)
  * podremos instalar un paquete/software mediante `opkg install <packagename>`
  * podremos revisar si tenemos actualizaciones pendientes y actualizar utilizando `opkg update` y `opkg upgrade`

#### Nano

Uno de los paquetes que os aconsejamos instalar es Nano que es un editor por linea de comandos y que seguro que nos va a ser util en algún momento.

Lo instalaremos lanzando `opkg install nano`

Para más información o como usarlo os aconsejamos revisar el siguiente [link](https://josesalazarpantoja.gitbooks.io/comandos-basicos-linux/content/comando-nano.html).

#### SFTP

El siguiente paquete a instalar es SFTP ya que no viene habilitado por defecto y en el caso que necesitemos transferir ficheros hacia o desde otro ordenador nos va a ser de gran ayuda.

Instalaremos el paquete con `opkg install openssh-sftp-server; ln -s /opt/libexec/sftp-server /usr/libexec/sftp-server`

Una vez instalado ya podremos utilizar cualquier cliente SFTP para poder acceder y transferir ficheros de forma cómoda, en nuestro caso os aconsejamos [Cyberduck](https://cyberduck.io/download/) ya que es multiplataforma, fácil y sencillo de usar.

<figure><img src="/files/2grNhDorTv994S8jZ0Wu" alt=""><figcaption></figcaption></figure>

### **Copias de seguridad**

Antes de empezar a añadir todas las mejoras que podréis ver a continuación nos gustaría que tuvierais en cuenta que en alguno de los procesos siguientes algo puede fallar por lo que es más que aconsejable disponer de un backup/copia de seguridad de los datos más importantes.

Para ello el Helper Script nos facilita la tarea con opciones para realizar un backup de nuestros ficheros de configuración Klipper.

{% tabs %}
{% tab title="Backup/Copia de seguridad" %}
Lanzaremos desde el Helper Script la opción 4 \[Backup & Restore] y la opción 1 \[Backup configuration files]:

<figure><img src="/files/cb6aAK5w8kpO73iYf0Gn" alt=""><figcaption></figcaption></figure>

Esto nos va a dejar un fichero backup\_config.tar.gz con todo nuestro backup de configuraciones Klipper en el directorio /config (/usr/data/printer\_data/config/) accesible desde nuestro interfaz web:
{% endtab %}

{% tab title="Restore/Restaurar copia de seguridad" %}
Seguiremos el mismo proceso pero en este caso seleccionaremos la opción 2 \[Restore configuration files] que realizará la restauración de los ficheros de nuestro último backup.
{% endtab %}
{% endtabs %}

## **Mejoras con root**

A continuación y ya que tenemos root en la máquina vamos a realizar algunos cambios que permitan mejorar el rendimiento y funcionalidad de nuestra K1:

### **Nivelación manual de cama asistida**

Una funcionalidad muy interesante es [Screws Tilt Adjust](https://klipper.3dwork.io/klipper/empezamos/nivelacion-cama-manual#nivelacion-manual-cama-con-sensor), la cual nos permite ajustar la nivelación manual de nuestra cama utilizando la precisión del sensor de nivelación de nuestra K1.

Es interesante, como veremos en siguientes puntos, que no siempre la cama de nuestras K1 se encuentra en las mejores condiciones. Para poder corregir esto este mod nos va a ir sensacional.

El proceso es muy sencillo gracias al Helper Script desde el cual seleccionaremos la opción 1 \[Install] > 15 \[Install Screws Tilt Adjust Support]:

<figure><img src="/files/iYdZ6lyRnr2qCJslHwAy" alt=""><figcaption></figcaption></figure>

Una vez instalado ya tendremos disponible las nuevas macros de [Screws Tilt Adjust](https://klipper.3dwork.io/klipper/empezamos/nivelacion-cama-manual#nivelacion-manual-cama-con-sensor) (SCREWS\_CALIBRATION) y/o podremos lanzar el proceso desde nuestra interfaz web:

{% tabs %}
{% tab title="Mainsail" %}

<figure><img src="/files/DPQVfd2Vxa72EwwEX6v7" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/Yy94rlmg5u0sxUFGBGXR" alt=""><figcaption></figcaption></figure>
{% endtab %}

{% tab title="Fluidd" %}

<figure><img src="/files/akws6kQh8PgP1nCpy0tJ" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/J53GPx7YKLUTeyOzopKv" alt=""><figcaption></figcaption></figure>
{% endtab %}
{% endtabs %}

### **Nivelación automática de cama Klipper**

Creality por defecto usa `lagrange` como método de interpolación en el cálculo de nuestra malla de nivelación mientras que el método que puede ser más beneficioso puede ser `bicubic`.\
Para modificar esto iremos a nuestro `printer.cfg` y en la sección `[bed_mesh]` añadiremos las siguientes lineas al final de dicha sección:<br>

```django
algorithm: bicubic
bicubic_tension: 0.1
```

Quedando nuestra sección `[bed_mesh]` así:<br>

```django
[bed_mesh]
speed: 150
mesh_min: 5,5
mesh_max: 295,295
probe_count: 6,6
fade_start: 3.0
fade_end: 10.0
algorithm: bicubic
bicubic_tension: 0.1
```

<figure><img src="/files/SFtCEEn3RrutMr1WIVk4" alt="" width="375"><figcaption><p>Estado del mallado de cama por defecto</p></figcaption></figure>

<figure><img src="/files/J2d2sjsZiHQT4pR6gqdL" alt="" width="375"><figcaption><p>Estado del mallado de cama usando bicubic</p></figcaption></figure>

### **KAMP... nivelación y purga adaptativa**

[KAMP](https://github.com/kyleisah/Klipper-Adaptive-Meshing-Purging) siempre es un componente que nos gusta añadir a nuestras impresoras, esta extensión a Klipper nos permite generar un mallado adaptativo al área de impresión de los objetos a imprimir con lo cual tendremos un área de mallado más definido a las necesidades mejorando considerablemente el resultado de nuestras primeras capas.

KAMP calcula el área de mallado teniendo en cuenta la información que proporciona el laminador al habilitar la función en estos de etiquetado de objetos.

Comenzamos con la instalación para nuestra K1:

{% hint style="warning" %}
En el caso que usemos una versión antigua de KAMP es aconsejable eliminar todas las configuraciones previas que hicimos ya que en las nuevas versiones del Helper Script K1 se automatizaron estas y no es necesario realizar ningún paso manualmente.
{% endhint %}

* Volveremos a utilizar el **Helper Script K1** desde SSH, en este caso usaremos las opciones `1 (Install)` y `7 (Klipper Adaptative Meshing & Purging)`:

<figure><img src="/files/vTeFrMg7eKUEEFR3TTan" alt="" width="375"><figcaption></figcaption></figure>

* El Helper Script K1 va a realizar todas las tareas de ajustes en nuestra configuración de Klipper.
* Tal como hemos comentado KAMP se basa en la función del laminador para etiquetar los objetos a imprimir por lo que tenemos que tener habilitada esta función para que KAMP funcione correctamente.

{% tabs %}
{% tab title="OrcaSlicer" %}
En OrcaSlicer podemos encontrarla en `Others` y marcaremos `Exclude Objects y Label Objects`.

<figure><img src="/files/bBzIZPiloTw0JTYOC4ck" alt=""><figcaption></figcaption></figure>
{% endtab %}

{% tab title="PrusaSlicer" %}
En el caso de PrusaSlicer activaremos el etiquetado de objetos:

<figure><img src="/files/yUg1UMzCYUv5WqybDSj1" alt=""><figcaption></figcaption></figure>
{% endtab %}
{% endtabs %}

* Dependiendo de que queremos utilizar de KAMP, el nivelado adaptativo/Linea de purga normal o Voron adaptativa o el aparcado del cabezal al finalizar la impresion (este no se incluye en la guía dado que el proceso de la K1 ya lo hace), tenemos que habilitar unas líneas u otras del fichero `KAMP_Settings.cfg` que encontramos en el directorio raiz de ficheros de configuración:

<figure><img src="/files/1OCo6htW8qFkgblBQyr7" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
En el caso que utilicemos PrusaSlicer o algún fork similar:

Si no definimos las aceleraciones en nuetra perfil de impresión deberemos añadir la siguiente línea debajo de `_LINE_PURGE` para poder tener las aceleraciones de nuestro printer.cfg

`SET_VELOCITY_LIMIT ACCEL={printer.configfile.settings.printer.max_accel}`

Por otro lado tambien es aconsejable, si vemos errores en la consola durante una impresion relacionados con las siguientes macros, añadir estas macros:

```
[gcode_macro DEFINE_OBJECT]
gcode:
  EXCLUDE_OBJECT_DEFINE {rawparams}

[gcode_macro START_CURRENT_OBJECT]
gcode:
  EXCLUDE_OBJECT_START NAME={params.NAME}

[gcode_macro END_CURRENT_OBJECT]
gcode:
  EXCLUDE_OBJECT_END {% if params.NAME %}NAME={params.NAME}{% endif %}

[gcode_macro LIST_OBJECTS]
gcode:
  EXCLUDE_OBJECT_DEFINE

[gcode_macro LIST_EXCLUDED_OBJECTS]
gcode:
  EXCLUDE_OBJECT

[gcode_macro REMOVE_ALL_EXCLUDED]
gcode:
  EXCLUDE_OBJECT RESET=1
```

{% endhint %}

#### **Uso KAMP en K1**

Dispondremos de dos controles de KAMP en nuestra interfaz web:

* botón KAMP para habilitar o deshabilitar este componente... en el caso de estar habilitado se creará u usará una malla llamada kamp. En el caso de estar deshabilitado usará la malla default.
* botón BED\_LEVELING para habilitar o deshabilitar el mallado clásico cuando el botón KAMP anterior está deshabilitado, no hace nada en cuando KAMP está activo.

#### **Ajuste fino de KAMP para nuestra K1**

En los siguientes apartados encontrareis información de como customizar KAMP a nuestro gusto, estos cambios los realizaremos dentro del fichero KAMP\_Settings.cfg ajustando las variables que mencionamos:

{% tabs %}
{% tab title="Mallado Adaptativo" %}
Para el mallado adaptativo contamos con algunas variables que pueden ser muy útiles:

* `mesh_margin` : indica el margen en mm entre el área de impresión y la que KAMP realizará el mallado de cama. Por defecto es 0 pero en ocasiones puede ser interesante un valor de 10 (u otro) que permita crear un mallado más óptimo
* `fuzz_amount` : en el caso de sensores de nivelación integrados en el propio nozzle, como la K1 permite que el punto de sondeo sea un poco random en base a este valor para por ejemplo si imprimimos de forma repetida el mismo modelo no acabemos dañando la superficie de impresión. Por defecto es 0 pero para la K1 podemos usar un valor entre 1 y 3.
  {% endtab %}

{% tab title="Linea de Purga Adaptativa" %}
Para la linea de purga daptativa también contamos con algunas opciones de personalización interesantes:

* `purge_height` : indica la altura de capa que usará para realizar la linea de purga, por defecto 0.8, no suele ser necesario tocarlo si no instalamos un nozzle de más de 0.8.
* `tip_distance` : es la distancia entre la posición de entrada del filamento en el hotend y la salida de este por el nozzle, normalmente en la macro de final de impresión `PRINT_END` se suele hacer una retracción y el valor de este `tip_distance` debería de coincidir con este.

<figure><img src="/files/GcbE8t5kDBpWbND59Mvb" alt="" width="188"><figcaption></figcaption></figure>

* `purge_margin` : no tiene mucho misterio, el margen en mm entre la pieza impresa y la linea de purga
* `page_amount` : la distancia en mm de filamento que vamos a realizar la purga, por defecto 30, es aconsejable ir jugando con este valor para encontrar el que mas nos guste
* `flow_rate` : el valor de flujo a utilizar durante el purgado, es aconsejable ajustarlo teniendo en cuenta las caracteristicas de nuestro hotend... en el caso de la K1 y dependiendo del material y boquilla un valor entre 12 y 20 suele ir bien.
  {% endtab %}
  {% endtabs %}

### **Mejoras en ventilación**

Nuestra K1 cuenta con tres ventiladores gestionables que utiliza por defecto en diferentes acciones durante la impresión.

* **Ajustando la ventilación capa durante los procesos de impresión**, por defecto al finalizar una impresión vemos como el ventilador de capa se ponen al 100% haciendo que sea verdaderamente molesto en ocasiones.\
  Aprovechando el acceso root vamos a ajustar esto a nuestro gusto. Abriremos el fichero de configuración de macros `gcode_macro.cfg` y buscaremos la sección `[gcode_macro WAIT_TEMP_START]` y la ajustaremos tal como vemos a continuación, que es bajando el % de ventilación del 100% al 80% para el ventilador de capa del hotend y 85% para el auxiliar:<br>

  ```django
  [gcode_macro WAIT_TEMP_START]
  gcode:
    UPDATE_DELAYED_GCODE ID=wait_temp DURATION=1
    M106 P0 S200
    M106 P2 S216
  ```

  También ajustaremos la siguiente sección `[gcode_macro WAIT_TEMP_END]` y la ajustaremos de la siguiente forma:<br>

  ```django
  [gcode_macro WAIT_TEMP_END]
  gcode:
    UPDATE_DELAYED_GCODE ID=wait_temp DURATION=0
    M106 P0 S0
    M106 P2 S0
  ```

  Una vez aplicados los cambios hacemos un `SAVE & RESTART` para guardar y aplicar los cambios.
* **Mejoras en ventilación de cerramiento (chamber fan)**, K1 cuenta con un sistema de ventilación de cerramiento que puede activarse dependiendo de la temperatura lo cual esta genial para imprimir filamentos como PLA/TPU en los que no interesa que tengamos mucha temperatura interna y se produzcan atascos. O por contra en filamentos más técnicos como ABS/ASA/etc que si que nos interesa altas temperaturas estas no sean tan altas como para afectar a la impresora.\
  Para poder tener disponible este control nos iremos a nuestro `printer.cfg` y añadiremos estas lineas... <mark style="color:red;">**RECUERDA!!! siempre por encima de la sección SAVE\_CONFIG!!!**</mark>:<br>

  ```django
  [duplicate_pin_override]
  pins: PC0, PC5

  [temperature_fan chamber_fan]
  pin: PC0
  cycle_time: 0.0100
  hardware_pwm: false
  max_power: 1
  shutdown_speed: 0
  sensor_type: EPCOS 100K B57560G104F
  sensor_pin: PC5
  min_temp: 0
  max_temp: 70
  control: watermark
  max_delta: 2
  target_temp: 35.0
  max_speed: 1.0
  min_speed: 0.0
  ```

  Y guardamos los cambios con `SAVE & CLOSE`, ahora vamos a editar nuestro `gcode_macro.cfg` y añadiremos una macro gcode que nos permita controlar este ventilador desde los laminadores mediante el gcode `M141`:<br>

  ```django
  [gcode_macro M141]
  description: Set Chamber Temperature with slicers
  gcode:
    SET_TEMPERATURE_FAN_TARGET TEMPERATURE_FAN=chamber_fan TARGET={params.S|default(35)}
  ```

  Ahora sí haremos un `SAVE & RESTART` para guardar y aplicar los cambios.\
  Si todo ha ido correctamente desde nuestra UI podremos tener acceso a la gestión de temperatura para ajustar la activación del ventilador.\
  ![](/files/EnZQCYCxsPCBH0pdpZz0)\
  También tendremos el gcode `M141 Sxx` que usan los laminadores para controlar las temperaturas del cerramiento, en nuestro caso con OrcaSlicer solemos añadir el comando `M141 Sxx` en el gcode de filamento:\
  ![](/files/aCjq5xg4i3sAd3LLUJvS)
* **Control de ventilación durante el proceso de limpieza del nozzle**, otro proceso que root nos va a permitir ajustar es durante el paso de limpieza del nozzle donde los ventiladores funcionan al 100% siendo también bastante molestos y normalmente innecesario tanta ventilación.\
  En este caso necesitaremos nuestro [Helper Script K1](#instalacion-de-helper-script-para-k1) utilizando las opciones `1 (Install)` y `11 (Nozzle Cleaning Fan Control Files)`:\
  ![](/files/kcSEjml7VI9kh5WIxiWF)\
  A continuación iremos a nuestro printer.cfg y añadiremos las siguientes lineas... <mark style="color:red;">**RECUERDA!!! siempre por encima de la sección SAVE\_CONFIG!!!**</mark>:<br>

  ```django
  [prtouch_v2_fan]
  max_speed: 0.5
  ```

  Donde ajustaremos el valor de `max_speed` a nuestro gusto, siendo 1 una velocidad del 100% y, por ejemplo, 0.5 un 50%. Pulsaremos sobre `SAVE & RESTART` para guardara y aplicar nuestros cambios.
* **Ajustes extras en el laminador**, en el caso que usemos OrcaSlicer o similares es aconsejable fijarse en la configuración de este si usamos perfiles creados por terceros.\
  Para que el **ventilador auxiliar de capa**, el que se encuentra en uno de los laterales de la máquina, funcione correctamente hemos de asegurarnos habilitar la función correspondiente en la configuración del perfil de impresora:\
  ![](/files/VN4imsej9gQXkWOrHuVg)\
  Podremos posteriormente ajustar el % dentro de las opciones de nueestro filamento en refrigeración/cooling:\
  ![](/files/26TnM4RUwIKOIJCJltuH)

{% hint style="info" %}
**Velocidades ventilador auxiliar de capa:**

Para nuestro caso, K1 Max, el ventilador auxiliar de capa apenas genera flujo de aire hasta el 85% donde el nivel de ruido vs flujo de aire creemos que es bueno. A partir del 90% el flujo de aire es excelente pero por otro lado el ruído que genera puede ser considerablemente alto.\
Haz tus pruebas para obtener tu valor óptimo para tu máquina ya sea utilizando los controles desde tu interfaz web (Fan2), desde la propia pantalla de la impresora (Side Fan) o desde la consola también desde la interfaz web con el comando `M106 P2 Sxxx` o `SET_PIN PIN=fan2 VALUE=xxx` donde xxx será un valor de 0 a 255 que se traducirá en el % de ventilación.
{% endhint %}

### **Mejoras en** [**Input Shaping**](https://klipper.3dwork.io/klipper/empezamos/input-shaper)

Creality parece que ha limitado el funcionamiento de [Input Shaping](https://klipper.3dwork.io/klipper/empezamos/input-shaper) solamente para el eje Y (y este es copiado para usarse como valores del X, lo cual no siempre es aconsejable) cuando por su cinemática y el sensor que lleva puede realizarlo para los ejes X e Y.\
Para solventar esto iremos a nuestro `gcode_macro.cfg` y buscaremos por la sección `[gcode_macro AUTOTUNE_SHAPERS]` donde deshabilitaremos (poniendo # al inicio de la línea) el valor `variable_autotune_shapers`:

```django
[gcode_macro AUTOTUNE_SHAPERS]
#variable_autotune_shapers: 'ei'
gcode:
```

A continuación, y también en nuestro gcode\_macro.cfg, buscaremos la sección `[gcode_macro INPUTSHAPER]` y eliminaremos `AXIS=Y` de la línea `SHAPER_CALIBRATE`, en el primer ejemplo tenemos la macro original y en el segundo la modificada:<br>

```django
[gcode_macro INPUTSHAPER]
gcode:
  SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0
  SET_FILAMENT_SENSOR SENSOR=filament_sensor_2 ENABLE=0
  G90
  G28
  {% set POSITION_X = printer.configfile.settings['stepper_x'].position_max/2 %}
  {% set POSITION_Y = printer.configfile.settings['stepper_y'].position_max/2 %}
  G1 X{POSITION_X} Y{POSITION_Y} F6000
  G1 Z10 F600
  SHAPER_CALIBRATE AXIS=y
  CXSAVE_CONFIG
  SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1
  SET_FILAMENT_SENSOR SENSOR=filament_sensor_2 ENABLE=1
```

```django
[gcode_macro INPUTSHAPER]
gcode:
  SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=0
  SET_FILAMENT_SENSOR SENSOR=filament_sensor_2 ENABLE=0
  G90
  G28
  {% set POSITION_X = printer.configfile.settings['stepper_x'].position_max/2 %}
  {% set POSITION_Y = printer.configfile.settings['stepper_y'].position_max/2 %}
  G1 X{POSITION_X} Y{POSITION_Y} F6000
  G1 Z10 F600
  SHAPER_CALIBRATE
  CXSAVE_CONFIG
  SET_FILAMENT_SENSOR SENSOR=filament_sensor ENABLE=1
  SET_FILAMENT_SENSOR SENSOR=filament_sensor_2 ENABLE=1
```

\
En el siguiente ejemplo podemos ver las diferencias entre hacer un Input Shaping como lleva por defecto la máquina y una vez ajustados los valores anteriores:\
![](/files/VGuPeXjKrsRqiGHsq4Hp)

{% hint style="success" %}
Input Shaping desde nuestra interfaz para poder lanzarlo manualmente!!!

Es una función muy interesante para poder lanzar nuestro proceso de calibración de vibraciones de forma manual.

Para ello añadiremos la siguiente macro a nuestro gcode\_macro.cfg :

```django
[gcode_macro MANUAL_INPUT_SHAPER]
description: Measure X and Y axis resonances
gcode:
  G90
  {% if printer.toolhead.homed_axes != "xyz" %}
    G28
  {% endif %}
  SHAPER_CALIBRATE
  {% set y_park = printer.toolhead.axis_maximum.y/2 %}
  {% set x_park = printer.toolhead.axis_maximum.x|float - 10.0 %}
  G1 X{x_park} Y{y_park} F20000
  M84
```

{% endhint %}

#### Input Shaping manual y generando gráficas

En nuestro caso preferimos revisar las gráficas generadas para ver el estado de la máquina y realizar cualquier ajuste en esta, tal como puedes ver en nuestra [guía de Input Shaper](https://klipper.3dwork.io/klipper/empezamos/input-shaper), para mejorar la efectividad de las correcciones Input Shaper.

Para ello en nuestra UI web lanzaremos las siguientes macros para generar el fichero de resonancias para cada eje:

`TEST_RESONANCES AXIS=X`

`TEST_RESONANCES AXIS=X`

<figure><img src="/files/xbtkUGXdRubDONVSgq1d" alt=""><figcaption></figcaption></figure>

Por descracia y dadas las limitaciones en el sistema de nuestras K1 vamos a necesitar otro Klipper para poder generar nuestras gráficas o [si disponemos de una máquina Windows podemos usar esta herramienta](https://github.com/theycallmek/Klipper-Input-Shaping-Assistant).

Si optamos por generarlo desde otro Klipper subiremos los csv al directorio tmp, nos conectaremos por SSH y lanzaremos los siguientes comandos:

`~/klipper/scripts/calibrate_shaper.py /tmp/resonances_x_*.csv -o /tmp/shaper_calibrate_x.png`

`~/klipper/scripts/calibrate_shaper.py /tmp/resonances_y_*.csv -o /tmp/shaper_calibrate_y.png`

Una vez finalice el proceso tendremos nuestras gráficas estarán disponibles y podemos descargarlas para revisarlas:

<figure><img src="/files/43c4ZZXUngG5UwW8THHQ" alt=""><figcaption><p>Gráficas eje X, que han de mejorarse</p></figcaption></figure>

<figure><img src="/files/d1t2lfFWYCwsuyG991aY" alt=""><figcaption><p>Gráficas eje Y, que son correctas</p></figcaption></figure>

La cinemática de la K1 es bastante mejorable, la falta de consistencia de la construcción del chasis y el sistema de cinemática hace que sea susceptible de que a poco que algo se desajuste afectar significativamente a las vibraciones.

Una de las cosas a revisar, si como en nuestro caso tenemos un resultado poco óptimo como el mostrado en el ejemplo anterior del eje X y que va a mermar significativamente el rendimiento si queremos evitar vibraciones y que Input Shaper sea efectivo, es la tensión de las correas. Tenéis un sistema que podéis imprimi vosotros mismos y que puede ayudaros a ajustar parcialmente esto.

<figure><img src="/files/Jx2BkvLBIZPxViKmq8w6" alt=""><figcaption></figcaption></figure>

Consta de dos partes:

* el primero es para alinear perpendicularmente el gantry de X y evitar que pequeñas desviaciones introduzcan vibraciones y errores de geometría en nuestras piezas

{% embed url="<https://www.printables.com/model/523718-creality-k1-and-k1-max-xy-axes-alignment-tool>" %}

* la segunda es para verificar las tensiones en ambas correas que también es clave para un correcto rendimiento en máquinas Core XY

{% embed url="<https://www.printables.com/model/523382-creality-k1-belt-tension-meter>" %}

**En el siguiente video tenéis como poder utilizar lo anterior para mejorar nuestra máquina!!!**

{% embed url="<https://youtu.be/vLmln_4ntLo?si=0HzZB0F1xnqQcMga>" %}

### **Macro cambio de filamentos M600**

Normalmente los **laminadores suelen usar el gcode M600 para indicar a la máquina cuando se va a realizar un cambio de filamentos**. Por desgracia la K1 no lleva una macro de este tipo por defecto y dado que si no tenemos root es complicado poder añadir estas a nuestra K1 podemos aprovechar el realizar root para mejorar esta y otras macros.

Vamos a utilizar una macro muy sencilla para hacer el M600 que viene en el propio core de Klipper como ejemplo pero siempre podéis utilizar otras más complejas y que mejoran el proceso como la que usamos en nuestro [**bundle para Klipper**](https://klipper.3dwork.io/klipper/mejoras/3dwork-klipper-bundle).

Revisaremos el fichero de [**ejemplos de macro de Klipper desde aqui**](https://github.com/Klipper3d/klipper/blob/master/config/sample-macros.cfg). Y cogeremos la sección `Filament Change` :

{% code title="<https://github.com/Klipper3d/klipper/blob/master/config/sample-macros.cfg>" %}

```django
######################################################################
# Filament Change
######################################################################

# M600: Filament Change. This macro will pause the printer, move the
# tool to the change position, and retract the filament 50mm. Adjust
# the retraction settings for your own extruder. After filament has
# been changed, the print can be resumed from its previous position
# with the "RESUME" gcode.

[pause_resume]

[gcode_macro M600]
gcode:
    {% set X = params.X|default(50)|float %}
    {% set Y = params.Y|default(0)|float %}
    {% set Z = params.Z|default(10)|float %}
    SAVE_GCODE_STATE NAME=M600_state
    PAUSE
    G91
    G1 E-.8 F2700
    G1 Z{Z}
    G90
    G1 X{X} Y{Y} F3000
    G91
    G1 E-50 F1000
    RESTORE_GCODE_STATE NAME=M600_state
```

{% endcode %}

Abriremos el fichero de configuración gcode\_macro.cfg tal como hemos hecho en ocasiones anteriores desde nuestra interfaz web y copiaremos la macro M600 anterior al final de el y guardaremos los cambios `SAVE AND RESTART`. Al reiniciar deberemos tener disponible en el panel de macros nuestra M600.

<figure><img src="/files/REsLQuw3U4PqXljnYPxY" alt=""><figcaption></figcaption></figure>

A continuación iremos a nuestro laminador, en nuestro caso OrcaSlicer, y **dentro del perfil de nuestra impresora en la pestaña de `Machine G-code`** y apartado **`Change filament G-code`** donde pondremos nuestra macro M600, recordar guardar los cambios al perfil :) :

<figure><img src="/files/vvzZ0KwLTogGTOmfRK80" alt=""><figcaption></figcaption></figure>

### **Guardado automático del Z Offset**

Un problema recurrente es que si ajustamos nuestro Z Offset durante una impresión (babystepping) para realizar ajustes tenemos que recordar guardar estos cambios en nuestra configuración desde el interfaz web para poder conservarlos.

Con los siguientes cambios vamos a hacer que el Z Offset se guarde automáticamente y se cargue automáticamente al iniciar el sistema.

* En nuestro `printer.cfg` añadiremos estas lineas:

```
[save_variables]
filename: /usr/data/printer_data/config/variables.cfg

[respond]
```

* Ahora en `gcode_macro.cfg` añadiremos lo siguiente:

```
[gcode_macro SET_GCODE_OFFSET]
description: Saving Z-Offset
rename_existing: _SET_GCODE_OFFSET
gcode:
  {% if printer.save_variables.variables.zoffset %}
  {% set zoffset = printer.save_variables.variables.zoffset %}
  {% else %}
  {% set zoffset = {'z': None} %}
  {% endif %}
  {% set ns = namespace(zoffset={'z': zoffset.z}) %}
  _SET_GCODE_OFFSET {% for p in params %}{'%s=%s '% (p, params[p])}{% endfor %}
  {%if 'Z' in params %}{% set null = ns.zoffset.update({'z': params.Z}) %}{% endif %}
  {%if 'Z_ADJUST' in params %}
  {%if ns.zoffset.z == None %}{% set null = ns.zoffset.update({'z': 0}) %}{% endif %}
  {% set null = ns.zoffset.update({'z': (ns.zoffset.z | float) + (params.Z_ADJUST | float)}) %}
  {% endif %}
  SAVE_VARIABLE VARIABLE=zoffset VALUE="{ns.zoffset}"


[delayed_gcode LOAD_GCODE_OFFSETS]
initial_duration: 2
gcode:
  {% if printer.save_variables.variables.zoffset %}
  {% set zoffset = printer.save_variables.variables.zoffset %}
  _SET_GCODE_OFFSET {% for axis, offset in zoffset.items() if zoffset[axis] %}{ "%s=%s " % (axis, offset) }{% endfor %}
  { action_respond_info("Loaded Z-Offset from variables.cfg file: %s" % (zoffset)) }
  {% endif %}
```

Básicamente lo que hacemos es crear un fichero dentro del sistema para guardar nuestras propias variables `/usr/data/printer_data/config/variables.cfg`.

Se crea una nueva macro que sobreescribe a la de sistema llamada `SET_GCODE_OFFSET` que captura el valor usado durante ajuste babystepping lo aplica al sistema y lo guarda en nuestras variables comentado anteriormente.

Por último tenemos otra macro `LOAD_GCODE_OFFSETS` que se encarga de cargar de nuestro fichero de variables el valor Z Offset y aplicarlo al sistema.

#### **Impresión directa desde laminadores no Creality**

Una vez **finalizados los pasos anteriores vamos a tener acceso a una funcionalidad que nos va a ahorrar mucho tiempo**.\
Si bien el uso del laminador de Creality, un Cura personalizado, no esta mal en ocasiones se puede quedar corto en opciones o preferencias de uso.\
Por otro lado, y por defecto sin hacer root, el sistema va a estar capado para enviar nuestras impresiones únicamente desde el laminador de Creality, el Cloud de Creality o mediante un USB a la maquina.\
Ahora que tenemos más acceso al sistema **podremos imprimir desde nuestro laminador favorito**, en el siguiente ejemplo basado en OrcaSlicer que es nuestro laminador favorito tan solo tenemos que ir a la configuración de nuestra impresora a nivel de red, seleccionar en `Host Type - Octo/Klipper` y en `Hostname, IP or URL` poner la `IP:puerto` de nuestra K1... en nuestro caso usaremos como puerto el 4409 al tener instalado Mainsail:

<figure><img src="/files/UXBy5aMayG0vFkymStN9" alt=""><figcaption></figcaption></figure>

### Configurar cámara K1 en Mainsail/Fluidd

Teniendo en cuenta que el interfaz web de la K1 es bastante limitado en opciones una de las primeras cosas que aconsejamos, con root, es la instalación de otro interfaz con más opciones y funciones.

Una vez tenemos nuestro Mainsail, o Fluidd depende del que más te guste, podemos añadir a este la visualización de nuestra cámara. También si queremos hacer algo que nos sirva en ambos caso podemos hacerlo en Moonraker:

{% tabs %}
{% tab title="Mainsail" %}
Personalmente nos gusta más Mainsail, para añadir nuestra cámara:

* Iremos a `Interface Settings`, icono engranajes en la esquina superior derecha, y dentro de las opciones a WEBCAMS

<figure><img src="/files/Z5Mt3AVlrYB202u5CwTJ" alt="" width="375"><figcaption></figcaption></figure>

* Añadiremos una nueva cámara con las siguientes opciones:
  * Sustituiremos xxx.xxx.xxx.xxx por tu IP:
    * **URL Stream:** `http://xxx.xxx.xxx.xxx:4409/webcam/?action=stream`
    * **URL Snapshot:** `http://xxx.xxx.xxx.xxx:4409/webcam/?action=snapshot`
    * **Service:** `MJPEG-Streamer` o `Adaptative MJPEG-Streamer (experimental)`

![](/files/GcYDIWDvJZBUfAPc5SwJ)
{% endtab %}

{% tab title="Fluidd" %}
En el caso que usemos Fluidd añadir la cámara es un proceso muy sencillo, simplemente tenemos que habilitarla.

Para habilitar la cámara iremos a Settings/Cameras y la habilitaremos. En el caso que no nos funcione eliminaremos la creada y crearemos una nueva con la siguiente configuración:

<figure><img src="/files/23MHFVHFwa21NeMICxd4" alt="" width="375"><figcaption></figcaption></figure>
{% endtab %}

{% tab title="Moonraker" %}
Editaremos nuestro moonraker.cong y añadiremos lo siguiente substituyendo las xxx.xxx.xxx.xxx por nuestra IP:

```django
[webcam Camera]
location: printer
enabled: True
service: mjpegstreamer
target_fps: 15
target_fps_idle: 5
stream_url: http://xxx.xxx.xxx.xxx:8080/?action=stream
snapshot_url: http://xxx.xxx.xxx.xxx:8080/?action=snapshot
flip_horizontal: False
flip_vertical: False
rotation: 0
aspect_ratio: 4:3
```

Guardaremos y reiniciamos Klipper mediante `SAVE & RESTART` y automáticamente deberiamos tener la cámara habilitada.
{% endtab %}
{% endtabs %}

### Personalización del logo/animación de la pantalla al inicio

Aunque no nos va a mejorar ninguna función relacionada con la calidad o uso de nuestra impresora queda muy chulo personalizar esta.

<figure><img src="/files/ZvDfz9SrvGHvZUYzrA7p" alt=""><figcaption></figcaption></figure>

El proceso es relativamente sencillo:

* Crearemos nuestra animación utilizando cualquier herramienta que conozcamos... en nuestro caso os aconsejamos Canva porque es gratuita, potente y muy sencilla de utilizar. Creáis un proyecto de 480x800 pixeles... la exportaremos como Gif o Video

<figure><img src="/files/HRuVUr56OJ0t3fUCy0YV" alt=""><figcaption></figcaption></figure>

* Una vez tengamos la animación, os aconsejamos llamarla pic.\<el formato que hayáis elegido> podéis ir a un conversor de video a jpg y vamos al siguiente [link](https://imagen.online-convert.com/es/convertir/mp4-a-jpg) donde podremos convertir, no es necesario tocar ningun ajuste tan solo que el nombre del fichero a convertir se llame pic para que las imágenes generadas sean pic\_000.jpg (000 será numérico en orden de cada uno de los frames de nuestra animación). Una vez finalizado el proceso descargaremos las imágenes a nuestro ordenador
* Ahora desde SSH y sobre nuestra K1 lanzaremos Helper Script con `cd && sh ./installer.sh`
* Desde el menú seleccionaremos 3 \[Customize] y 1 \[Install Custom boot Display], tenemos opciones para poder restaurarlo después :)
* Una vez aplicado el cambio desde Helper Script salimos de este y aplicamos un reboot para reiniciar nuestra impresora... si todo ha ido bien veremos la animación nueva instalada por Helper Script.
* Ahora procederemos a sustituir la animación por la nuestra, para mayor comodidad os aconsejamos[ instalar SFTP](#sftp), borrando los ficheros jpg en /etc/boot-display/part0/ por los creados por nosotros

<figure><img src="/files/R0wpde13urXpzyQIWhQF" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Si no queréis habilitar SFTP podéis hacerlo de forma manual:

* en nuestra interfaz web (Mainsail/Fluidd) crearemos una carpeta llamada part0 y dentro de esta subiremos todas las imágenes de nuestra animación creada anteriormente
* borraremos todas las imágenes de la animación por defecto con `rm /etc/boot-display/part0/*.jpg`
* una vez copiado y desde SSH lanzaremos el siguiente comando que copiará todas las imágenes `cp /usr/data/printer_data/config/part0/pic_*`*`.jpg`*` `` ``/etc/boot-display/part0/ `
  {% endhint %}

Y ya está!!! solamente tendremos que reiniciar nuestra máquina y ver nuestra obra de arte!!!

### Personalización UI pantalla

El interfaz de nuestra K1 es bastante intuitivo y funcional pero carece de muchas opciones avanzadas de gestión como las que podamos encontrar en KlipperScreen

Gracias al compañero [ballaswag](https://github.com/ballaswag) que ha creado una nueva UI, llamada Guppy,con funciones avanzadas podemos mejorar significativamente el control desde esta en nuestra K1.

<figure><img src="/files/GIL3gUDmmZtn6LURU24Z" alt=""><figcaption></figcaption></figure>

Como podéis ver en las capturas anteriores si bien el interfaz no esta tan pulido como el de Creality se cuentan con un montón de opciones avanzadas que seguro son del agrado de cualquier buen maker :).

A destacar...

* lanzar Input Shaper para XY además de comprobar la tensión de correas y lo más cool poder ver las gráficas del test para ayudarnos a ajustar nuestra K1 de una forma sencilla
* Acceso al nivelado de cama donde podremos ver el mapa de nuestra cama
* Controles avanzados durante la impresión para ajustar flujo, factor de velocidad, etc...
* Integración con Spoolman

La instalación es muy muy sencilla:

{% tabs %}
{% tab title="Helper Script" %}
Como siempre nuestro mejor aliado para la K1 es nuestro Helper Script desde el cual tenemos la posibilidad de instalar, y desinstalar, facilmente este nuevo interfaz Guppy.

* Lanzaremos el Helper Script desde SSH `cd && sh ./installer.sh`
* Iremos a 3 \[Customize] > 5 \[Install Guppy Screen]
* Nos solicitará confirmación y que tipo de interfaz queremos utilizar (material,zbolt) y si queremos eliminar los servicios Creality Cloud
* Es todo!!! ya tendremos el nuevo interfaz listo!!!

<figure><img src="/files/USTSMU2SPjb8MzhNCFOr" alt=""><figcaption></figcaption></figure>

En el caso que queramos desinstalarlo y volver al interfaz de Creality tan solo iremos a 3 \[Customize] > 6 \[Remove Guppy Screen].
{% endtab %}

{% tab title="SSH" %}
También podemos instalar el interfaz Guppy desde SSH:

* Desde nuestro cliente favorito de SSH lanzaremos:
  * Si queremos el interfaz Material Design:\
    `sh -c "$(wget --no-check-certificate -qO - https://raw.githubusercontent.com/ballaswag/guppyscreen/main/installer.sh)"`
  * Si preferimos el Z-bolt:\
    `sh -c "$(wget --no-check-certificate -qO - https://raw.githubusercontent.com/ballaswag/guppyscreen/main/installer.sh)" -s zbolt`

En el caso que queramos volver al de Creality lanzaremos el siguiente comando `/usr/data/guppyscreen/reinstall-creality.sh`
{% endtab %}
{% endtabs %}

### Habilitar el Buzzer/Altavoz integrado

Otra mejora que podemos realizar, y que puede ser muy útil, es habilitar el buzzer/altavoz que cuenta la electrónica de nuestra K1.

El proceso es muy sencillo gracias al Helper Script desde el cual seleccionaremos la opción 1 \[Install] > 9 \[Install Buzzer Support]:

<figure><img src="/files/3CINtTDc4byT4suNjqe3" alt=""><figcaption></figcaption></figure>

Al finalizar el proceso ya dispondremos de la macro de sistema BEEP que podremos utilizar en nuestras macros como pausa, cambios de filamentos o finalización de impresión para tener una notificación sonora. Os ponemos un ejemplo del uso en la macro de final de impresión END\_PRINT:

```django
[gcode_macro END_PRINT]
gcode:
  Qmode_exit
  EXCLUDE_OBJECT_RESET
  PRINT_PREPARE_CLEAR
  M220 S100
  SET_VELOCITY_LIMIT ACCEL=5000 ACCEL_TO_DECEL=2500
  TURN_OFF_HEATERS
  M107 P1
  M107 P2
  END_PRINT_POINT
  BEEP
  WAIT_TEMP_START
  M84
```

La macro que se instala no es visible desde el interfaz pero disponemos de un mp3, dentro de nuestro host en /usr/data/beep.mp3, donde podemos personalizar el tono del sonido, aquí disponemos de más información:

<figure><img src="/files/LorVnO2aiH3f7lC3xxhG" alt=""><figcaption></figcaption></figure>

{% @github-files/github-code-block %}

{% hint style="danger" %}
**Este proceso hemos de volver a realizarlo cada vez que restauremos nuestra impresora a los valores de fábrica!!!**
{% endhint %}

## Paths de Sistema

Os incluimos la ubicación de paths en el sistema de nuestra K1:

<table><thead><tr><th width="295">Función</th><th>Path</th></tr></thead><tbody><tr><td><strong>Videos time-lapse (Creality)</strong></td><td>/usr/data/creality/userdata/delay_image/video/</td></tr><tr><td><strong>Videos time-lapse (Moonraker)</strong></td><td>/usr/data/printer_data/timelapse/</td></tr><tr><td><strong>Gcodes</strong></td><td>/usr/data/printer_data/gcodes/</td></tr><tr><td><strong>Configuración Klipper</strong></td><td>/usr/data/printer_data/config/</td></tr><tr><td><strong>Animación pantalla al iniciar</strong></td><td>/etc/boot-display/</td></tr></tbody></table>

## Mods

Os dejamos algunos mods interesantes para vuestras máquinas:

<table><thead><tr><th>Mod</th><th data-type="checkbox">K1</th><th data-type="checkbox">K1 Max</th><th>Link</th></tr></thead><tbody><tr><td></td><td>false</td><td>false</td><td></td></tr><tr><td></td><td>false</td><td>false</td><td></td></tr><tr><td></td><td>false</td><td>false</td><td></td></tr></tbody></table>

Podéis encontrar más en nuestra [**colección de Printables para Creality K1 & K1 Max**](https://www.printables.com/@JJR3D/collections/818248)!!!

### Cinemática

Ya sea por resolución de problemas o simplemente para realizar modificaciones en la cinemática de nuestra máquina os facilitamos paso a paso como desmontar esta, gracias al equipo [**D3vil Design**](https://github.com/D3vil-Design/K1-Hardware-Mods) donde podéis encontrar mucha información y mods de nuestra K1:

* Desmontaremos los anclajes del portón frontal:<br>

  <figure><img src="/files/nQZIsm8OCNb60jkmROQP" alt=""><figcaption><p>Anclaje portón inferior</p></figcaption></figure>

  <figure><img src="/files/f50IYBIHzdMdFtoRo41Z" alt=""><figcaption><p>Anclaje portón superior</p></figcaption></figure>
* Cortaremos la goma foam del perfil derecho donde apoya el portón al estar cerrado, lo haremos en la parte superior donde vemos la unión entre la parte superior de la carcasa con la central, para tener acceso a los tornillos de anclaje:<br>

  <figure><img src="/files/vIdzRhpkgqOX52V8YNuo" alt=""><figcaption></figcaption></figure>
* Haremos lo mismo en la parte izquierda retirando en este caso la pieza plástica con cuidado:<br>

  <figure><img src="/files/28F2VdGfB35ejTcZMDSL" alt=""><figcaption></figcaption></figure>
* Quitaremos los tornillos inferiores en ambos lados:

  <figure><img src="/files/WK1ItOFpjoCAya2x6v7d" alt=""><figcaption></figcaption></figure>

  <figure><img src="/files/FsLb97e8OjNCDGaRxP5H" alt=""><figcaption></figcaption></figure>
* Retirando los paneles laterales antes, quitaremos los tornillos de los laterales indicados en las siguientes capturas:<br>

  <figure><img src="/files/oVwtLY9FcL18UGof44ft" alt=""><figcaption><p>Lateral derecho frontal</p></figcaption></figure>

  <figure><img src="/files/raVTp5Z2OGyFUGwSCtXy" alt=""><figcaption><p>Lateral derecho trasero</p></figcaption></figure>

  <figure><img src="/files/8sgTnXZ1tXDz0MjjRymp" alt=""><figcaption><p>Lateral izquierdo frontal</p></figcaption></figure>

  <figure><img src="/files/FaWrflk1d3iEuResoQN5" alt=""><figcaption><p>Lateral izquierdo trasero</p></figcaption></figure>
* Haremos lo mismo con la cubierta posterior:<br>

  <figure><img src="/files/11G8AbpzfCwz20AxPL0G" alt=""><figcaption></figcaption></figure>
* Retiraremos los cables de conexión a los motores XY en ambos lados:<br>

  <figure><img src="/files/zFic2Zst6dlB5l33pjkA" alt=""><figcaption></figcaption></figure>

  <figure><img src="/files/aySQkFIbaAaTE1dXC2gd" alt=""><figcaption></figcaption></figure>
* Quitaremos los tornillos de anclaje de la cadena y el sensor de filamentos:<br>

  <figure><img src="/files/a1FCoLHUs4ApUvA7NKWX" alt=""><figcaption></figcaption></figure>
* Desmontaremos el toolhead/cabezal de impresión y cortaremos la brida de sujeción del cableado al chasis:<br>

  <figure><img src="/files/mOZoM1fudYxmYP8lkRXW" alt=""><figcaption></figcaption></figure>

  <figure><img src="/files/SFU0rlTpH7MLV4eGsWK0" alt=""><figcaption></figcaption></figure>
* Ya tenemos nuestra cinemática lista para realizar nuestro mod o un mantenimiento!!!<br>

  <figure><img src="/files/e7h2tZTTDdRZYlQ1p7XY" alt=""><figcaption></figcaption></figure>

## Problemas

* Con PLA, y tal como avisan, hay que intentar abrir la maquina para que no se atasque
* Falta de controles durante la impresion en la pantalla para por ejemplo el ajuste de zoffset, feedrate, extrusion
* Sistema de extrusion solamente cuenta con una palanca para el ajuste de la tensión que es para apretar o no apretar el filamento... problemas de agarre probablemente con determinados filamentos
* La ubicación del sensor de filamentos no es cómoda a la hora de tener que realizar un cambio por falta de filamento
* El PTFE del extrusor entra muy forzado y en un ángulo poco óptimo que crea tensiones, es aconsejable retirar la última grapa para que entre con mejor ángulo y evitar trabajo extra del sistema de extrusion
* La cadena del extrusor es un poco larga y, al menos en la K1 Max, llega a tocar con la guía del eje X pudiendo desgastar ambos componentes con el tiempo. Retirando un eslabón o dos probablemente quede mejor
* No es posible imprimir desde otros laminadores que no sean el de Creality, desde el Cloud de Creality o por USB. Para poder hacerlo debemos instalar root en la máquina
* No cuenta con una macro de cambio de filamentos, M600 suele ser el estandard
* Posición del porta rollos de filamento en la parte trasera poco accesible para manipular la maquina en funcionamiento
* Alta carga durante una impresión en la MCU del host y RPI ademas

<figure><img src="/files/WIql01Z6wJtbKTDudK1b" alt=""><figcaption></figcaption></figure>

* El Input Shaper se calcula automaticamente y esta capado a utilizar EI y solamente para el eja Y


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://labs.3dwork.io/reviews-guias/impresoras-3d/fdm/creality/creality-k1-k1-max-k1c-review/creality-k1-and-k1-max-klipper.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
