From a photograph to a finished piece.
This is the working guide for everything that happens on your side of the file: how to shoot a portrait the generator can actually use, what comes down in the download, how to print parts that hold their surfaces, and what to buy rather than print. Read it before you order a Photo-Fit — a good portrait costs you five minutes and saves a revision round.
PulseMask is a design study, sold as wearable art. These files produce a decorative prop / costume / maker piece. It is not a respirator, not PPE, and not a medical device — it is untested to NIOSH 42 CFR 84, EN 136/143 and ISO 16900, provides no respiratory protection, and must never be relied on as protective equipment. UV-C hardware is an eye and skin hazard; no electronics are included or supported.
What you actually receive
Every tier ships the same multi-part model, generated at your measurements or at a stock size. Geometry is written in millimetres — the scale every slicer expects — and each part is a separate named, closed mesh, so you load them as separate objects and choose what prints.
Those numbers come from the generator's own headless readout at default parameters — node cli.mjs --metrics-only — not from a printed sample. Change the sliders and they change with you.
The photograph is the measurement
Photo-Fit reads one image and one number. Get both right and the rest is automatic; get either wrong and you have spent a revision round finding out.
What a usable portrait is
One photograph, taken straight on and lit flat. Both pupils visible, eyes open, neutral expression, lips closed and relaxed. No glasses. Hair back off the brow, jaw and ears.
Even light is not an aesthetic preference here. The relief pass subtracts a blurred copy of your photograph to strip out the lighting gradient — that works because a gradient is smooth. A hard shadow edge is not. It survives the filter and gets built as though it were a crease in your face.
Camera at eye height, about two metres back, then zoom or crop rather than stepping closer. A phone at arm's length is a wide lens near a face: it pushes the nose forward and pulls everything outboard of it back. Every dimension in your file is a ratio between landmarks, and foreshortening moves those ratios before we ever see them.
Resolution is not the constraint — the portrait is resampled to 460 px wide before anything is measured. Focus and unfiltered skin matter more than megapixels.
Measuring your interpupillary distance
This is the only real-world measurement you supply, and every absolute dimension descends from it. It sets mmPerPx for the whole image; face width comes out as IPD × 2.22 clamped to 118–168 mm, and face height scales off the eye-line-to-menton distance read in those same millimetres. A wrong IPD gives you a correctly proportioned mask at the wrong size.
Ask your optician for your distance PD — if it comes back as two monocular figures, right and left, add them. Otherwise use a mirror: stand close, hold a ruler flat against your brow, close one eye and align the zero mark with the centre of the open eye's reflected pupil, then swap eyes without moving the ruler and read off the other. Do it three times, take the middle value.
The field ships at 63 mm and accepts 48–78 mm. 63 is a population placeholder, not your face — it will be wrong for you by an amount you cannot guess by looking.
The five landmarks
Five points get placed on the portrait: left pupil, right pupil, nose tip, mouth, menton. The pupils do two jobs — their separation carries the scale, and the line between them sets rotation, so a slight head tilt is corrected provided both are visible. Nose tip is the most forward point of the nose. Mouth is the centre of the lip seam, relaxed. Menton is the lowest point of the chin on the centreline — not the front of the jaw, not the underside of the throat. Eye line to menton drives face height; where the nose sits between the two drives nose scale against a canonical ratio of 0.411.
What the relief pass recovers
Your photograph is sampled onto an 88 × 110 grid in canonical face coordinates, converted to Rec.709 luminance, blurred with a separable box filter of radius 9, and the blur subtracted. What is left is normalised to ±1 and drives relief at a default 4.5 mm amplitude.
That recovers surface structure — nostril creases, the lip line, brow and cheek modelling. It does not recover depth. A bright pixel is not a near pixel; it is a pixel where the light landed. Single-image capture cannot recover metric depth: proportion comes from the landmarks, texture from photometry, and neither is a validated seal. A fit you could trust needs a depth scan or a plaster cast. These are decorative wearable-art files — not PPE, not a respirator, not a medical device, and they provide no protection.
What gets a portrait rejected
- Glasses on. Frames and lens glare sit exactly where the pupils have to be read.
- A pupil hidden — three-quarter turn, hair across an eye, a blink.
- Smile, open mouth or clenched jaw. Mouth and menton both move.
- One hard lamp or direct sun, throwing a cast shadow across the nose or one cheek.
- Beauty filters, skin smoothing or portrait-mode blur bleeding onto the jaw — smoothing deletes the exact detail band the relief pass reads.
- Shot at arm's length.
- Chin or jawline covered by a collar, scarf or hat-brim shadow.
- No IPD supplied, or an IPD you guessed.
Getting parts that hold their surfaces
Load the files as separate objects, not as one body. Every part is its own closed mesh and they overlap rather than boolean-union — slicers handle that, but it means you choose what prints and in what orientation, part by part.
Will it fit your bed
Measured off the default build, as generated and before you reorient anything:
A 200 × 200 bed takes the shell and every core part. The bust and the horns want 250 mm in one axis or a cut and a joint. Nothing here is designed with split lines — if you cut a part, you are choosing where the seam lands.
Why the design assumes SLS nylon
The shell is drawn around SLS PA12 at a 2.6 mm wall. PA12 is tough where photopolymer is brittle, and a resin shell that cracks at the visor aperture during a fall is a failure mode with your eyes behind it. SLS also prints the shell unsupported, which is the part that actually matters: no support scars land on the sealing face, and that surface has to stay smooth or the bead sits on ridges.
Sending it to an SLS bureau is the low-effort route. You upload the shell, you get a part.
If you are printing FDM or resin
Both work for a decorative build. What changes is where you spend your attention — the notes below are general printing craft rather than anything the model measures for you:
- Shell — face down or face up, never on its side. Supports touching the inner sealing face are the one thing to avoid; scars there are the difference between a bead that beds down and one that rocks. At 2.6 mm there is enough wall to sand layer lines back hard.
- Inner oronasal cup — 1.8 mm wall, so it is the thinnest structural part in the set. Print it slow and warm; a cup that delaminates at the rim is scrap.
- Seal bead — an 8.4 mm section tube following the rim. It exists to be soft. Print it in TPU if you have it, or treat the printed version as a pattern for a silicone pour.
- Canister stack — reactor housing, filter cartridge and collar are lathed at low segment counts on purpose, so the flats are design, not faceting artefacts. They print upright with no drama.
- Scale hood — 160 plates, each about 11 × 11 mm and roughly a millimetre thick. Fine on SLS, fiddly on FDM at a 0.4 mm nozzle, excellent on resin.
- EL-wire runs — 3.4 mm swept tubes tracing the armour seams. They are the small-feature risk on any machine, and they are the first thing to drop from a first test print.
- Crest antenna and status strip — millimetre-scale detail (17 × 14 × 3 mm and 26 × 3.5 × 4 mm). Resin or nothing, realistically.
Before you start a long print
Parts overlap rather than boolean-union — they are separate solids, not a single watertight body, so do not expect a boolean-heavy workflow to be free.
Mesh integrity — measured, not assumed
This page used to tell you the geometry was "closed by construction". Then a validator got written, and 11 of the 30 parts turned out not to be closed at all. All 11 have since been repaired. Every part now passes, and you do not have to take that on trust — the check ships with the files:
node cli.mjs --validate
Three separate causes, all now fixed. The lathe primitive wound its faces inward while the cylinder primitive wound them outward, so every closed part built with it came out inside-out — that alone was seven of the eleven. Several parts were open profiles or zero-thickness surfaces that could not be printed as solids at all. And the shell and the cup picked their aperture-wall winding with a geometric guess that failed on tangential segments; that is now decided topologically instead.
You should still glance at your slicer's preview before an eight-hour print. Watertight is not the same as sensible — the parts still overlap rather than boolean-union, which is by design, and nothing here has been printed and measured yet.
The count above is what the validator reports for the current release. If it ever disagrees with what --validate prints for your download, trust the validator, not this page.
The visor is not on this list because it is not a printed part. That one is cut from sheet — see finishing and assembly.
After the printer stops
What follows is the summary. The full stage-by-stage build — tools, consumables, assembly order, strap fitting, care and troubleshooting, with a checklist that remembers where you stopped — lives on the assembly walkthrough.
What you source, not print
visor_lens ships as a solid mesh. It is not a part to print. Cut it from polycarbonate sheet: the lens is modelled at 2.2 mm over a rounded-hexagon aperture of half-extents 56.5 × 29.2 mm, and that edge curves in three dimensions, so a flat cut needs heat-forming to seat. Polycarbonate, not acrylic — one deforms, the other cracks, and your eyes are behind it.
visor_gasket is a 4.8 mm silicone tube seated 1.2 mm behind the shell surface: print it soft, or substitute 4.8 mm cord. Strap anchors sit at 16°, 164°, 206° and 334°, each a 26 × 12 mm loop swept at 2.7 mm, leaving a clear slot near 20 × 6.6 mm. EL wire at 2–3 mm for the seam runs. Fasteners you supply entirely — no bosses, no threads, no snap features anywhere in the geometry, and parts overlap rather than boolean-union, so every mating face is interference by construction. Plan on adhesive, and on sanding faces back until they seat.
Order of assembly
The exploded view is the assembly drawing. shell_outer, vent_slats, el_wire and dragon_scales do not move in it — they are shell surface and never separate. Shell first, finished and painted. Then the visor: gasket into the aperture, lens into the gasket, while you can still reach it from behind. Then the chin stack outward in reverse airflow order — canister_collar, pzt_blower_stack, uvc_reactor_housing, pzt_capsid_ring, filter_cartridge, pzt_coalescer, then intake_grille as the cap. Then the interior: oronasal_cup before seal_lip and the pzt_seal_sensor pucks. Galea last, onto finished paint. Anchors and webbing close it out.
Surface prep and finish
SLS PA12 arrives matt and slightly porous: bead-blast, then filler-prime for anything above satin. The 2.6 mm wall gives room to sand FDM layer lines hard. Mask every mating face before you spray — there is no clearance to give back.
A Shader Lab spec code is a colour and finish reference, not a printing instruction. It swaps a material, never geometry, and only shell_polymer, bronze and cartridge_alloy accept one. Order PM1-HEXPLATE-85 and no hex plates appear in your STL. You get a colour and a sheen: shell #dcd6c9 at roughness 0.58, bronze #9c7c46 at 0.34. Roughness is a PBR parameter, not a gloss unit — read 0.58 as satin, 0.34 as semi-gloss, and match on a spray-out card, not a screen.
Horns, pouch cells, PV arrays, LED arrays and PZT rings are sculpt, not electronics. They print as solids: no cell cavity, no wire route, no emitter seat. uv_status_band is a status indicator rather than a window. Nothing in the download is a working assembly.
Never install a UV-C emitter. That constraint is not
negotiable at any price. UV-C is a serious eye and skin hazard. The reactor is drawn
fully enclosed with no line of sight to the wearer, and that is the reason. If you light the
piece, keep the visor aperture edges and the design's line-of-sight rules intact, and use EL
wire or visible LEDs only. No electronics are included or supported.
PulseMask is a design study sold as wearable art. It is not a respirator, not PPE and not a
medical device. It is untested to NIOSH 42 CFR 84, EN 136/143 and ISO 16900, it provides no
respiratory protection whatsoever, and it must never be relied on as protective equipment. Do
not wear it as protection.
Stuck on something this page does not cover? Write to build@aureliusdynamic.com — questions that come up twice end up here. Ready to order, or want the full terms first? The pricing page has both.