HueForge TD Katalog / Beispiele (Transmission Distance)

German only post (because Filaments mainly in Germany available)

Nur ein ganz kurzer Artikel zu diesem Thema um meine TD Messwerte zur Verfügung zu stellen, vielleicht hilft es ja Manchen.

Es geht um HueForge bzw. die dazu hilfreichen TD Werte. HueForge ist eine Software um aus Bildern und Grafiken STL Dateien zu erstellen, um diese mit Filamentwechseln bei bestimmten Layern farbig auf einem 3DDrucker zu drucken. https://shop.thehueforge.com/
Sogenanntes Filamentpainting. (Lithophanes können mit HueForge auch erstellt werden)
Das möchte ich hier gerade nicht weiter erklären, aber ein Beispiel dafür:

Ein Bild vom Eichkat3r (ein Einhörnchen / Masotodonaccount) in einem Rahmen. 
Bild und Rahmen sind 3D gedruckt.
Der Schwanz des Eichhörnchens geht außerhalb des Rahmens weiter.

3D gedrucktes Bild vom Eichkat3r (https://hessen.social/@eichkat3r schaut hier gern mal vorbei)

Die TD-Werte (Transmission Distance) sind Filament-Parameter für diese Software. Der TD Wert eines Filaments gibt an, wie tief Licht in / durch gedruckte Gegenstände aus diesem Filament eindringt, in mm. Die Software benötigt diese Werte für die verwendeten Filamente um die resultierende Farbe der übereinander liegenden Filamentschichten besser berechnen zu können.

Ich habe nun für alle Filamente die ich gerade da habe und bei denen es mir sinnvoll erschien, Testswatches gedruckt und mit dieser Testbox gemessen: https://www.printables.com/de/model/552566-official-hueforge-td-step-test-and-light-box
Die Werte sind nicht ganz einfach abzulesen, aber besser ein grob richtiger Wert, als ein grob falscher. Selbst bei vermeintlich gleichen Farben wie Weiß von DasFilament und Weiß (Flauschiges Schaf) von der Recyclingfabrik, gibt es mit 1,2 und 2,5 zwei sehr unterschiedliche TD Werte. Ich vermute es hängt hier an der Konzentration von Pigment / Färbemittel.

PETGPLA
Das FilamentWeiß1,4PolyTerraForest Green0,5
Alu-Silber1,5Saphire Blue0,3
Melonengelb3,0
Blau0,8Das FilamentSchwarz0 – 0,1
Schwarz0,2Feuerrot1,5
Sonnengelb3,5
PrusamentPrusa Orange2,6Weiß1,2
Jungle Green0,7
RecyclingfabrikFlauschiges Schaf2,5
CR3DWasserblau0,8Kluge Maus1,3
Nasser Elefant0,7
Flüssiger Asphalt0,5
Gute Nacht0,2
Sorry für die Formatierung, besser ging es gerade nicht als Tabelle. Ein Bild mit ewig langem Alternativtext wollte ich jetzt auch nicht.

Die zwei PolyTerra Filamente habe ich mir übrigens nur als Referenz zur TD Messung gekauft. Die TD Werte davon sind “offiziell” von HueForge gemessen und in deren Katalog aufgelistet. Ich weiß nicht so recht was ich mit diesen zwei Rollen jetzt anfangen soll. Sie sind im Vergleich recht anspruchsvoll (langsam) zu drucken für gute Ergebnisse, ca. 1/4 der Geschwindigkeit mit der ich ansonsten mit dem Prusa MK4 oder MINI+ drucke, also echt langsam.
Solltet ihr ebenfalls Filament als Referenz zur Messung benötigen, sagt Bescheid, ich lasse euch gerne etwas davon zukommen.

Spoolman behind a Traefik-Proxy in the internal network

German version below:

Spoolman is a great too to track your filament usage and Sebastian already described the setup. I’m also running Spoolman in my internal network. The software got multiple user interfaces or integrations so that you can use it standalone in a browser or integrate a widget into Klippers User interface.

The integration into Moonraker (the Web Interface for Klipper) currently doesn’t have the ability to provide any credentials for Moonrakers Spoolman integration to authenticate against Spoolman.

If you want to expose Spoolman to the Internet to check your filament usage from outside your homework you surely want authentication. Spoolman doesn’t offer any user management at all at the moment. So you have to user a normal web server or proxy to add some authentication.

In my personal setup I’m using Traefik reverse proxy to expose Spoolman running in a Docker container to the internet and handle the SSL certificates. SSL is also required to make use of Spoolmans feature to scan QR codes of your spools.

The requirements in my setup are: do not require a password when requests come from the local network (192.168.1.0/24); do require HTTP Basic authentication when request comes from the outside Internet.

This way the integration into my Klipper setup doesn’t require authentication but accessing Spoolman from the internet does.

While this would be relatively straightforward with Apache HTTPD it was a bit tricky with Traefik.

My solution is to define two http.routers in Traefik for Spoolman. One for access from the internal network:

- "traefik.http.routers.spoolman-internal.rule=( Host(`spoolman.example.net`) && ClientIP(`192.168.1.0/24` ))"

and one for access from the outside Internet:

- "traefik.http.routers.spoolman.rule=Host(`spoolman.example.net`) && !ClientIP(`192.168.1.0/24` )"
- "traefik.http.routers.spoolman.entrypoints=websecure"

Both http.routers then can have their own Traefik middlewares section to add authentication or not.

My whole Spoolman docker-compose.yaml looks like this:

version: '3.8'
services:
  spoolman:
    image: ghcr.io/donkie/spoolman:latest
    restart: unless-stopped
    labels:
       - "traefik.enable=true"
       - "traefik.http.routers.spoolman-internal.rule=( Host(`spoolman.example.net`) && ClientIP(`192.168.1.0/24` ))"
       - "traefik.http.routers.spoolman-internal.entrypoints=websecure"
       - "traefik.http.routers.spoolman.rule=Host(`spoolman.example.net`) && !ClientIP(`192.168.1.0/24` )"
       - "traefik.http.routers.spoolman.entrypoints=websecure"
       - "traefik.http.routers.spoolman.tls=true"
       - "traefik.http.routers.spoolman.priority=2"
       - "traefik.http.routers.spoolman.tls.certresolver=letsencrypt"
       - "traefik.http.routers.spoolman-internal.tls.certresolver=letsencrypt"
       - "traefik.http.routers.spoolman.middlewares=auth-users"
       - "traefik.http.routers.spoolman-internal.tls=true"
       - "traefik.http.routers.spoolman-internal.priority=1"
       - "traefik.http.routers.spoolman.service=svc-spoolman"
       - "traefik.http.routers.spoolman-internal.service=svc-spoolman"
       - "traefik.http.services.svc-spoolman.loadbalancer.server.port=8000"
       - "traefik.http.middlewares.auth-users.basicauth.users=admin:$$2U$$07$$K3XvlqQOC3ScMoRqOIQ50elXe.QByrAvpvmaDp9yj0oaA4LOLiCE6"
    networks:
      - web
    volumes:
      # Mount the host machine's ./data directory into the container's /home/app/.local/share/spoolman directory
      - type: bind
        source: ./data # This is where the data will be stored locally. Could also be set to for example `source: /home/pi/printer_data/spoolman`.
        target: /home/app/.local/share/spoolman # Do NOT change this line
    ports:
      # Map the host machine's port 7912 to the container's port 8000
      - target: 8000
        published: 7912
        protocol: tcp
        mode: host
    environment:
      - TZ=Europe/Stockholm # Optional, defaults to UTC

networks:
  web:
    name: web
    external: true

German version:

Spoolman ist ein echt tolles Tool, um den Filamentverbrauch zu verfolgen, und Sebastian hat die Einrichtung bereits beschrieben.
Ich verwende Spoolman auch in meinem internen Netzwerk. Die Software hat mehrere Benutzeroberflächen oder Integrationen, so dass man sie eigenständig in einem Browser verwenden oder ein Widget in Klippers Benutzeroberfläche integrieren kann.

Die Integration in Moonraker (das Web-Interface für Klipper) bietet derzeit keine Möglichkeit, Anmeldedaten für Moonrakers Spoolman-Integration bereitzustellen, um sich gegenüber Spoolman zu authentifizieren.

Wenn Sie Spoolman dem Internet aussetzen wollen, um Ihre Filamentnutzung von außerhalb Ihres Hauses zu überprüfen, brauchen Sie sicherlich eine Authentifizierung. Spoolman bietet zur Zeit keine Benutzerverwaltung an. Sie müssen also einen normalen Webserver oder Proxy verwenden, um eine Authentifizierung hinzuzufügen.

In meinem persönlichen Setup verwende ich Traefik als Reverse Proxy, um Spoolman, das in einem Docker-Container läuft, dem Internet auszusetzen und die SSL-Zertifikate zu verwalten. SSL ist auch erforderlich, um Spoolmans Funktion zum Scannen von QR-Codes Ihrer Spools nutzen zu können.

Die Anforderungen in meinem Setup sind: kein Kennwort erforderlich, wenn Anfragen aus dem lokalen Netzwerk (192.168.1.0/24) kommen; HTTP Basic Authentication erforderlich, wenn Anfragen von außerhalb des Internets kommen.

Auf diese Weise ist für die Integration in mein Klipper-Setup keine Authentifizierung erforderlich, für den Zugriff auf Spoolman aus dem Internet jedoch schon.

Während dies mit Apache HTTPD relativ einfach zu bewerkstelligen wäre, war es mit Traefik etwas knifflig.

Meine Lösung ist, in Traefik zwei http.routers für Spoolman zu definieren. Einer für den Zugriff aus dem internen Netzwerk:

- "traefik.http.routers.spoolman-internal.rule=( Host(`spoolman.example.net`) && ClientIP(`192.168.1.0/24` ))"

und einen für den Zugriff aus dem Internet:

- "traefik.http.routers.spoolman.rule=Host(`spoolman.example.net`) && !ClientIP(`192.168.1.0/24` )"
- "traefik.http.routers.spoolman.entrypoints=websecure"

Beide http.router können dann ihre eigene Traefik-Middlewares-Sektion haben, um Authentifizierung hinzuzufügen oder nicht.

Mein ganzes Spoolman docker-compose.yaml sieht wie folgt aus:

version: '3.8'
services:
  spoolman:
    image: ghcr.io/donkie/spoolman:latest
    restart: unless-stopped
    labels:
       - "traefik.enable=true"
       - "traefik.http.routers.spoolman-internal.rule=( Host(`spoolman.example.net`) && ClientIP(`192.168.1.0/24` ))"
       - "traefik.http.routers.spoolman-internal.entrypoints=websecure"
       - "traefik.http.routers.spoolman.rule=Host(`spoolman.example.net`) && !ClientIP(`192.168.1.0/24` )"
       - "traefik.http.routers.spoolman.entrypoints=websecure"
       - "traefik.http.routers.spoolman.tls=true"
       - "traefik.http.routers.spoolman.priority=2"
       - "traefik.http.routers.spoolman.tls.certresolver=letsencrypt"
       - "traefik.http.routers.spoolman-internal.tls.certresolver=letsencrypt"
       - "traefik.http.routers.spoolman.middlewares=auth-users"
       - "traefik.http.routers.spoolman-internal.tls=true"
       - "traefik.http.routers.spoolman-internal.priority=1"
       - "traefik.http.routers.spoolman.service=svc-spoolman"
       - "traefik.http.routers.spoolman-internal.service=svc-spoolman"
       - "traefik.http.services.svc-spoolman.loadbalancer.server.port=8000"
       - "traefik.http.middlewares.auth-users.basicauth.users=admin:$$2U$$07$$K3XvlqQOC3ScMoRqOIQ50elXe.QByrAvpvmaDp9yj0oaA4LOLiCE6"
    networks:
      - web
    volumes:
      # Mount the host machine's ./data directory into the container's /home/app/.local/share/spoolman directory
      - type: bind
        source: ./data # This is where the data will be stored locally. Could also be set to for example `source: /home/pi/printer_data/spoolman`.
        target: /home/app/.local/share/spoolman # Do NOT change this line
    ports:
      # Map the host machine's port 7912 to the container's port 8000
      - target: 8000
        published: 7912
        protocol: tcp
        mode: host
    environment:
      - TZ=Europe/Stockholm # Optional, defaults to UTC

networks:
  web:
    name: web
    external: true

[Teil 2] Spoolman – Klipper Installation

English below:

Die Installation von Spoolman auf dem Raspberry (oder MKS-Mainboard), wo Klipper drauf läuft ist so simpel wie so viele andere Klipper-Plugins – es wird lediglich ein auf Debian basiertes vorrausgesetzt.

sudo apt-get update && \
sudo apt-get install -y curl jq && \
mkdir -p ./Spoolman && \
source_url=$(curl -s https://api.github.com/repos/Donkie/Spoolman/releases/latest | jq -r '.assets[] | select(.name == "spoolman.zip").browser_download_url') && \
curl -sSL $source_url -o temp.zip && unzip temp.zip -d ./Spoolman && rm temp.zip && \
cd ./Spoolman && \
bash ./scripts/install_debian.sh

So wird es zumindest in der Anleitung beschrieben.

Ich hingegen habe ich mich dazu entschlossen Spoolman auf einem anderen Host mit Hilfe von Docker zu installieren, da ich eh eine VM in meinem Netzwerk habe, die diverse Docker-Container bereit stellt.

Ich wiederhole einfach nur noch schnell einmal die Grundinstalltion, wie ich sie auch schon im Teil 1 von der Spoolman-Anleitung beschrieben habe.

Die entsprechende docker-compose.yml sieht dann in etwa so aus:

version: '3.8'
services:
  spoolman:
    image: ghcr.io/donkie/spoolman:latest
    restart: always
    volumes:
      # Mount the host machine's ./data directory into the container's /home/app/.local/share/spoolman directory
      - type: bind
        source: ./data # This is where the data will be stored locally. Could also be set to for example `source: /home/pi/printer_data/spoolman`.
        target: /home/app/.local/share/spoolman # Do NOT change this line
    ports:
      # Map the host machine's port 7912 to the container's port 8000
      - "7912:8000"
    environment:
      - TZ=Europe/Berlin# Optional, defaults to UTC

Wenn man also den Container installiert und am Laufen hat, dann reicht eine einfache Änderung der moonraker.conf in Klipper um Spoolman hinzuzufügen:

# moonraker.conf

[spoolman]
server: http://192.168.10.123:7912
#   URL to the Spoolman instance. This parameter must be provided.
sync_rate: 5
#   The interval, in seconds, between sync requests with the
#   Spoolman server.  The default is 5.

Und in die printer.cfg wird dann noch folgendes ergänzt:

# printer.cfg

[gcode_macro SET_ACTIVE_SPOOL]
gcode:
  {% if params.ID %}
    {% set id = params.ID|int %}
    {action_call_remote_method(
       "spoolman_set_active_spool",
       spool_id=id
    )}
  {% else %}
    {action_respond_info("Parameter 'ID' is required")}
  {% endif %}

[gcode_macro CLEAR_ACTIVE_SPOOL]
gcode:
  {action_call_remote_method(
    "spoolman_set_active_spool",
    spool_id=None
  )}

Und das war es schon – nach einem Neustart von Klipper sieht es dann so aus:

Es gibt sogar eine Integration in Home Assistant um sich dort auch die Spulen anzeigen zu lassen.

Die Einrichtung ist relativ einfach und quasi selbsterklärend.
Hier gibt es die entsprechenden Infos: Home Assistant Spoolman

PS: Damit man auch die QR Codes, die man mit Spoolmann erstellt und ausgedruckt hat lesen kann, braucht es zwingend eine https-Verbindung zu Spoolman. Das ist seitens der Browserhersteller wie Mozilla oder Google so vorgegeben.

Ich habe das ganz einfach per Nginx Proxy Manager gelöst in dem ich eine neue Subdomain angelegt habe und diese dann per Letsencrypt mit einem SSL-Zertifikat ausgestattet habe.
Aber nun ist Spoolman offen aus dem Internet erreichbar?
Ja, aber mit Hilfe einer Access List (z.B. local-only) im Nginx Proxy Manager und der entsprechenden Einstellung bei der Subdomain, dass diese Access List benutzt werden soll, habe ich so eine HTTP-Auth Passwortabfrage eingerichtet und nur Personen mit entsprechendem Passwort kommen an das Webinterface von Spoolman.

@maxheadroom hat das aber auch irgendwie in seinem Traefik-Container lösen können und schreibt hier darüber: Klick

English version:

The installation of Spoolman on the Raspberry Pi (or MKS mainboard) running Klipper is as simple as so many other Klipper plugins – it only requires a Debian based system.

sudo apt-get update && \
sudo apt-get install -y curl jq && \
mkdir -p ./Spoolman && \
source_url=$(curl -s https://api.github.com/repos/Donkie/Spoolman/releases/latest | jq -r '.assets[] | select(.name == "spoolman.zip").browser_download_url') && \
curl -sSL $source_url -o temp.zip && unzip temp.zip -d ./Spoolman && rm temp.zip && \
cd ./Spoolman && \
bash ./scripts/install_debian.sh

At least that’s how it’s described in the instructions.

However, I decided to install Spoolman on another host using Docker, as I already have a VM in my network that provides various Docker containers.

I’ll just quickly repeat the basic installation as I described in part 1 of the Spoolman guide.

The corresponding docker-compose.yml then looks something like this:

version: '3.8'
services:
  spoolman:
    image: ghcr.io/donkie/spoolman:latest
    restart: always
    volumes:
      # Mount the host machine's ./data directory into the container's /home/app/.local/share/spoolman directory
      - type: bind
        source: ./data # This is where the data will be stored locally. Could also be set to for example `source: /home/pi/printer_data/spoolman`.
        target: /home/app/.local/share/spoolman # Do NOT change this line
    ports:
      # Map the host machine's port 7912 to the container's port 8000
      - "7912:8000"
    environment:
      - TZ=Europe/Berlin# Optional, defaults to UTC

So if you have the container installed and running, a simple change to moonraker.conf in Klipper is enough to add Spoolman:

# moonraker.conf

[spoolman]
server: http://192.168.10.123:7912
#   URL to the Spoolman instance. This parameter must be provided.
sync_rate: 5
#   The interval, in seconds, between sync requests with the
#   Spoolman server.  The default is 5.

And the following is then added to printer.cfg:

# printer.cfg

[gcode_macro SET_ACTIVE_SPOOL]
gcode:
  {% if params.ID %}
    {% set id = params.ID|int %}
    {action_call_remote_method(
       "spoolman_set_active_spool",
       spool_id=id
    )}
  {% else %}
    {action_respond_info("Parameter 'ID' is required")}
  {% endif %}

[gcode_macro CLEAR_ACTIVE_SPOOL]
gcode:
  {action_call_remote_method(
    "spoolman_set_active_spool",
    spool_id=None
  )}

And that’s it – after restarting Klipper, it looks like this:

There is even an integration in Home Assistant to display the reels there too.

The setup is relatively simple and virtually self-explanatory.
You can find the relevant information here: Home Assistant Spoolman

PS: In order to be able to read the QR codes that you have created and printed with Spoolman, an https connection to Spoolman is required. This is specified by browser manufacturers such as Mozilla or Google.

I solved this quite simply using Nginx Proxy Manager by creating a new subdomain and then equipping it with an SSL certificate using Letsencrypt.
But now Spoolman is openly accessible from the Internet?
Yes, but with the help of an access list (e.g. local-only) in the Nginx Proxy Manager and the corresponding setting in the subdomain that this access list should be used, I have set up an HTTP-Auth password query and only people with the corresponding password can access the Spoolman web interface.

However, @maxheadroom has also been able to solve this somehow in his Traefik container and writes about it here: Click

Recycling in 3D (-Druck)

English below.

Dieser Artikel wird aktuell gehalten (so der Plan). Letztes Update: 25.02.2024

Wer sich mit 3DDruck beschäftigt und Umweltbewusst leben möchte, wird sich früher oder später mit einem Problem befassen: Wohin mit den ganzen Fehldrucken, Prototypen, Supports, Brims, Skirts und nicht mehr genutzten Objekten? Im kommunalen Recyclingsystem werden die Drucke aus den gängigen Materialien – soweit mir bekannt – nicht genutzt und somit thermisch verwertet (verbrannt).

Mit viel Glück gibt es vielleicht eine Recyclinginitiative wie z.B. Precious Plastic in der Nähe, die Druckreste annehmen, das aber in der Regel in sehr begrenzten Mengen.

Es gibt auch Recyclingkits zu kaufen um selbst neues Filament zu produzieren (oder Anleitungen zum selbst bauen), jedoch erscheint mir hier der Preis und/oder Aufwand der Anschaffung für den Nutzen im Hobbybereich zu hoch. Für eine offene Werkstatt / Hackerspace und den gemeinsamen Gebrauch wäre die Hürde der Anschaffung zwar kleiner, jedoch bleibt der Prozess des diy Recycling in brauchbares Filament aus meiner Sicht fraglich. Es ist meistens sehr langsam und die Qualität des Produkts ungewiss.

Im Herbst 2022 bin ich auf die “Recyclingfabrik” aufmerksam gemacht worden. Die Firma hat es sich zur Aufgabe gemacht, 3DDruck Reste professionell in großem Stil in neues Filament zu recyceln. Kunden können ihre Reste kostenlos per Paket einschicken (Label per Mail) und bekommen dafür in einem Punktesystem einen Rabatt für die Bestellung im Onlineshop.

Aktuell werden Drucke und Reste der Materialien PLA und PETG angenommen, sowie leere unbeschädigte Spulen. Die Sortierung nach Material, also PLA und PETG getrennt verpacken, z.B. in Plastikbeutel getrennt im Paket, ist notwendig. Eine Sortierung nach Farben ist nicht erforderlich – freut die EmpfängerInnen aber. So werden pro kg eingesendetes Material 100 Punkte (2 €) auf das Kundenkonto gut geschrieben, sofern das Material sortiert ist und nicht verschmutzt mit Staub, Kleber, Farbe oder ähnlichem. Ansonsten gibt es entsprechend weniger Punkte gut geschrieben. Für leere Spulen gibt es 10 Punkte (20 Cent).

Ein großer Karton, darin einige leere Spulen und in Tüten verpackt, farblich sortierte Druckreste

Beim einkaufen im Onlineshop kann anschließend bis zu 25% des Warenkorbwerts mit den erworbenen Punkten bezahlt werden.

Den Preis des (unrabattierten) Filaments von 22 – 25 €/kg rPLA und 24 – 28 €/kg rPETG – sowie den Wert der Punkte für das eingeschickte Material finde ich fair, besonders wenn ich den Mehraufwand bedenke, der im Vergleich zur Produktion mit neuem Granulat entsteht. Wer mehr als einzelne Rollen kauft, bekommt mit Bundle-Angeboten Mengenrabatt. In Kombination mit eingelösten Punkten und Versandkostenfreier Lieferung ab 75 € Bestellwert, lässt sich da einiges an Geld sparen.

Seit anfang 2024 gibt es Filament auch als 1kg Refill-Variante zu kaufen, mit eigener, druckbarer Masterspool. Dies habe ich noch nicht getestet.

Qualität des Filaments

Ich habe inzwischen schon viele Rollen an rPLA gedruckt und mehrfach bestellt – ich bin sehr zufrieden damit. Die Druckqualität bei der empfohlenen Temperatur kann mit gängigen Markenherstellern mithalten, auch das Stringing-Verhalten würde ich als normal beschreiben. Mit dem Durchmesser hatte ich bisher auch noch keine Probleme, das würde bei so vielen Bowden Tubes am Prusa MMU nämlich schnell auffallen.
PETG ist erst seit kurzem im Shop erhältlich und immer noch schnell ausverkauft und in wenigen Farben verfügbar. Ich habe nun auch hiervon ein paar Rollen daheim, konnte sie aber noch nicht testen. Ebenso habe ich noch keine Erfahrung mit deren eigener Masterspool für das Refill Filament.

4 neue, in Folie verschweißte Filamentrollen in einem Karton

Einsenden von Resten

Noch ein Kurzer Hinweis hierzu: Es gibt immer wieder Annahmestops für Einsendungen, da scheinbar mehr Menschen das Konzept gut finden, als Pakete bearbeitet werden können. Prüft also zunächst auf der Seite “Versandlabel anfordern” (ganz unten auf dieser Seite), ob es aktuell einen Annahmestop gibt, bevor ihr eure Filamentreste sortiert und verpackt. Außerdem ist das Einsenden aktuell nur für Personen möglich, die schon einmal Filament bei der Recyclingfabrik gekauft haben.

Disclaimer: Dies ist ein privater Erfahrungsbericht, ich habe in keiner Weise Zuwendungen erhalten für das verfassen dieses Artikels.

In English:

This article will be kept up to date (at least that’s the plan). Last update: 25.02.2024

This article is strongly focused on the german recycling system, an an company from Germany which recycles 3D printing material.

Anyone who is involved in 3D printing and wants to live an environmentally conscious life will sooner or later face a problem: Where to put all the failed prints, prototypes, supports, brims, skirts and objects that are no longer used? As far as I know, prints made from common materials are not used in the municipal recycling system and are therefore thermally utilized (burned).

If you are very lucky, there may be a recycling initiative such as Precious Plastic nearby that accepts printed waste, but usually in very limited quantities.

There are also recycling kits to buy to produce new filament yourself (or instructions on how to build it yourself), but the price and/or effort involved in purchasing and using them seems too high for the hobby sector. For an open workshop / hackerspace and shared use, the hurdle of purchase would be smaller, but the process of diy recycling into usable filament remains questionable in my view. It is usually very slow and the quality of the product is uncertain.

In the fall of 2022, I was made aware of the “Recyclingfabrik”. The company has set itself the task of professionally recycling 3D printing remnants into new filament on a large scale. Customers can send in their remnants free of charge by parcel (label by email) and receive a discount for ordering in the online store in a points system.

Currently, prints and remnants of the materials PLA and PETG are accepted, as well as empty, undamaged spools. Sorting by material, i.e. packing PLA and PETG separately, e.g. in separate plastic bags in the package, is necessary. Sorting by color is not necessary – but the recipients will be pleased. For every kg of material sent in, 100 points (€2) will be credited to the customer’s account, provided the material is sorted and not contaminated with dust, glue, paint or similar. Otherwise, fewer points will be credited accordingly. Empty spools are worth 10 points (20 cents).

A big cardboard box filled with empty spools and sorted filament waste in plastic bags

When shopping in the online store, up to 25% of the basket value can then be paid for with the points earned.

I think the price of the (undiscounted) filament of 22 – 25 €/kg rPLA and 24 – 28 €/kg rPETG – as well as the value of the points for the material sent in – is fair, especially when I consider the additional work involved compared to production with new granulate. If you buy more than individual rolls, you get a volume discount with bundle offers. In combination with redeemed points and free shipping on orders over €75, you can save a lot of money.

Since the beginning of 2024, filament has also been available to buy as a 1kg refill variant, with its own printable master pool. I have not yet tested this.

Quality of the filament

I have already printed many rolls of rPLA and ordered it several times – I am very satisfied with it. The print quality at the recommended temperature can keep up with well known brand manufacturers, and I would also describe the stringing behavior as normal. I haven’t had any problems with the diameter yet either, as this would quickly become apparent with so many Bowden tubes on the Prusa MMU.

PETG has only recently become available in the store and still sells out quickly and is only available in a few colors. I now have a few rolls of these at home, but haven’t been able to test them yet. I also have no experience with their own master pool for the refill filament.

4 new, shrink-wrapped filament rolls in a cardboard box

Sending in leftovers

A short note on this: There are always stops for accepting submissions, as there seem to be more people who like the concept than there are parcels to process. So first check the “Request shipping label” page (at the bottom of the page) to see if there is currently an acceptance stop before you sort and pack your leftover stuff. In addition, sending in filament is currently only possible for people who have already purchased filament from the Recyclingfabrik.

Disclaimer: This is a private experience report, I have not received any form of compensation for writing this article.

[Teil 1] Spoolman – track your filament… hab ich noch grünes PETG?

English below:

Neulich bin ich durch Zufall im Discord vom Mainsail-Projekt auf “Spoolman” gestoßen. Ein Klipper-Plugin, von dem ich bis dato noch nie was gehört habe, welches dazu gedacht ist endlich ein wenig Ordnung in sein vorhandenes Filament zu bringen.

In einer Datenbank werden Hersteller, Farbe, Art und Gewicht Deiner Filamente getrackt und mit Hilfe des Klipper-Plugins wird der Verbrauch direkt subtrahiert. So kannst Du weitestgehend genau sagen, wie viel Du noch von Filament X hast und kannst entscheiden, ob Dein nächster Druck damit noch möglich ist oder ob Du lieber nachbestellen solltest oder eben in einer anderen Farbe drucken möchtest.

Das Projekt findest Du hier: https://github.com/Donkie/Spoolman
… und es lässt sich sehr leicht anhand der Anleitung dort installieren.

Ich habe es als Docker-Version installiert, da ich auf einem meiner Hosts eh mehrere Docker-Projekte laufen habe.

Und so sieht die docker-compose.yml aus:

version: '3.8'
services:
  spoolman:
    image: ghcr.io/donkie/spoolman:latest
    restart: unless-stopped
    volumes:
      # Mount the host machine's ./data directory into the container's /home/ap>
      - type: bind
        source: ./data # This is where the data will be stored locally. Could a>
        target: /home/app/.local/share/spoolman # Do NOT change this line
    ports:
      # Map the host machine's port 7912 to the container's port 8000
      - "7912:8000"
    environment:
      - TZ=Europe/Berlin # Optional, defaults to UTC

Wenn man alles also eingerichtet hat, beginnt man damit seine Filamente zu erfassen.

Ich rate dazu zunächst mit den Herstellern anzufangen und sich dann über die einzelnen Filamentsorten bis hin zur einzelnen Spule zu arbeiten.

Um auch die Dichte der jeweiligen Filamentsorten richtig zu erfassen, emofehle ich diese Webseite:
https://www.simplify3d.com/resources/materials-guide/properties-table/

Dort steht unter Density für die jeweilige Sorte auch der entsprechend richtige Wert. Bei PLA wäre das zum Beispiel: 1,24 g/cm³

Am Ende sieht es dann in etwa so aus:

Und wie man sehen kann, habe ich überhaupt kein grünes PETG Filament. 😀

Im nächsten Teil werden wir dann mal sehen, wie das Ganze dann in Klipper integriert wird und wie einfach es dann ist selbst bei einem Filamentwechsel während des Drucks die entsprechenden Spulen auszuwählen.

English:

[Part 1] Spoolman – track your filament… do I still have some green PETG left?

I recently came across “Spoolman” by chance in the Mainsail project’s Discord. A Klipper plugin that I had never heard of before, which is designed to finally bring some order to your existing filament.

The manufacturer, color, type and weight of your filaments are tracked in a database and the consumption is subtracted directly with the help of the Klipper plugin. This way you can tell exactly how much of filament X you have left and can decide whether your next print is still possible with it or whether you should rather reorder or print in a different color.

You can find the project here: https://github.com/Donkie/Spoolman
… and it is very easy to install using the instructions there.

I installed it as a Docker container because I have several Docker projects running on one of my hosts anyway.

And this is what docker-compose.yml looks like:

version: '3.8'
services:
  spoolman:
    image: ghcr.io/donkie/spoolman:latest
    restart: unless-stopped
    volumes:
      # Mount the host machine's ./data directory into the container's /home/ap>
      - type: bind
        source: ./data # This is where the data will be stored locally. Could a>
        target: /home/app/.local/share/spoolman # Do NOT change this line
    ports:
      # Map the host machine's port 7912 to the container's port 8000
      - "7912:8000"
    environment:
      - TZ=Europe/Berlin # Optional, defaults to UTC

Once you have set everything up, you can start to record your filaments.

I recommend starting with the manufacturers first and then working your way through the individual filament types right down to the individual spools.

To correctly record the density of the respective filament types, I recommend this website:
https://www.simplify3d.com/resources/materials-guide/properties-table/

There, under Density, you will also find the correct value for the respective type. For PLA, for example, this would be: 1.24 g/cm³

In the end, it looks something like this:


And as you can see, I do not have any green PETG filament at all. 😀

In the next part, we will see how the whole thing is integrated into Klipper and how easy it is to select the appropriate spools even when changing filament during printing.