Model
📦

Drop STL, 3MF, OBJ or .primed3d here or click to browse

Manual rotation

Click a face on the model to orient it downward, or drag a slider to rotate around an axis.

Dimensions (mm)
mm
mm
mm
%
☕ Buy me a coffee 💎 Get Beta Access
Primed3D

Paint any colour onto a 3D model and export as a dithered multi-material 3MF for FDM printing — or as solid colours for normal multi-colour printing.

📐 Step 1 — Load & Orient

  1. Drag an STL, 3MF, or OBJ file onto the viewport, or click the upload area. For OBJ files with external textures or MTL materials, drop all related files together (e.g. .obj + .mtl + texture .png) in a single drag.
  2. Use the Orient button to click a face that should sit flat on the build plate.
  3. Use Scale to resize the model if needed. Apply photo projection before scaling for best results.

🎨 Step 2 — Paint

  1. Pick a colour from the colour picker.
  2. Use Brush, Sphere, Fill, Gradient, or Photo to paint your model.
  3. Ctrl+Z / Ctrl+Y to undo/redo. Set a Base Colour for unpainted faces.

⚙️ Step 3 — Process & Export

  1. Choose a Filament ModeWKCMY gives the best colour range (5 filaments).
  2. Click Process to generate the 3MF.
  3. Click the Download button in the viewport.

🖨️ Step 4 — Slicer Settings (for dithered export)

Import into Bambu Studio or OrcaSlicer. Use these settings:

0.08 mm(or 0.06mm if exported at high quality)
0.20 mm(or 0.16mm if issues)

Assign filament slots to match your export mode (Cyan, Magenta, Yellow, White, Black).

Brush

Left-click and drag to paint visible faces. The BFS brush spreads along the surface within the radius, staying on the same surface (won't bleed around corners). Adjust radius with the slider.

Sphere Brush

Paints all faces within a 3D sphere radius, including through the model. Useful for painting hollow or complex geometry. Adjust radius with the slider.

Fill

Connected mode: flood-fills all connected faces of the same colour, expanding from the face you click outwards across shared edges. Angle Limit mode: fills faces within an angle threshold from the start face — great for painting a single flat surface that meets a sharp edge.

In Connected mode, the Colour Tolerance slider controls how strict the colour match needs to be. At 0% only faces with the exact same colour are filled — useful for painted hand-drawn boundaries. Higher values include similar shades, which is what you want when filling regions of a textured import or photo-projected mesh where every face has a slightly different shaded value. The same tolerance also applies in the Gradient and Photo tools' Fill sub-tools.

Colour Picker (Eyedropper)

Click any face to sample its colour into the active paint colour.

Base Colour

Sets the colour for all unpainted faces. "Reset all to base" clears all painting.

Whole Model mode

  1. Select gradient colours (From / To) using the colour swatches.
  2. Set Direction using the Rotation and Pitch sliders. The purple arrow in the viewport shows the direction.
  3. Use the Centre slider to shift where the mid-point of the gradient sits.
  4. Adjust Steps to control how many discrete colour bands the gradient uses.
  5. Click Apply Gradient.

Selection mode

  1. Switch to Selection mode in the gradient panel.
  2. Use the Brush or Fill sub-tool to select the faces you want to gradient. The Fill sub-tool uses the same Connected/Angle Limit modes and Colour Tolerance slider as the main Fill tool.
  3. Click on the model to set your Start point, then click again for the End point.
  4. Click Apply Gradient.

The gradient tool automatically switches back to the Brush tool after applying.

How to use

  1. Select the Photo tool from the tool panel.
  2. Click Load Photo and choose a JPG or PNG. Transparent PNG backgrounds are respected.
  3. Position, resize, and rotate the photo overlay in the viewport so it covers the area you want to paint.
  4. Choose Whole Model (paints all visible faces) or Selection mode (only selected faces).
  5. In Selection mode, use the Brush or Fill sub-tool to select the hull faces you want to paint first. The Fill sub-tool uses the same Connected/Angle Limit modes and the same Colour Tolerance slider as the main Fill tool.
  6. Click Apply. Filament mode auto-switches to WKCMY for best results with photos.

⚠️ Limitations

Curved surfaces work best. The photo tool maps colours onto individual triangles using a camera projection. On a model with many small triangles (like a curved hull), the result looks excellent. On a perfectly flat surface with very few triangles — like a basic cube face with only 2 triangles — the resolution is limited to a few samples per face.

Apply photo before scaling. If you scale the model after applying the photo, the per-layer export colours will fall back to the face average colour (still correct, but without the fine per-layer variation).

Use WKCMY. Photos contain neutral greys, whites, and blacks that CMY alone can't reproduce well. WKCMY uses white and black filaments to handle these tones accurately.

Bright, high-contrast photos print best. The dithering works on colour differences — a washed-out or grey photo will print as grey.

STL

Standard 3D printing format. Binary and ASCII both supported. STL files carry no colour data — you paint the model inside Primed3D. Use the Increase Resolution tool to give yourself a finer canvas for painting and photo projection.

3MF (import)

Imports geometry plus colour data from Bambu Studio paint assignments, base material colours, and per-filament colour groups. Pre-painted models from Bambu Studio import with their colours intact.

OBJ (import)

Imports geometry with colour data from these sources, in priority order:

  1. Vertex colours (v x y z r g b) — used by 3D scanners (Polycam, RealityScan), AI model generators (Luma, Meshy), and point-cloud tools. Drop the .obj file alone.
  2. UV texture map — used by photogrammetry tools and most 3D modelling software. Drop the .obj, .mtl, and texture image (.png / .jpg) all together in a single drag. Or just .obj + image — Primed3D will auto-create a default material if no .mtl is supplied.
  3. MTL solid diffuse colour (Kd) — used by CAD and modelling tools. Drop the .obj and .mtl together. Each material's diffuse colour is assigned to the faces that use it.

For UV-textured imports, use Increase Resolution for sharper colour boundaries and finer detail in the dithered export, and Simplify Colours if the texture has baked-in lighting that produces stripey output. The View Mode toggle lets you preview how the texture will translate into per-face colours before processing.

3MF (export)

All export modes produce a .3mf file. See the Export Modes section for details on dithered vs solid output.

Increase Resolution

Splits each triangle into smaller children — Light gives you 4× the faces, Medium 16×, Aggressive 64×, Extreme 256×. Use it to:

  1. Sharpen colour boundaries on textured imports. Each child triangle re-samples the original texture at higher resolution, so a single large face that straddled a red/white boundary becomes many small faces, each cleanly on one side or the other.
  2. Pick up fine detail from textures — eyes, fur, fabric weave, lettering. Detail that would otherwise be averaged into one solid colour per face becomes visible in the export.
  3. Get a finer canvas for painting and photo projection on STLs and other low-poly models. Paint strokes and photo projections look smoother on a denser mesh.

Apply this before painting or scaling. Cannot be undone — to revert, reload the model. Pick the lightest level that gives the result you want; higher levels are slower to process and produce larger 3MF files.

Whole Model vs Selection. The "Apply To" toggle lets you pick. Whole Model subdivides everything. Selection lets you brush or fill an area on the model and subdivide only those faces — useful for adding density just where you need it (a face on a figurine, a logo on a body panel, a detailed corner of a larger flat mesh) without inflating the file size of the whole model. Selected faces show with an orange striped highlight. The selection persists if you switch to a paint tool — click "Selection" in this panel again to add to it.

About boundary stitching. When only part of the mesh is subdivided, the boundary between subdivided and unsubdivided regions would normally develop T-junctions — small mesh defects where one side of an edge has new midpoint vertices that the other doesn't. These cause cracks in render and can produce holes in printed layers. Primed3D handles this automatically by fan-splitting the unsubdivided faces along the boundary so they connect cleanly to the new vertices. You'll see the total face count is slightly higher than just (selection × factor) — the difference is the stitch triangles in this transition ring.

Simplify Colours

Reduces the model's colours to a chosen number using k-means clustering. Available when the imported file had its own colours (textured/vertex-coloured OBJ, painted 3MF) or after you've applied a photo projection.

Most useful for textures and photos with baked-in lighting and shading (AI scans, Blender bakes, photogrammetry, photo projections from real images). Without simplification, every face has a slightly different "shaded white" or "shaded red", and each one dithers to a slightly different filament mix — adjacent faces stack into visible horizontal stripes on the print. After simplification, all the similar shades collapse into a few clean cluster centres that dither identically.

Lower numbers give cleaner dithered prints. Try 4 or 8 for shaded scans; 16-32 for richer textures where you want more distinct colour regions; 64-128 if you really need to preserve the gradient nuance. Run before processing.

View Mode

Switches between two displays of the same model:

  1. Imported colours — for UV-textured OBJ imports, the smooth photo-like UV-mapped texture as it looked on import. For other coloured imports (vertex-coloured OBJ, painted 3MF) and STLs you've painted from scratch, the per-face colours from the source.
  2. Pre-process colours — what each face has been encoded as, ready for the dithered export. This is the actual source the export uses.

For UV-textured imports, the difference can be dramatic — the imported view is per-pixel smooth, the pre-process view shows the chunky per-face encoding that drives the dither. Use this to preview how the texture will translate into per-face encoding before processing. If the pre-process view looks too noisy or has bleed at colour boundaries, run Increase Resolution first, then Simplify Colours.

🧼 Colour Cleaners

An expandable section in Process & Export that groups three speckle-reducing tools, all aimed at the same problem from different angles: solid regions of the print should look uniform, but the dither algorithm — being statistically faithful — produces a spray of tiny mixed-filament noise even where the colour is meant to be flat. The cleaners suppress that noise. They only show up when the active filament mode includes White or Black (WCMY, KCMY, or WKCMY) since those are the filaments getting cleaned.

Clean white · Clean black

Each is an independent checkbox with a severity slider (Light / Standard / Aggressive). Clean white snaps light, low-saturation faces to pure white; Clean black does the same for dark, low-saturation faces toward pure black. Splitting them lets you tune each independently — useful when one side of the model has cleaner colour data than the other.

How severity works:

  1. Light — only faces that are already essentially pure get snapped. Safest; preserves intentional off-white tints and near-blacks.
  2. Standard — catches most baked-shading drift. Good default for textured imports and clean photo projections.
  3. Aggressive — catches even fairly tinted greys and light bleed at colour boundaries. Use this when neighbouring colours have leaked into the white/black regions of your model. Watch for over-snapping if you have intentionally peach-tinted whites or cool-tinted blacks.

Vivid colours

A separate checkbox in the same section. Targets the chromatic regions instead of the neutral ones — saturated reds, blues, greens, and so on. It does two things during export: scales down the White and Black contribution in proportion to how saturated the target colour is, and drops trace filament demands below 5% by redistributing them to the dominant filaments. The result is cleaner solid-colour regions with less stray-filament speckle.

The trade-off: the K (black) filament is what gives saturated colours their depth. Removing it makes a deep red look pinker — mathematically the recipe is more "correct" but the eye reads "less rich". Use Vivid when speckle is the bigger problem than depth (busy textures, photo projections of bright objects). Skip it when depth matters more than absolute cleanness (deep saturated reds against black, dark moody scenes).

Dithered export (CMY / WCMY / KCMY / WKCMY / 2-Filament)

The model is sliced into thin layers (0.08mm or 0.06mm — your choice in the Process & Export panel) and each layer slice is assigned a filament (Cyan, Magenta, Yellow, White, Black). The alternating filament lines optically mix to produce your painted colours. Requires specific slicer settings — match the layer height you picked at export, and assign filaments in the correct order.

CMY — 3 filaments, best for vibrant colours with a white printer base.
WCMY — 4 filaments, adds white for cleaner pastels and highlights.
KCMY — 4 filaments, adds black for richer darks.
WKCMY — 5 filaments, best overall accuracy.
2 Filaments — dual nozzle, dithers between two chosen colours.

Solid Colours — No Dithering ✦

Exports each painted face as a solid flat colour. This is NOT the dithered colour-blending export — it's for use with normal multi-colour FDM printing. Use this if you want to paint your model and print it on a multi-filament printer (like a Bambu AMS) using standard solid filament colours, without any CMY dithering. No special slicer settings required.

The Palette Size option reduces all painted colours to a fixed number using colour clustering (k-means). Set this to match the number of filament slots in your slicer — e.g. choose 8 colours for an 8-slot AMS. Colours are automatically merged toward their nearest neighbours so the most visually distinct colours are preserved.

Re-importing into Primed3D: The Solid Colours export also works as a project save format. Export as Solid (Full Spectrum), then re-import the resulting .3mf into Primed3D to continue editing — all your painted colours are preserved on the faces and can be further refined with the brush, gradient, or photo tools before re-exporting as a dithered CMY version.

Filament Colours

The 🎨 Filament Colours section in the ⚙️ Settings popup lets you set the actual hex codes of your filaments. This only affects how the slicer preview displays — the dithering ratios themselves are always computed using ideal CMY theory regardless of your specific filament brand.

A 3D Revolution Tool

3D Revolution

Terms of Use

About Primed3D

Primed3D is a free, open-source tool created and shared with the 3D printing community by Josh at 3D Revolution. It is provided as-is, free of charge, for personal and commercial use.

Your Privacy & Data

Everything happens in your browser. Primed3D runs entirely client-side — your STL files, painted models, and exported 3MF files are never uploaded to any server. No data leaves your device at any point. There are no accounts, no tracking, and no analytics. Your files stay yours.

Open Source

Primed3D is released as an open-source project. You are free to use, modify, and share it. If you redistribute or build upon it, please credit the original project and its creator.

No Warranty

This tool is provided without warranty of any kind, express or implied. The creator is not liable for any damages or issues arising from its use, including but not limited to failed prints, material waste, or printer issues. Use at your own discretion.

3D Printing Results

Print quality depends on many factors outside the control of this tool, including your printer, filament, slicer settings, and model geometry. The colour dithering is an approximation — results will vary between setups. The recommended slicer settings are a starting point, not a guarantee.

Third-Party Services

Primed3D itself does not connect to any external services. Optional links to YouTube and Buy Me a Coffee are provided for convenience and open in new tabs — they are governed by their own terms and privacy policies.

Primed3D — A 3D Revolution Tool

3D Revolution

Thanks for using Primed3D! 🎉

I hope you found it useful! Primed3D was created by Josh at 3D Revolution.

▶ Subscribe to 3D Revolution for tips, tutorials, and more tools.

If you'd like to say thanks or support the project, the best way is to become a channel member — or if you'd prefer, buy me a coffee ☕

Camera Views
No model loadedv0.9.5.1 · Terms of UseDark Mode

🎨 Blend Palette

Pick a pre-set blend ratio between any two of your filaments. Click a swatch to load it as the current blend brush. The label shows the filament indices and ratio.

⚙️ Settings

Load a .primed3d file you previously saved to pick up where you left off — the model, painting, selections, and settings will all be restored. To save your current project, use the Save Project button below the Process button. Files include a version stamp; loading a save from a different version of Primed3D will offer the option to launch the original version in a new tab.

Set the actual hex colours of your filaments. These are used during processing to accurately mix and assign colours, so the output matches what your printer will produce.

Primed3D

About Primed3D

A free, browser-based tool for painting any colour onto a 3D model and exporting it for full-colour FDM printing.

Primed3D imports STLs, 3MFs or OBJs with or without existing colour data, allows you to paint them with any colour or gradient you like, apply photos to them, and then convert those colours into dithered colour lines of Cyan, Magenta, Yellow, and optionally Black and/or White.

This allows you to 3D print virtually any colour with a fine degree of gradient and detail using just 3–5 filaments.

You can also export in solid colour mode allowing you to paint your models in Primed3D then print them in the conventional multi-colour method using a different filament for each colour on the model.

About me

My name is Josh and I run 3D Revolution, a YouTube channel about 3D printing, and maker tech. I built this tool with the aid of Claude with the goal of furthering innovation in 3D printing whilst using existing hardware.

If Primed3D has been useful to you, the best way to say thanks is to subscribe to 3D Revolution, become a channel member on YouTube, support me on Patreon, or you can Buy Me a Coffee.

Free & Open Source

Primed3D is free to use, free to modify, and free to share. The full source code is on GitHub. If you build on it or improve it, please credit the original.

Get Closed Beta

Get early access to new Primed3D features before they hit the public release. The closed beta is available to my Patreon supporters and YouTube channel members. Try features early, give feedback, and help shape what makes it into the next public release.

💎 Support me on Patreon & get Beta Access
Drop STL, 3MF, or OBJ file(s) here
⚠️
Processing...