This live walkthrough is new. Please report bugs or issues to max1@mit.edu.

UIST 2025 · Busan, Republic of Korea

SustainaPrint: Making the Most of Eco-Friendly Filaments

Maxine Perroni-Scharf, Jennifer Xiao, Cole Paulin, Zhi Ray Wang, Ticha Sethapakdi, Muhammad Abdullah, Patrick Baudisch, Stefanie Mueller

MIT CSAIL  ·  Hasso Plattner Institute

Paper ACM DL Live app Code Interactive walkthrough BibTeX
Web version of the interface in Figure 7.Open full screen ↗

The code boxes below mesh, simulate and segment a wall hook with the released Python code (SfePy in the browser; the first run downloads about 35 MB).

Go to the code
SustainaPrint workflow on a table hook: input model, the UI with bounding boxes and force arrow, the sliced print with strong virgin filament at the high-stress corner and weak eco-friendly filament elsewhere, and the printed hook holding keys.
SustainaPrint workflow on a table hook. (a) The user starts from a 3D model. (b) In the UI they specify forces and the balance between eco-friendly and virgin filament. (c) High-stress regions get virgin filament, the rest eco-friendly filament. (d) The print supports real-world loads with little virgin plastic.
80%of each evaluated print is eco-friendly filament; 20% is virgin PLA
+22%average gain in maximum force over 100% eco-friendly prints (functional objects)
+78%largest gain, on the table hook (304 N to 543 N)
p = .00098Wilcoxon signed-rank test, SustainaPrint vs. eco-only, across all models

Overview

Biodegradable and recycled filaments have a lower environmental impact, but they are often weaker and less predictable than virgin plastic. PLA can lose more than 20% of its tensile strength after multiple recycling cycles. As a result, they are rarely used for load-bearing parts.

SustainaPrint combines both filaments in a single print. A finite element simulation finds the regions of a model most likely to fail. Those get a strong virgin filament, and everything else gets the eco-friendly one. The output is two STL files that a dual-extrusion printer prints as one part.

1

A system that combines sustainable and standard filament in one print, reinforcing structurally critical areas.

2

A user interface for specifying materials and use conditions, and for exploring the strength vs. sustainability trade-off.

3

An evaluation on real objects: prints with 80% biodegradable filament are significantly stronger than prints made entirely from eco-friendly filament.

All computation on this page runs in the browser. The app and the code boxes run the Python implementation with SfePy in Pyodide. The interactive figures use a C++ port compiled to WebAssembly, so they can update while you drag. Meshing uses fTetWild compiled to WebAssembly.

Walkthrough

An interactive version of Figure 2. Pick a model and step through the five stages. The examples use cached fTetWild meshes made with the release; simulation and segmentation run in your browser. Mesh live meshes the STL in the browser instead (about 20–35 s for these models). Drag to rotate; scroll or pinch to zoom.

The workflow

  1. Upload the model you want to print.
  2. Specify use: in the UI, mark the fixed region and where and in which direction force is applied.
  3. Simulate: a simulation estimates internal stress and highlights areas most likely to fail in weak material (typically 1–2 minutes with SfePy and fTetWild).
  4. Choose the mix: pick a percentage of eco-friendly material with a slider. SustainaPrint segments the model and generates two STLs, one for strong filament and one for eco-friendly filament.
  5. Print: slice both STLs together and print with a dual-material workflow.

Method · Steps 1–2

Simulating stress to find weak regions

SustainaPrint runs a finite element analysis (FEA) with the open-source library SfePy. The model is first meshed into tetrahedra. The user supplies boundary conditions: a fixed support zone, a force application region, and an approximate force direction and magnitude. The simulation is linear elastic and uses the material properties of the weaker filament. It assigns every tetrahedron a von Mises stress, and that stress map drives segmentation.

The code boxes below run Python in the browser (Pyodide with SfePy, NumPy and SciPy). Each box has a short script that applies one step to a wall hook, followed by the code from the release (sustainaprint.py) that it calls. The first run downloads about 35 MB.

You can edit any box and press Run or Shift+Enter. Running a box also runs the boxes above it, and the boxes share variables.

Start from an STL

A wall hook (Wall Hook by PRSPR on Printables, CC0), loaded from its STL file. It is screwed to the wall at its back face and loaded inside its curve.

1 · Fill the shape with tetrahedra

FEA requires a volume mesh. As in the paper, the STL is tetrahedralized with fTetWild using its default settings: a target edge length of 1/20 and an envelope of 1/1000 of the bounding-box diagonal. The release calls fTetWild through its Python bindings, wildmeshing; in the browser a stand-in with the same interface runs fTetWild compiled to WebAssembly. This box starts from the mesh the release made of this file; Mesh live meshes the STL in the browser instead.

2 · Simulate with SfePy

The simulation is a single function. It turns the two UI boxes into SfePy facet regions: a facet (a triangle of a tetrahedron) is in a box when its three corners are inside, so facets inside the part count too, once for each tetrahedron that owns them. Nodes of the fixed region are clamped. The weak form balances the internal elastic forces (dw_lin_elastic, with the stiffness of the weak filament) against a constant traction on the pushed facets (dw_surface_ltr). The problem is linear, so one Newton step with a direct sparse solver solves it. The stress is then averaged per tetrahedron and reduced to one von Mises value per element.

The computed displacement, exaggerated to show how the hook bends.

Method · Step 3

Segmenting the model into strong and weak regions

Two modes convert the stress field into a material assignment. The UI offers both, trading structural precision against ease of printing.

Per-tetrahedron segmentation

Each element is labeled by its stress percentile. By default the top 10% of elements are strong. This uses the most eco-friendly material but can leave fragmented regions that are harder to print.

Layer-aligned segmentation

To simplify printing, the strong region is bounded by one plane along the print (Z) axis: either everything above the lowest high-stress element becomes strong, or everything below the highest one, whichever needs less strong material. The planar boundary avoids switching materials within a layer.

Comparing the two modes

Figure 3a and 3b for any of the example models. The views update as you drag.

(a) Per-tetrahedron
(b) Layer-aligned
Distribution of element stress (log scale). Elements right of the line are strong in mode (a).
Strong (virgin) filamentWeak (eco-friendly) filament

Method · Step 3, continued

Heuristics for printability and appearance

Island removal

Small isolated pockets of strong material are reassigned to weak material if their volume falls below a user threshold. This reduces the number of material switches.

Uniform outer shell

The outermost n layers of tetrahedra get one filament, for a consistent look. A virgin shell can hide colour or texture differences of eco-friendly infill. The finer the mesh, the thinner this layer can be. It can also be set up directly in the slicer.

Paper Figure 3: a hook segmented by stress threshold, by layer-based threshold, with island removal, and a cross-section with a uniform exterior.
Figure 3 from the paper. (a) Hook segmented by stress threshold. (b) Layer-based threshold. (c) Layer-based with island removal. (d) Cross-section with a uniform exterior.

4 · Two STL files

The output is one STL per filament: the outer boundary of the strong elements and of the weak ones. Faces shared by a strong and a weak tetrahedron appear in both files and become the material interface. Slice both together for a dual-extrusion printer.

Method · Step 4

Interlocking interface structures

Interfaces between different filaments are common failure points, especially when the materials print at different temperatures. Following Multi-ttach, SustainaPrint relies on Ultimaker Cura's interlocking structures feature. It generates zig-zag, comb-like patterns at the material interface, which increase contact area and resist separation. Because this happens at slicing time, users enable it after segmentation without changing the geometry.

Headphone stand sliced with and without interlocking structures at the material interface.
(a) Headphone stand sliced with interlocking structures at the interface. (b) The same model with a simple planar transition between materials.
Extension versus force curves for an eco-friendly print and multi-material prints with and without interlocking.
Extension vs. force for three test prints.
Interface performance on the headphone stand
ConditionCompression at break (mm)Change
Eco-friendly (baseline)12.790%
Without interlocking10.05−21.4%
With interlocking (ours)14.21+11.1%

The segmented model outperformed the all-eco-friendly print only with interlocking enabled.

The user interface

The interface guides makers through dual-material setup without exposing FEA details:

  1. Input model and materials. Load a model and pick the two filaments from presets, or enter their properties.
  2. Specify usage. Place the support and force boxes on the model and enter an estimated force direction, shown as an arrow.
  3. Choose a strategy. Fine-grained or layer-aligned segmentation, with island removal and shell options.
  4. Review and iterate. If too much of the model is virgin material, move the "percentage weak filament" slider or switch modes.
  5. Export. Download one STL per material and print on a dual-extruder printer.
Paper Figure 7: the SustainaPrint UI before and after segmentation.
Figure 7. (a) Users load a model and specify its use case with bounding boxes and a force direction. (b) After segmentation they adjust the percentage of weak filament, choose a mode, and download STLs.

The paper's interface is a desktop app built with Qt and PyVista (ui.py in the release). The app at the top of this page is a browser version with the same layout: its Run Simulation button calls simulate() and its slider calls segment(), the same code as in the boxes.

Applications

SustainaPrint targets everyday objects that carry load. Click a card with a model to simulate it in the walkthrough.

Applications: hooks, plant pot, bottle opener, headphone stand and phone stand printed with two filaments.

Standing plant pot

Legged objects fail at the base under soil and water. The base and leg junctions are reinforced; the low-stress walls stay eco-friendly.

Bottle opener

Fix one end and push the other to mimic prying. Strong material goes where bending stress peaks.

Evaluation

Five functional objects and five primitive geometries were printed in three conditions: 100% eco-friendly (Polymaker PolyTerra PLA), the SustainaPrint mix (80% PolyTerra with 20% virgin), and 100% virgin. Each was tested to failure on an Instron 3369 under the load that matches its use. The virgin filament was Ultimaker Tough PLA as a conservative high-performance baseline. The primitives were repeated with standard Ultimaker PLA.

Print parameters
PrinterUltimaker S5Infill density100%
MaterialsPolyTerra, Ultimaker PLAInfill patternZig Zag
Diameter2.85 mmShell thickness0.8 mm
Resolution0.15 mmSupportTree
Mechanical testing: a printed chain, mounted in an Instron machine, the broken chain, and stress-strain curves.
Mechanical testing setup. Adding 20% Tough PLA to a PolyTerra print raises strength and extension before break by over 30%.

Functional objects

Five objects from Thingiverse: a table hook, a wall hook, a tripod plant pot, a headphone stand and a phone stand. The hooks were clamped and pulled apart; the others were compressed. SustainaPrint improved maximum force by 22.2% on average and by up to 78.5% on the table hook.

Failure modes of the tripod pot in virgin PLA, SustainaPrint and 100% PolyTerra.
Case study: tripod plant pot. 100% PolyTerra fails catastrophically at 2.8 mm of compression (right). SustainaPrint reinforces the leg joints and fails gradually elsewhere (middle), close to virgin Tough PLA (left).

Primitive geometries

Five primitives cover different load cases: a hook (tension and bending), a chain (pure tension), a beam (3-point bending, ASTM D790), a cylinder (axial compression, ASTM D695) and a dome (buckling under apex compression). With Tough PLA, SustainaPrint beat eco-only on all five, by 22.0% on average. With standard PLA the average gain was 44.1%. On the dome, SustainaPrint also outperformed 100% Tough PLA, which likely failed early because its stiffness made it brittle under buckling.

The five primitive geometries: hook, chain, beam, cylinder and dome.

Trade-offs and alternatives

Change vs. single-material prints
MetricNo purge towerWith purge tower
Total waste0%+37%
Print time+11%+45%
Virgin material saved80%80%

Dual-head printers also draw more power: about 170–200 W measured on the Ultimaker S5, vs. reported 125 W for an Ender 3 and 100 W for a Prusa i3 MK3S.

Denser infill and SustainaPrint are complementary. On the ASTM D790 beam, SustainaPrint alone gains more than doubling infill from 15% to 30%, and combining both gains more still.

Limitations and future work

The tests cover static load failure; long-term fatigue is future work. The same approach could extend to experimental materials such as coffee-ground or clay composites.

BibTeX

@inproceedings{Perroni-Scharf:2025:SP,
  author    = {Maxine Perroni-Scharf and Jennifer Xiao and Cole Paulin and Zhi Ray Wang
               and Ticha Sethapakdi and Muhammad Abdullah and Patrick Baudisch and Stefanie Mueller},
  title     = {SustainaPrint: Making the Most of Eco-Friendly Filaments},
  booktitle = {The 38th Annual ACM Symposium on User Interface Software and Technology (UIST '25)},
  year      = {2025},
  address   = {Busan, Republic of Korea},
  publisher = {ACM},
  doi       = {10.1145/3746059.3747640},
  url       = {https://doi.org/10.1145/3746059.3747640}
}

Acknowledgements

We thank Faraz Faruqi and Leonardo Hernández Cano for their feedback and support, and gratefully acknowledge the HPI-MIT Designing for Sustainability Program, the MIT MAD (Morningside Academy for Design) Fellowship, and the MIT MathWorks Fellowship.