PulseMask Pulse Lab · Aurelius Dynamic
Prototype · work in progress
Artwork PulseMask is a design study sold as wearable art — a decorative prop. It is not a respirator, not PPE, not a medical device, and it provides no protection of any kind. Full scope statement
Guide · print & fit

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.

Read this first

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.

01 · In the download

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.

Format
Binary STL in millimetres, ready to slice. OBJ + MTL and GLB export from the generator too.
STL · mm
Parts in a default build
Shell, visor frame and gasket, seal bead, inner oronasal cup, canister stack, exhale valves, strap anchors, and the Galea layer if your tier includes it
30 named meshes
Mesh density
At default tessellation. The shell carries most of it; hardware parts are lathed at low segment counts on purpose
81.2k triangles
Default face envelope
Bizygomatic width × nasion-to-menton height for the 63 mm reference IPD. Your Photo-Fit is generated at your own numbers
140 × 122 mm
Seal rim path
Perimeter length of the sealing bead — useful if you are cutting a foam or silicone facing for comfort
548 mm
Shell mass, printed
Solid volume of the outer shell at PA12 density. Your figure moves with wall thickness and print process
49 g · 48.3 cm³

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.

02 · Shooting the portrait

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

03 · Printing it

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:

Shell
The one part that has to come out right. Largest single printed piece of the core mask
141 × 198 × 56 mm
Whole assembly, Galea included
Everything except the face form, in its assembled position — the envelope you would need to print it as one impossible block
189 × 249 × 174 mm
Face-form bust
Display and test-fit piece, included with Photo-Fit. The tallest thing in the set
161 × 239 × 67 mm
Solar horn, one side
Swept and curving, so its bounding box is mostly air — lay it diagonally
185 × 95 × 102 mm

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:

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

Parts fully watertight
Closed, correctly wound, no duplicate or non-manifold edges. Verified by the validator, not by eye — run it yourself with node cli.mjs --validate
30 of 30
Where it started
The day the validator was written, 11 parts failed — while this page still claimed the geometry was "closed by construction". Every one has since been repaired
19 of 30 · was

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.

04 · Finishing & 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.

Safety

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.