Slicer screenshotAbstract. Slicers show you how a printer will move, not what the result will look like: every part is drawn in the same flat yellow, whatever filament you load. Given a screenshot of your sliced model from any slicer and a photo of the filament you plan to use, VisiPrint produces a preview of the print that keeps the slicing pattern (layer lines, seams, infill showing through) while taking on the colour, gloss, translucency and texture of the real material. In a user study, participants completed every preview task with VisiPrint within the time limit, compared with 63% using Cura and 13% using Blender.
- Why slicer previews mislead
- Two images in, one preview out
- Keeping the geometry: depth and adaptive edges
- Painting the material in: diffusion with an image prompt
- Getting the colour right
- Optional: teaching SDXL what prints look like
- Does it help people?
- Try it
1Why slicer previews mislead
Before a print, the only picture most people see is the slicer's. It shows the toolpaths accurately, but its colours are only a display convention. Real filaments differ in ways that change how a part reads: a metallic filament catches highlights on every layer line, a translucent one lets the inside of the part show through, a dark matte one hides small features. Today these differences only become visible once the part is printed.
Physically based rendering could in principle predict this, but it needs a 3D model of the material (a BRDF or a volumetric scattering model), careful lighting, and it does not reproduce the slicing pattern unless you also reconstruct every toolpath. VisiPrint takes a different route: treat the preview as an image-to-image problem, with the slicer screenshot carrying the geometry and slicing pattern and a photo carrying the material.

2Two images in, one preview out
The inputs are deliberately simple so that VisiPrint works with any slicer: a screenshot of the sliced model, which fixes the shape, the viewpoint and the slicing pattern, and a material exemplar, a photo of something printed in the filament you want (a small sphere works well). The pipeline then prepares three kinds of guidance from the screenshot before any image is generated. Step through them below.
Slicer screenshot3Keeping the geometry: depth and adaptive edges
Without guidance, a diffusion model changes the shape of the object along with its material. VisiPrint therefore conditions generation on two complementary signals through ControlNets. Depth carries the overall form, and on its own it produces smooth objects that have lost their layer lines. Edges carry what makes a print look printed: the stack of layers, the seam, vents and holes. VisiPrint uses both.
The difficulty with edges is choosing the threshold. Slicer screenshots vary a lot: a dark or low-contrast view gives weak gradients, while dense details and infill give too many. A fixed Canny threshold either loses the layer lines or drowns the image in noise. VisiPrint instead searches for a threshold. It measures gradient magnitudes inside the object, then bisects over percentiles of that distribution until the fraction of edge pixels inside the mask falls in a target band (12 to 25% by default).Outside the mask the image is filled with the median grey of the object first, so the silhouette itself does not count as a slicing edge.
get_adaptive_canny_edges() from the public
release (Gaussian blur σ = 0.8, Sobel gradients, Canny with L2 gradients and a low/high ratio of 0.25, removal of
specks smaller than 3 pixels, up to 8 bisection steps) on a 512 px copy of the screenshot.1
Switch between one fixed threshold (200 on a 0–255 scale, which suits the boat) and VisiPrint's adaptive search:
with the fixed value the darker octopus loses most of its slicing detail, while the search picks a threshold for each
screenshot. The Python under the figure is what runs: edit the call or the function and press Run. Until Python has
loaded in your browser (about 21 MB, once), a JavaScript copy of the same steps draws the figure.4Painting the material in: diffusion with an image prompt
With the guidance ready, VisiPrint repaints the decoloured object using Stable Diffusion XL in inpainting mode, so only the masked object changes and the build plate stays as it was in the screenshot. Two things steer the result. The material exemplar enters through an IP-Adapter: an image encoder turns the photo into tokens that the diffusion model attends to alongside the text prompt, so "what the material looks like" is specified by a picture rather than words. The depth and edge maps enter through two ControlNets, which constrain the layout at every denoising step. This material-transfer setup builds on ZeST2, adding the slicing (edge) guidance and the steps around it.
The text prompt is kept minimal on purpose: an image captioner (BLIP) names the object and the prompt becomes "A 3D printed noun".The captions are often generic (the boat becomes "model", the whistle "object"); the image prompt and the ControlNets determine the result, so the previews are unaffected. Users can override it, but strong prompts trade away faithfulness to the slicer image, so the interface warns about this and exposes the prompt's weight against the image prompt.
For printed parts, the most important control is Slicing Influence, the weight on the edge ControlNet. Too low and the layer lines melt into a smooth, moulded-looking object; too high and the edges dominate the material.
Slicing influence 0.8
Edge guidance5Getting the colour right
Diffusion models are good at texture and gloss but loose with exact colour: the generated pink is often a little too light or too saturated. VisiPrint finishes with a statistical colour transfer inside the object mask. For each RGB channel it matches the mean of the generated object to the mean of the exemplar, and moves the spread of values part of the way toward the exemplar's:
The two weights are the interface's Color Influence (wcol, default 0.8) and Luminance Influence (wlum, default 0.6). Try them on a real, uncorrected output:
Exemplar
Before correctionmatch_color_profile() from the public release, run in your browser with
your settings; the Python is under the figure.36Optional: teaching SDXL what prints look like
Prompted with "a 3D printed cup", SDXL alone produces a glossy product render. VisiPrint optionally applies a small LoRA fine-tune trained on 100 Creative Commons photos of real 3D prints, which pulls the model toward the look of actual FDM parts: visible layers, filament sheen, imperfect surfaces. It is switched off by default and exposed as Use Fine-Tuned Model in the interface.
7Does it help people?
We compared VisiPrint with the two things people do today: inspecting the slicer preview (Cura) and building a render (Blender). Participants were asked to produce previews of how prints would look within a time limit.
Limitations. VisiPrint predicts appearance, not printability, strength or tolerances, and a preview assumes lighting similar to that of the exemplar photo. Translucent filaments remain the hardest case.
8Try it
The full interface from the paper is at the top of this page. Pick an example and a material, or upload your own slicer screenshot and filament photo; each preview takes about 10 to 20 seconds on the GPU.
·Citation
@inproceedings{PerroniScharf2026VisiPrint,
author = {Maxine Perroni-Scharf and Faraz Faruqi and SooYeon Ahn and Raul Eduardo Hernandez and Szymon Rusinkiewicz and William Freeman and Stefanie Mueller},
title = {VisiPrint: Previewing 3D-Print Appearance from Real Material Samples},
booktitle = {Proceedings of the 2026 CHI Conference on Human Factors in Computing Systems (CHI '26)},
year = {2026},
address = {Barcelona, Spain},
publisher = {ACM},
doi = {10.1145/3772318.3790851}
}
