Ravitz Violin

Home page for Ravitz Violin



Notes

Design update - 2025-12-04. 2mm rib height drop button to neck.

Design update - 2025-11-11. Simplified soundpost and bridge platform.

Design update - 2025-10-23. Strengthened neck.

Design update - 2025-10-15. Simplified.

This page is for documentation of my printed violin and distribution of the files.

contact - caryravitz_at_gmail.com (replace _at_ with @)

www.ravitz.us

Last modified 6:03 PM, 4 Dec 2025 - File size 35K - Count 1144 - sitemap - robots


A Printed Violin

assembled

violin1     violin2     violin3
Top

Introduction

This is a personal engineering project. I started it in Feb 2025. Numerous structural and sound issues extended the project by months. As of August 2025, I have a working model that is, I think structurally stable and sounds reasonable. I will update this page when or if I make improvments.

This web page was assembled quickly and likely has many mistakes.

The design was done in Lubuntu Linux in OpenSCAD with some supplemental Python. Printing was done initially with a Creality Ender V3 KE using PLA filament and later switched to an Elegoo Centauri Carbon. I use Creality Hyper ABS filament. STL files were generated by OpenSCAD and Gcode was generated by Prusa Slicer, all done via Bash script - make.sh .

I have included OpenSCAD code here with formulas and derivations for the body outline, plate arches, f-hole shape, neck post curves, and scooped fingerboard. These are all parametrically designed, not scanned.

These traditional violin fittings are used - bridge, tailpiece, pegs, chinrest. I use Wittner's geared pegs, 8.6mm, fine tuner tailpiece, and original side chinrest. A traditional nut and fingerboard can be used, but I have included printed versions of these pieces. The button and saddle are integrated into the body.

Creality Hyper ABS filament is used along with a number of carbon fiber rods of various sizes and shapes.

Top

Files

Everything

All the files, zipped

Documentation

Python that generates one arch heightmap
Bash that generates arch heightmaps
top arch at 2mm xy resolution
top arch at 8mm xy resolution
bottom arch at 2mm xy resolution
bottom arch at 8mm xy resolution
bottom arch at 8mm xy resolution
SCAD that generates the body design image
SCAD carbon fiber layout
SCAD with the f-hole module
SCAD assembled violin

STL nut
STL fingerboard
STL body
STL neck
 
Design and print

Bash script for generating STL and GCODE
Prusa Slicer configuration for Hyper ABS, Centauri Carbon
OpenSCAD file for the body
OpenSCAD file for the nutholder
OpenSCAD file for the soundpost brackets
OpenSCAD file for the neck
OpenSCAD file for the fingerboard
OpenSCAD file for the nut
Bash script to make arch*.hm surface maps
Python arch surface generator
top arch 2mm xy resolution
top arch 8mm xy resolution
top plate inside arch 2mm xy resolution
top plate inside arch 8mm xy resolution
bottom arch 2mm xy resolution
bottom arch 8mm xy resolution
bottom plate inside arch 2mm xy resolution
bottom plate inside arch 8mm xy resolution

print body small bout
print nut holder (required with body small bout)
print nut holder with extra nut clearance
print body large bout, bridge on body
print body large bout, bridge on rod
print 5mm soundpost brackets
print 6mm soundpost brackets
print direct bridge platform
print direct bridge platform +1mm
print neck for printed fingerboard
print neck for ebony fingerboard
print fingerboard
print nut with starter string grooves (resin printer)
print nut blank without string grooves
 
Top

Design Considerations

The cornerless design saves weight and prints more easily than a cornered design.

I made the mortise vertical instead of angled. And the heel is part of the neck instead of the body. This is simpler and I don't see any drawbacks.

I used ABS plastic. The Elegoo Centauri Carbon handles ABS (smooth side of the PEI print plate), sticking while printing and releasing after cooling. It saves about 50 grams compared to PLA and most other plastics. The violin is still way overweight - about 550 grams.

The pegbox is designed to print with the neck, be light, and open top and bottom for easier string installation. It has traditional peg holes that I use for Wittner geared pegs. I chose the 8.6mm diameter Wittner violin pegs to get more surface area. I think that the plastic doesn't grip the pegs as well as wood.

A 10mm tube truss runs from the front to near the end of the neck. It keeps the top plate from buckling and keeps the neck from lifting (which drops the fingerboard).

Four carbon fiber tubes run about 2/3 length of the body, top and bottom. I fully enclosed them to ensure good connection to the plate. These stiffen the plate and add resilience. The top plate gets a 4mm tube under the treble bridge foot and a 5mm tube to act as a bass bar. The bottom gets two 4mm tubes.

That leaves eight large areas of plastic. I added short 3mm carbon rods to increase stiffness and resilience.

The soundpost connects to the 2/3 length carbon fiber tubes. It slides (when not under string pressure) from directly behind the bridge up to about 5mm toward the tailpiece. This gives a good connection and adjustabilty (only along the length of the violin).

I used 6x3mm rectangular rods (or doubled 3x3mm) to reinforce the neck and pegbox.

A 46x10x1mm or 46x10x2mm bar is used under the bridge. This does not flex like the plastic so it keeps a good bridge to body connection.

Top

Body Design

plates

My first goal was to accurately model a typical violin body, but without corners. The image above shows the steps - the circles that define the top view of a body, model the outline, model a solid with the shape of the outline, graphs showing the arch shape, model of an arch, model of the entire body. This entire image is generated in 3D via doc.plate.scad. You can also modify the arch parameters and run doc.makearch.sh to generate the height maps for them. Documentation for the outline parameters and the derivation of calculated values (need to tie the parameters together) is in the OpenSCAD file. It is much easier to generate the arch height map in a programming language rather than in OpenSCAD. I used Python doc.arch.py. The arches are modeled like a boat with a single centerline arch, along the length of the body, and longitudinal arches stepped along the centerline arch. Documentation is in the Python file.

If you want to investigate arch graduation, you can use different parameters for the top and bottom of a plate. By using a different arch height you can get an increased or decreased plate thickness in the middle versus the edge. But I concluded that you want a minimum of plastic, so my plates are 1.2mm thick and I used 3mm carbon fiber rods to increase the stiffness.

The bridge mount - decouples the bridge from the body and lets it couple directly to the carbon reinforcement rods. It is composed of a 46x10x1mm carbon bar and a printed platform, glued together.

I included the bridge on a flat carbon bar on the body design, which is simpler.

Top

Carbon Fiber Reinforcement

carbon
SCAD of diagram - doc.carbon.scad.
Top

The Soundpost

The soundpost is a 5x3mm or 6x4mm carbon tube, about 39mm long. Each end uses a bracket (top is short, bottom is long) that couple the soundpost to the reinforcement rods and keeps the soundpost from falling when it is not compressed by string tension. You need a violin soundpost adjusting tool to position the soundpost after a small initial string forces is applied. The soundpost cannot be adjusted across the violin - only along the length.

Top

The Neck

carbon

The neck has two issues. First is the smooth contour between the vertical posts and the horizontal posts. If the two posts were the same diameter and aspect ratio, this would be easy - just the interior of a donut. They aren't. The code in doc.neck.scad has a routine that builds a donut interior starting at one diameter and aspect ratio and ending with another diameter and aspect ratio. And a third, intermediate, diameter and aspect ratio improved the contour. The other issue is stiffness. There is a large force from string tension that will bend the neck up, pushing the fingerboard down. If a hard fingerboard is tightly connected to the neck, this can handle the load. But the fingerboard doesn't extend into the pegbox so the neck and pegbox must have a good connection.

Top

The Pegbox

The pegbox is part of the neck here. It bears no resemblance to a traditional violin pegbox. It is designed to print well, accept carbon rod reinforcement, be light, and open top and bottom for easier string installation. The peg holes are undersized and you will need to ream them with a standard violin peg hole reamer.

Top

The Nut

This can be printed without string grooves, which works well on an FDM printer. It can also be printed with starter grooves on a resin printer.

Top

The F-holes

f-hole

There is no standard for f-holes that I can find, just pictures. I wrote an OpenSCAD module that creates a 2D f-hole design. There are eight rectangles that define the overall shape (just the upper edge and one vertical edge of the rectangles are shown here). For each rectangle, a 90 degree arc is generated that determines the outline. The arc is a superellipse with a parametric exponent - this defines the shape within the rectangle while enforcing endpoint conditions. The width to height ratio is calculated to fit the arc in the rectangle.

The "forprinting" parameter adds small supports and flats, internal to the design. You can leave these or carve them out after printing. An internet search suggested that vibration of the tabs contributes very little to the sound, so there may be no point to removing the supports except appearance.

In the body design, the edges are reinforced by adding a 1.2mm layer in the shape of the f-hole enlarged (offset in OpenSCAD) by 3mm, stepped down to 1.8mm to give a 45 degree ramp.

The f-hole code is in doc.fhole.scad.

Top

The Fingerboard

The nice thing about an ebony fingerboard is that it is hard and rigid. But it is heavy and not readily available in finished form.

The nice thing about a printed fingerboard is that you can print it. It is designed to allow the main truss to extend almost all the way through the neck. And with carbon fiber tube reinforcement it is pretty rigid and about 15 grams lighter than ebony. But the surface is soft.

If you want to try my fingerboard, it is in fingerboard.scad. It is nominally scooped at .75mm under the G string and .25 under the E string. There are two full length 5.2mm octagonal tubes(5.2/cos(22.5) for the OpenSCAD diameter). Use 5mm carbon tubes (or rods). These must be snug. If the tubes won't go it, try sanding around their surface.

Always check the gcode preview before printing my fingerboard. It does not fit a 256x256mm build plate unless rotated (45 degrees).

ABS and any other unfilled plastic has no hope for a surface that lasts like ebony. I have not tried carbon fiber filled filament and warnings that these may irritate your skin have kept me away from it. And the warnings suggest that sanding the surface may make this issue worse.

Top

Building the Violin

I am not documenting step by step instructions. And some of these instructions may be out of order - read it completely before starting. If you are not mechanically inclined or not familiar with 3D printing or not familiar with violins, do not attempt this project.

The reinforcement rods will hold everything together so the screws do not need to be put in until you are ready to tune the violin. Leave them out so that you can assemble and disassemble as needed. The screws should be tightened before tightening the strings or the string will pull apart the bottom connections.

There are seven pieces to print

The steps

If you are using my make.sh, the script sets various parameters used for the final model. Body0, bodyd2, bodyb2, neckebony, spfoot5, spfoot6, and nutblank are not actually files, they are both generated from other files.

I use Creality Hyper ABS. ABS is light and tough. It requires an enclosed print volume. It sticks well to a PEI plate while printing and frees its grip after everything has cooled. Creality Hyper ABS gives significantly better bridges and 45 degree angles than plain ABS. I limit the print speed to 75mm/sec. At 200 mm/sec I got unacceptable bulging of the body prints - hard to see but it changes the soundpost length and carbon rod angles, ruining the connection between upper and lower halves.

Short 3mm carbon rods (90mmx6, 120mmx2) reinforce the plates. They are inserted in plate tubes. You can put a drop of glue near the end of each rod but I don't think that this is necessary. The 120s go in the large bout, back plate. Do these first so that you can't accidentally put a 90 in the 120 cavity.

Carbon fiber tubes are used to reinforce and add resilience to the plates - 3 4x2x240, 1 5x3x240mm. The tubes should be near parallel to each other, looking from the side when inserted in either body piece. If they aren't, you likely have bulging in the print.

After cutting the rods, insert them one at a time to ensure that none of them hold the body halves apart. They don't need to completely fill the length of the cavity since they are only to hold against bending.

When assembling the two halves, if you are having trouble getting all four rods in their respective positions, and they are not too far from parallel - insert all four in one half, pull one out a little and insert it in the other half, pull another out a little and insert it in the other half, and so on for the others.

soundpost

Before you put the body halves together cut a soundpost - 5x3mm or 6x4mm carbon fiber tube to 39mm. Print a pair of brackets and smooth the connection grooves with 4mm and 5mm round files. Clean/carve the soundpost insertion cavities so that the soundpost inserts completely (2.5mm). Reduce the soundpost length to get a 40mm end to end length. Glue thoroughly and attach one bracket. Then glue the second bracket, making sure that it is parallel to the first. The two brackets should point in exactly the same direction (the assembly should lay flat on table).

When you are ready to assemble the body halves, hold the soundpost in place and put in the treble side reinforcement tubes. The soundpost will not be tight. Assemble the body and insert the bridge. With low tension on the A and E strings, you can slide the soundpost to your preference with a soundpost adjuster. My experience is that it is best to put the soundpost about 1mm from the bridge.

If you choose to use the bridge on rod setup,first you will have to cut away the print supports that span the bridge cutout on the body. Cut a 10x1x46mm carbon bar. Print a bridge platform (bridge.scad or bridge.stl). Use round 4mm and 5mm files to smooth grooves that meet the reinforcement rods. Remove just enough plastic to smooth the grooves. Glue the bridge platform to the carbon bar. This is not easy because the glue sets so quickly. The bridge mount jig helps hold the pieces in place for gluing, but be sure the none of the glue gets on the jig. Or (I haven't tried this yet) try Loctite Super Glue Extra Time Control, which claims to give a little extra time to align parts before it sets.

Bridget adds 1 mm to the bridge platform. You can also use 2mm carbon or and extra carbon layer to increase the thickness.

bridgemount

If you choose to use the bridge on body setup, cut a 10x2x46mm carbon bar. Scrape the bridge flat area until it is flat. Glue the bar to the body. This provides a rigid flat area for the bridge which is needed so that the bridge support does not flex and compromise the bridge to body connection.

All nuts are m3 button head with 2.5mm hex socket. Use stainless steel square nuts. Square nuts cut from sheet, usually plate steel I think, have very poor tolerances on size and hole centering. All bolts except the neck attach bolts are 14mm. 5 to connect the body halves, 1 for the button (no nut), and 1 to attach the nut holder for the neck nuts. Do not use washers. If the nuts aren't reasonably tight in the nut slots, add a bit of superglue - you do not want a nut falling out after getting five bolts in place.

Do not forget the button bolt. Use a 14mm bolt through the button - screw it into the hole (no nut). If it is not tight, use a drop of superglue from the back. This screw ensures that the button will not yield to stress from the tailgut.

The neck attach bolt is 22mm and uses a standard washer.

Use standard M3 square nuts. Do NOT use hex nuts. The plastic thinks these are circular and will not hold against tightening the bolt.

3 pins (10x1.5mm stainless steel dowel pins) locate the included fingerboard nut - 10x1.5mm stainless steel dowel pins. You will have to grind the string grooves yourself because the printer cannot handle the job (assuming you are not using a resin printer). If you use an ebony nut, just glue it.

Prepare a truss rod - 10x8mm 461 mm for my fingerboard or 441 for an ebony fingerboard. For an ebony fingerboard, grind a flat to reduce the maximum height to clear the fingerboard.

Mark 340mm from the end. Insert the truss rod into the body and be certain that it is 340mm deep. Trim the length so that the neck seats against the mortise with no slop. Do not overshorten it - the total length holds the truss rod in place and the truss rod must hold against the body crumpling.

After setting the length, sand a short length of 8x6mm tube until it slides into the truss tube. Cut two short pieces (10mm), each with one clean straight end. Glue these flush on each end of the truss tube. These increase the contact area with the body to reduce any localized compression of the plastic, and associated dropping of the fingerboard. I'm not sure if this is a significant effect.

Use a standard violin peg ream on the peg holes. I use Wittner 8.6mm geared pegs. They are a press fit. The plastic reams nicely so regular pegs might work.

Print a nutholder and insert one nut. (There are slots for two nuts but I switched to using just one.) Nutholderp (plus) gives .2mm more thickness to the nut cavity.) If they are not tight add a bit of superglue. After body assembly but without the neck, if the nut falls out, you will have to take the body apart to get a new nut in. The center hole lets you bolt (14mm) this assembly into the small body half. You will need a reasonably long 2mm hex driver.

You can print a nut blank and lock it in place with two dowel pins - 10x1.5mm. Or use traditional nut.

For my printed fingerboard, you will need to smooth the top surface. I use a .5mm thick 6 inch steel ruler as a scraper (this is very effective) and then sandpaper. 3 dowel pins help locate the fingerboard. Also remove the print support from the the bottom.

When gluing the fingerboard to the neck, for either fingerboard, insert a 10x8mm tubein the neck to enforce straightness, then glue both ends and the middle.

I use a Wittner original side mounted chin rest. It fits easily onto the body.

Top

My SCAD files

The body.scad file is complex. Rendering for printing takes me 45 minutes. Default previews take long enough to be very annoying. When I work with it, I first go through and delete or comment out any piece that is not needed for what I am working on and save it to a temporary file. After making changes, I copy the new code back into the original file.

The basic structure of the file -

Make.sh is a Bash script that renders the SCAD files into STL files and uses Prusa to generate Gcode. The script sets OpensSCAD constants in the SCAD files using SED before rendering. To generate all of the parts -

Top

Printing Issues

My Elegoo Centauri Carbon, apparently has no protection from gcode that accesses areas outside the printable area. When I forgot to rotate my fingerboard print to fit, the result was a badly broken printer. Fortunately only $300 - somewhat less than I have spent on filament, carbon fiber rods, and violin addons (pegs, chinrest, bridge, strings).

Stringers are a big problem, much less with ABS than PLA. Adjusting retraction, nozzle temperature helped a bit.

With ABS at 200mm/s, the body bulges, apparently due to lack of time for the printed plastic to fully harden. This causes the plate reinforcing rods to tilt inward and assembling the body flexes the (already distorted) shape. I set the print speed to 75mm/s and it does pretty well, but adds a couple of hours to the print time.

After carefully designing the upper end of the body to not need supports, I had a major problem of spots in the print rising above the current print layer. The nozzle would hit that spot and knock over the print. I tried lifting the nozzle during travel (3mm), but it didn't fix the problem. The solution was to design so that each layer has no convex corners. This gets rid of the raised spots. And while I was at it, the software handles bridging best with just rectanglular bridges.

Top

Some Lessons Learned

I think it will be impossible to build a printed plastic violin that weighs less than 500 grams. So it will have to sound incredible to be preferred over wood. A violin made of wood can be 300 grams or a bit less. And getting below 550 grams with anything other than ABS or ASA cannot be achieved.

If we learn to print carbon fiber at a very high carbon to plastic ratio, that may change.

Thermoplastics are damping compared to wood. Violins use tone wood, wood that is elastic, resilient, strong. If the material absorbs vibration, it damps the sound. The best printed design appears (to me) to be thin walls, reinforced with carbon fiber structures (which is elastic, resilient, and strong).

Top

The Result

I don't know - my hearing has become terrible due to high frequency hearing loss and tinnitus. I don't trust any evaluation that I make. But I'm pretty happy with it.

I learned a few techniques with OpenSCAD that are very useful. Perhaps my documentation of various violin shapes will be useful to others - body outline, arch surfaces, f-hole shape, neck shape, fingerboard scoop.