Free sculpting brushes for SculptForge, the free, open-source alternative to ZBrush, shared by the people who made them. Every brush here is public domain (CC0): use it in personal and commercial work, change it, bundle it with your own tools.
Install brushes from inside SculptForge: View > Community brushes, pick one, click Install. You can
also download any .sfbrush file from brushes/ and drag it onto the SculptForge window.
Browse the gallery with previews at https://islandmed.github.io/SculptForge/brushes.html.
A SculptForge brush is a small JSON recipe (.sfbrush): how the surface moves, the shape of the tip, a
surface pattern, stroke spacing and masking. It is data only, never code, so installing a brush from a
stranger is as safe as opening a text file. You design brushes in SculptForge's Brush Lab, by hand or by
describing them to the AI brush creator ("dry cracked mud", "a palette knife that drags clay").
{
"name": "Snake Scales",
"description": "Tight rows of small, smooth scales for snakes, lizards and fish.",
"direction": "normal", "depth": 0.35, "pattern": "scales", "patternScale": 0.18, "patternAmount": 1,
"hardness": 0.55, "spacing": 0.2,
"author": "SculptForge",
"tags": ["creature", "scales", "texture"],
"format": "sfbrush", "version": 1
}Parameters you leave out take neutral defaults. The full list, with ranges, is in SculptForge's brush guide.
-
Save it. In Brush Lab, select your brush and click Save .sfbrush.
-
Add the gallery fields. Open the file in a text editor and add
"author"(your name or handle) and"tags"(1-6 lowercase words, e.g.["skin", "creature", "texture"]). Give it a one-sentence"description"that says what it is for. -
Name the file after the brush, lowercase with dashes: Cracked Earth →
brushes/cracked-earth.sfbrush. -
Render the preview with SculptForge (a sphere with three strokes, so every preview matches):
git clone https://github.com/islandmed/SculptForge # once, for the scripts python3 SculptForge/tools/brush-gallery/render_previews.py brushes/cracked-earth.sfbrush --out previewsIt needs the SculptForge app on your
PATH(or--app /path/to/sculptforge). This writespreviews/cracked-earth.png(512 x 384). -
Open a pull request adding just those two files. A check runs SculptForge on your brush and tells you if anything needs fixing. After it is merged, the gallery index updates itself and the brush shows up in everyone's Community brushes window.
Can't render the preview? Open the pull request anyway and say so; a maintainer will render it for you.
- Data only. A brush is one
.sfbrushfile with recipe parameters and the gallery fieldsname,description,author,tags,format,version. No other keys, no scripts, no links, no images inside it. Values must be in range (the check tells you if SculptForge would clamp anything). - One brush per file, one name per brush. Names are unique in the gallery (2-4 words an artist would recognise). The file name is the name in lowercase with dashes.
- Your own work, shared as CC0. By opening a pull request you confirm you made the brush and dedicate it to the public domain under CC0 1.0. Don't submit brushes copied from paid packs.
- Useful and distinct. Improvements to an existing brush are welcome as an edit to its file; near-copies of a brush that is already here will be declined.
- Be kind. Names, descriptions and tags follow SculptForge's code of conduct.
Pull requests may only change files in brushes/ and previews/; index.json is generated.
index.json is what the app reads. It is rebuilt on every push to main by
publish.yml using build_index.py from the SculptForge repository, which
round-trips every brush through sculptforge-cli, checks the preview and records its SHA-256 (the app
refuses a download whose hash does not match). To rebuild by hand:
python3 SculptForge/tools/brush-gallery/build_index.py . # validate + write index.json
python3 SculptForge/tools/brush-gallery/render_previews.py brushes --out previews --changedThe index format is documented in docs/brushes.md.