> For the complete documentation index, see [llms.txt](https://klipper.3dwork.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://klipper.3dwork.io/klipper/mejoras/timelapses.md).

# Timelapses

La extensión **moonraker-timelapse** permite crear vídeos timelapse de tus impresiones directamente desde Klipper. Funciona con cualquier interfaz — tanto **Mainsail** como **Fluidd** — y es compatible con todos los slicers habituales.

## ¿Qué necesitas?

Una cámara conectada a tu host Klipper con una URL de snapshot accesible. Tienes sugerencias y guías de configuración en la sección de [Cámaras](https://github.com/alienboyxp/gitbook_es_klipper_3dwork_io/blob/main/klipper/camaras-instalacion-y-configuracion.md).

## Instalación

{% hint style="success" %}
**MainsailOS y fluiddPi ya incluyen el plugin preinstalado.** Si usas alguna de estas imágenes, puedes saltarte este paso e ir directamente a [Activación](#activación).
{% endhint %}

Si instalaste Klipper manualmente (KIAUH u otro método), instala el plugin via SSH:

```bash
cd ~/
git clone https://github.com/mainsail-crew/moonraker-timelapse.git
cd ~/moonraker-timelapse
make install
```

{% hint style="info" %}
Si configuraste tu OS manualmente y no tienes ffmpeg, instálalo con:

```bash
sudo apt install ffmpeg
```

El script asume que Klipper y Moonraker están en `~/klipper` y `~/moonraker`.
{% endhint %}

## Activación

Tanto si el plugin ya venía incluido como si lo acabas de instalar, hay que activarlo en los archivos de configuración.

Añade la extensión al gestor de actualizaciones de Moonraker en `moonraker.conf`:

{% code title="moonraker.conf" %}

```django
[update_manager timelapse]
type: git_repo
primary_branch: main
path: ~/moonraker-timelapse
origin: https://github.com/mainsail-crew/moonraker-timelapse.git
managed_services: klipper moonraker
```

{% endcode %}

Activa la extensión añadiendo la sección `[timelapse]` en `moonraker.conf`:

{% code title="moonraker.conf" %}

```django
[timelapse]
##   La configuración básica es suficiente para la mayoría de casos.
##   Solo descomenta lo que necesites cambiar.
#output_path: ~/timelapse/
#frame_path: /tmp/timelapse/
#ffmpeg_binary_path: /usr/bin/ffmpeg
```

{% endcode %}

Y añade el include en `printer.cfg`:

{% code title="printer.cfg" %}

```
[include timelapse.cfg]
```

{% endcode %}

## Configuración desde la interfaz

Una vez instalado, tanto Mainsail como Fluidd incluyen un panel dedicado para gestionar el timelapse sin necesidad de editar archivos de configuración.

{% tabs %}
{% tab title="Mainsail" %}
Accede a través del icono de engranaje (⚙) → **Timelapse**.

<figure><img src="/files/ivKvJmUYual6lBxYptCx" alt="Panel de configuración de timelapse en Mainsail"><figcaption><p>Interface Settings → Timelapse en Mainsail</p></figcaption></figure>

| Opción                        | Descripción                                                                     |
| ----------------------------- | ------------------------------------------------------------------------------- |
| **Enabled**                   | Activa/desactiva las macros y el autorenderizado                                |
| **Autorender**                | Renderiza el vídeo automáticamente al terminar la impresión                     |
| **Camera**                    | Selecciona qué cámara usar para las capturas                                    |
| **Mode**                      | `layermacro` (captura en cada capa) o `hyperlapse` (por intervalo de tiempo)    |
| **Stream Delay Compensation** | Retraso antes de capturar para compensar el lag del stream (por defecto 0,05 s) |
| **Park Toolhead**             | Aparca el cabezal antes de cada captura (ver sección siguiente)                 |
| **Variable FPS**              | Ajusta los FPS para alcanzar una duración objetivo del vídeo                    |
| **Preview Image**             | Guarda una miniatura con el mismo nombre que el vídeo                           |
| **Save Frames**               | Guarda los fotogramas en un ZIP para renderizado externo                        |

{% hint style="warning" %}
Si defines `snapshoturl` en `[timelapse]` dentro de `moonraker.conf`, el selector de cámara de la UI queda deshabilitado. Para usar la selección desde la interfaz, **no incluyas `snapshoturl` en el archivo de configuración**.
{% endhint %}
{% endtab %}

{% tab title="Fluidd" %}
Una vez instalado el componente, aparece una entrada **Timelapse** en el menú de navegación principal de Fluidd.

La configuración está disponible en **Settings → Timelapse** y ofrece las mismas opciones que Mainsail: modo de captura, aparcado del cabezal, opciones de renderizado y selección de cámara.

{% hint style="info" %}
Si alguna opción aparece como solo lectura, es porque está definida en `moonraker.conf`. Elimínala del archivo para gestionarla desde la UI.
{% endhint %}
{% endtab %}
{% endtabs %}

### Opciones avanzadas

Para configuración avanzada más allá de la UI, referencia completa en la [documentación oficial](https://github.com/mainsail-crew/moonraker-timelapse/blob/main/docs/configuration.md).

{% hint style="info" %}
Opciones más usadas en `moonraker.conf`:

```ini
[timelapse]
#enabled: True
#mode: layermacro          # layermacro | hyperlapse
#hyperlapse_cycle: 30      # segundos entre capturas en modo hyperlapse
#parkhead: False
#parkpos: back_left        # back_left | back_right | front_left | front_right | center | custom
#park_custom_pos_x: 0.0
#park_custom_pos_y: 0.0
#park_custom_pos_dz: 0.0
#park_travel_speed: 100
#park_retract_distance: 1.0
#park_extrude_distance: 1.0
#autorender: True
#constant_rate_factor: 23  # calidad del vídeo (menor = mejor calidad)
#output_framerate: 30
#variable_fps: False
#targetlength: 10          # duración objetivo del vídeo en segundos
#variable_fps_min: 5
#variable_fps_max: 60
#flip_x: False
#flip_y: False
#duplicatelastframe: 0
#previewimage: True
#saveframes: False
```

{% endhint %}

## Aparcado del cabezal

La opción **Park Toolhead** (`parkhead`) mueve el cabezal fuera del área de impresión antes de cada captura. Esto evita que el nozzle tape la pieza en la foto y elimina las marcas de movimiento entre capas que pueden arruinar el resultado final.

### Posiciones disponibles

| Posición (`parkpos`) | Descripción                                                |
| -------------------- | ---------------------------------------------------------- |
| `back_left`          | Esquina trasera izquierda (por defecto)                    |
| `back_right`         | Esquina trasera derecha                                    |
| `front_left`         | Esquina delantera izquierda                                |
| `front_right`        | Esquina delantera derecha                                  |
| `center`             | Centro de la cama                                          |
| `custom`             | Coordenadas personalizadas (ver parámetros a continuación) |

Para la posición personalizada, configura en `moonraker.conf`:

```ini
[timelapse]
parkhead: True
parkpos: custom
park_custom_pos_x: 10.0    # posición X en mm
park_custom_pos_y: 10.0    # posición Y en mm
park_custom_pos_dz: 2.0    # elevación adicional del eje Z en mm
park_travel_speed: 100     # velocidad de desplazamiento en mm/s
```

### Retracción durante el aparcado

Al aparcar el cabezal se puede retraer filamento para evitar babeo (oozing) durante la captura, y extruirlo de vuelta antes de continuar imprimiendo:

```ini
[timelapse]
park_retract_distance: 1.0   # mm de retracción al aparcar
park_extrude_distance: 1.0   # mm de extrusión al volver (igual o mayor que retract)
```

{% hint style="info" %}
Si ya tienes firmware retraction activo en Klipper, ajusta estos valores a `0.0` para evitar doble retracción.
{% endhint %}

## Gestión de timelapses

Una vez completada la impresión, el vídeo timelapse queda guardado en el host. Puedes gestionarlos directamente desde la interfaz sin necesidad de SSH.

{% tabs %}
{% tab title="Mainsail" %}
En el menú lateral encontrarás una sección **Timelapse** dedicada con todos los vídeos generados. Desde ahí puedes descargar, previsualizar y eliminar los timelapses.

<figure><img src="/files/21AmGYgnlA1yBHMi2TUW" alt="Gestor de archivos timelapse en Mainsail"><figcaption><p>Sección Timelapse en Mainsail — lista de vídeos y espacio disponible en disco</p></figcaption></figure>
{% endtab %}

{% tab title="Fluidd" %}
Fluidd incluye una sección dedicada **Timelapse** en el menú de navegación principal. Desde ella puedes:

* Previsualizar los vídeos generados directamente en el navegador
* Navegar por los fotogramas capturados durante la impresión con el scrubber de frames
* Descargar o eliminar los vídeos sin necesidad de SSH
* Activar el renderizado manual si el autorenderizado no está habilitado
  {% endtab %}
  {% endtabs %}

{% hint style="warning" %}
**Espacio en disco**: Los timelapses se almacenan en `~/timelapse/` y los fotogramas temporales en `/tmp/timelapse/` del host Klipper (normalmente una Raspberry Pi con tarjeta SD de 16-32 GB).

Una impresión larga puede generar cientos de fotogramas y vídeos de varios cientos de MB. Si el disco se llena, **Klipper puede dejar de funcionar correctamente**.

Revisa y limpia periódicamente la carpeta de timelapses desde la interfaz o via SSH:

```bash
ls -lh ~/timelapse/
rm ~/timelapse/nombre_del_timelapse.mp4
```

{% endhint %}

## Configuración del laminador

Hay que añadir la macro `TIMELAPSE_TAKE_FRAME` en el G-code de cambio de capa del laminador. La ubicación exacta varía según el programa:

{% tabs %}
{% tab title="OrcaSlicer" %}
**Printer Settings → Machine G-code → Before layer change G-code**

```
TIMELAPSE_TAKE_FRAME
```

{% endtab %}

{% tab title="PrusaSlicer / SuperSlicer" %}
**Printer Settings → Custom G-code → Before layer change G-code**

```
TIMELAPSE_TAKE_FRAME
```

<figure><img src="/files/wIiIzqX79I7dD73HuzRh" alt="PrusaSlicer timelapse gcode"><figcaption><p>PrusaSlicer — Before layer change G-code</p></figcaption></figure>
{% endtab %}

{% tab title="Cura" %}
**Extensions → Post Processing → Modify G-Code → Add a script → Insert at layer change → Before**

```
TIMELAPSE_TAKE_FRAME
```

<figure><img src="/files/M5dXOZq4Kt29c1iaxI7p" alt="Cura timelapse gcode"><figcaption><p>Cura — Insert at layer change (Before)</p></figcaption></figure>
{% endtab %}

{% tab title="IdeaMaker" %}
**Advanced Settings → GCode → Layer Change Gcode**

```
TIMELAPSE_TAKE_FRAME
```

<figure><img src="/files/nXUX8aDXMIhJyGj5LX8F" alt="IdeaMaker timelapse gcode"><figcaption><p>IdeaMaker — Layer Change Gcode</p></figcaption></figure>
{% endtab %}
{% endtabs %}

Con esto, cada vez que el laminador genere un G-code, ejecutará la macro en cada cambio de capa. Al finalizar la impresión, Mainsail o Fluidd renderizarán automáticamente el vídeo timelapse.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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://klipper.3dwork.io/klipper/mejoras/timelapses.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.
