3D Printed LP Record
I decided to try to recreate Amanda Ghassaei's 3d printed record from 2012 but created a simpler and more efficient system. It involves using Audacity (free) to simplify audio and then rendering it in Blender(free) using a custom script. I have a Bambu lab A1 printer with a 0.4 mm nozzle and wanted to test its capabilities with this project. The Blender script is built around my printers capabilities but could work for other printers too.
Disclaimer:
This is a 3D printed object, not pressed vinyl. It will sound lo-fi, scratchy, and quiet—like a wax cylinder from the 1900s. Use an older stylus if you have one, as the hard PLA plastic can wear down high-end needles over time. The project is quite difficult to do with many steps and can be very frustrating when it doesnt work. I myself attempted more than 4 times before achieving any recognisable sound.
Supplies
For this project you need to have the following applications which can be downloaded with the links added:
- Audacity https://www.audacityteam.org/download/
- Blender https://www.blender.org/download/
- 3D printing splicer (I use Bambu studio) https://bambulab.com/en/download/studio
You will also need access to a 3d printer if you wish to print the record and a record player to see the results.
Download Audacity, Bambu Studio and Blender
Download all of the softwares, I won't go into specifics about this as it varies by what OS you are using. It is quite easy and took me less than 10 minutes to do so on a Mac.
Find Your Song
Find your song online, I recommend using a database like the following listed below, then download it as a mp3 file to upload to audacity for the next step.
Legal & Supported Platforms (For Purchase or Free Use)
- Bandcamp: Great for indie, often offering high-quality downloads with purchases.
- iTunes/Apple Music & Amazon Music: Stores for buying MP3s and digital albums.
- Free Music Archive (FMA) & Pixabay: Royalty-free or Creative Commons music for projects, with clear licensing.
- SoundCloud: Many artists offer free downloads directly on their tracks.
- YouTube Audio Library
- Musopen: For public domain classical music.
For Large, Diverse Libraries (Often Peer-to-Peer)
- Soulseek: A popular choice for finding a vast range of music, including rare and independent tracks.
- Private Trackers (e.g., RED): Highly curated, high-quality sources, but difficult to join.
- Internet Archive
- International Music Score Library Project: Older music and public domain
Simplify, Alter and Export Audio in Audacity
First upload the song you choose into Audacity as an MP3, you should see it as one or two waveforms on top of each other. This along with some other things need to be fixed.
NOTE: You need Audacity in full screen to access certain functions so do so.
Convert to Mono
- In the top menu, click Tracks
- Select Mix
- Click Mix Stereo Down to Mono
You should now see one waveform, not two.
Why this matters:
2 waveforms cannot be represented in a single physical groove.
Remove Low Bass (Important for Stylus Tracking)
- Select the entire track
- Click within the waveform area
- Or press Cmd + A (Mac) / Ctrl + A (Windows)
- Go to Effect
- Choose High-Pass Filter
In that box set the following things:
- Cutoff frequency: 180 Hz
- Roll-off: 24 dB per octave
Click Apply.
Why this matters:
Low frequencies cause large groove swings that will make the needle jump.
Reduce Dynamics (Important)
This piece has natural dynamics that are bad for printed grooves.
- With the track still selected, go to Effect
- Choose Compressor
Set:
- Threshold (dB): -18 (Level above which compression starts)
- Make-up gain (dB): (+3 or check “Make-up gain” if available Boosts overall volume after compressing)
- Knee width (dB): (0 Keeps the compression “hard” for simple flattening)
- Ratio: 3:1 (How strongly loud parts are reduced)
- Lookahead (ms): 5 (Allows compressor to react slightly early; good default)
- Attack (ms): 20 (How quickly compression starts after signal exceeds threshold)
- Release (ms): 1000 (How slowly compression stops (1 second))
- Noise Floor: -40 dB
Check Make-up gain for 0 dB after compressing
Click Apply.
Result: more even groove depth which helps prevent skips.
Normalize to Safe Level
- Go to Effect
- Choose Normalize
Set:
- Remove DC offset
- Normalize peak amplitude to: -3.0 dB
- Do NOT normalize stereo channels independently (should be disabled anyway)
Click Apply.
Trim to a Short Section (Strongly Recommended for computers with less RAM)
Use max 30 seconds of the song.
- Use the Selection Tool (I-beam icon)
- Select a clean, recognizable section (opening melody works well often)
- Press Delete to remove everything else
More detail:
Select the Selection Tool
- Look at the toolbar at the top: it has icons like a pointer, hand, and I-beam.
- Click the I-beam icon (Selection Tool).
Highlight the Section to Keep
- Click at the start of the melody (far left of the waveform)
- Hold the mouse button and drag to the 20–25 second mark on the horizontal time scale at the top of the waveform
- The selected area will be highlighted in gray.
Trim the Audio
- With the desired section highlighted, go to Edit → Remove Special → Trim Audio
- OR
- Simply press Ctrl + T (Windows) or Cmd + T (Mac)
Result: Everything outside the highlighted section is deleted, leaving only your chosen 20–25 second melody.
Optional but Helpful: Slight Speed Reduction
Slower notes track better.
- Select the track
- Go to Effect
- Choose Change Tempo
- Set: Percent Change: -5%
Click Apply.
Do not change the pitch as it will mess with other things too.
Double-Check
- Play the track using the green Play button
- Make sure it starts and ends cleanly and contains the recognizable melody.
Export the File (Very Important Settings)
- Go to File → Export → Export as WAV
- Set:
- File type: WAV (PCM)
- Sample rate: 22050 Hz (bottom-left of Audacity window)
- Encoding: 16-bit PCM
- Name it something clear, e.g. 3d-print-song.wav
- Save
Generate Disk in Blender
When you open blender there will be a grey cube in the centre of the model viewer, press on it and press x to delete it. We will be using the scripting page of Blender to generate the disk but some editing may be required.
First make sure your "Scene Units" in Blender are set to Millimeters.
- In Blender, look at the right-hand side icons.
- Click on Scene Properties (it looks like a cone and a sphere next to a sun).
- Under Units, set "Unit System" to Metric and "Length" to Millimeters.
- Set the Unit Scale to 0.001.
This ensures that when you drop the file into your slicer(I used Bambu Studio), it shows up as a 24cm record and not something else. This is not essential but is recommended
After deleting the grey box in the centre when in the Modelling mode of blender go to the top menu and click on scripting, you will now enter a page with a large blank area for the code. Press Add new to open a new code page.
You can either find the code on my GitHub depository here, or
Paste the following code into the code box:
DO NOT RUN IN BLENDER YET; follow the steps after the code box
This is the code that will generate your model but it is missing the .wav file which you saved earlier.
DO NOT RUN YET; add pathname first:
To add your song (if on Mac) exit blender and open a finder window, select your song and then right click on your .wav file from audacity, hold in the option key and you will see an option "copy pathname", this is what you need to click on to get the song in the right format for blender.
To add the song Pathname you just copied scroll to the top of the code in Blender and delete the example text box: "/Users/YourName/Desktop/song.wav". Replace this with your pathname. Make sure that the quotation marks are still there but aren't doubled.
When this is done press the run triangle on the upper right of the code box, this will run the code for you.
It is normal that blender will freeze or pause for a minute or so whilst loading.
Look in the window on the left and see if something has generated, if you changed the scene units to millimetres you may need to zoom in, do this by entering the modelling page and zooming in.
The record should have generated and may or may not have a pinhole, if it doesn't follow the instructions below:
Adding pinhole if it didn't generate:
If there is already a cylinder where the pin-hole should be ignore the next part
Adding the cylinder
Use Shift + a to open the "add" dialogue box, hover over the "mesh" option and click cylinder, do NOT press enter yet
Look in the bottom left corner of the scene and click on the little grey box with the text "add cylinder." This will open a dialogue box: copy the following in:
Vertices: 64
Radius: 3.65
Depth: 8
The cylinder should look like a small pillar sticking through the centre of the record, if its not centred click on the record first and press g to "grab" the record, then press x then 0 then y then 0 then z then 0 to move the record to the centre.
Then click on the cylinder and press g to "grab" the record, then press x then 0 then y then 0 then z then 0
Make the hole from the cylinder and record:
Click on the record itself and look at the menu on the right and click on the blue wrench. This will open the modifier page. Click add modifier and hover over the generate option, then move over and click on boolean(one of the first ones).
A boolean modifier window will now open, set the type to difference and under object select the cylinder. Then move your cursor up and click the small downwards triangle (v) and click apply. This will generate a hole
Click on the cylinder and press x to delete it, there is now a hole in the record, if not press command + z to restore the small cylinder. Try the steps above and make sure to have the record selected and not the cylinder when you add the modifier.
The record should now be ready for exporting to your slicer, if you think there is an issue refer to the list of 4 common issues below.
Make sure to save often as Blender crashed a few times whilst I was using it which led to some lost progress.
Common issues and troubleshooting:
While the provided script is designed to be "click-and-run," 3D software can be finicky. If your record looks like a hollow shell or your slicer is giving you warnings about "non-manifold edges," here is how to fix the geometry manually.
Issue 1: The "Invisible Bottom" (Hollow Shell)
The Symptom: You view the record in Blender, but it looks like a floating top surface with no bottom. Or, when you look at it from underneath, it looks transparent.
The Cause: This is a Normals issue. In 3D modeling, every surface has a "front" and a "back." Computers often render the "back" as invisible. If your bottom face is pointing inward, it becomes invisible, and your 3D printer won't know it exists.
The Fix:
- Select the record and press Tab to enter Edit Mode.
- Press A to select the entire mesh (it turns orange).
- Press Shift + N (Recalculate Normals).
- What this does: It forces Blender to calculate which way is "Out" and flips all faces to point strictly outward.
- Verify: In the top right viewport overlays, turn on Face Orientation. The entire model should look BLUE. If you see RED, it is inside-out.
If it doesn't fix it shouldn't be a major issue as my splicer was able to repair it on its own.
Issue 2: The "Wavy Bottom" Effect
The Symptom: The bottom of your record isn't flat; it has the same grooves as the top, just inverted.
- Why this is bad: The print will have almost zero contact with the build plate and will warp instantly.
The Cause: This happens if you simply "Extrude" the top surface down without flattening it. The script provided in this guide handles this automatically, but if you are editing manually:
The Manual Fix:
- In Edit Mode, go to Side View (Numpad 3).
- Turn on X-Ray Mode (Alt + Z) so you can select through the object.
- Box-select the entire bottom surface vertices.
- Press S, then Z, then 0, then Enter.
- Translation: Scale (S) on the Z-axis (Z) to Zero (0). This smashes all wiggles into a perfectly flat pancake.
Issue 3: Python Script Error "File Not Found"
The Symptom: You click "Run Script" and nothing happens, or the console says FileNotFoundError.
The Fix: Blender does not know where your music is. You must provide the Absolute Path.
- Windows: Find your file, hold Shift + Right Click it, and select "Copy as path". Paste this into the script: FILE_PATH = r"C:\Users\You\Desktop\song.wav" (Note the r before the quote).
- Mac: Right-click the file, hold Option, and select "Copy ... as Pathname".
Issue 4: Slicer Warnings ("Non-Manifold" or "Open Edges")
The Symptom: When you import the STL into Bambu Studio/Cura, it asks to "Repair" the model.
The Cause: The mesh is not "watertight." It might have a hole where the vertices didn't weld together perfectly, usually at the seam where the circle closes (the 0° and 360° point).
The Fix:
- In Blender Edit Mode, press A to select all.
- Press M (Merge) and select "By Distance".
- Look at the bottom status bar; it should say "Removed X vertices." This welds the seams shut.
Download the Record and Open in Slicer(bambu Studio)
Now that you have made the record in Blender it is time to open it in your slicer. I used Bambu Studio and strongly recommend it.
Download as STL file from Blender
In blender click on the file button on the top left corner and move your cursor down to export, then move down to the STL (.stl) option and click on it.
This opens a dialogue box where you need to decide the name and location of the file. Name the file something easy to recognise like "3D printable record" and click "export .stl" in the bottom right when done. This will save your record as a 3D printer compatible file.
Open Bambu Studio
When you have opened Bambu Studio and logged in you will come to the homepage, from here click on "Create new project" in the top right corner.
This will bring you to the prepare page of the app, name the project something memorable like 3D record.
After naming it click on the cube with a plus symbol on it in the menu on the upper right, this will open a finder menu. Look for your .stl file and click on it. Click open to add it to the slicer. It should fill up the majority of the printing plate, if not resize it by pressing on the record and clicking the S key. Then scale it until it is the correct diameter of 240 mm.
Change the setting for optimal print quality (NECESSARY)
To create the optimal print you will need to alter the setting of your printer to the following, do this by opening the prepare page of your model and turning on advanced settings(found on the left). Enter all of the following settings:
Turn on Advanced Mode: Look at the section "Process" on the left side of the screen. Just to the right of "Process - Global", there is a small toggle switch.
- Toggle it ON (Green). (If it's off, you won't see the brim settings).
First select the 0.08mm extra fine system preset from the drop down menu, then adjust all of the listed settings below:
Save this as a User Preset in Bambu Studio (e.g., named "Vinyl Record Master") so you don't have to re-enter these every time.
All the settings may be in a different order depending on what Bambu Studio version you are using.
1. Quality Tab
- Layer Height: 0.08 mm (Crucial for smooth groove walls).
- First Layer Height: 0.2 mm (Standard, ensures good adhesion).
- Wall Generator: Arachne (Crucial for handling variable groove widths).
- Seam Position: Aligned (Keeps the "zipper" in one straight line, preferably away from grooves if possible, though the geometry usually dictates this).
- Surface Top Surface Pattern Concentric
- Surface Ironing OFF
- Walls Wall Generator Arachne
- Walls Seam Position Aligned
- Precision Resolution 0.001 mm
- Precision Arc Fitting OFF
- Wall Order: Inner/Outer
- Small Perimeters Threshold: 6.5 mm
2. Strength Tab
- Sparse Infill Density: 100% (Solid plastic reduces resonance/rumble).
- Sparse Infill Pattern: Rectilinear (Fills faster and more solidly for flat disks).
- Top Surface Skin Layers: 0 (Optional but recommended: exposes the raw infill/groove path without ironing over it).
- Top Shell Thickness: 0.8 mm
- Bottom Shell Thickness: 0.6 mm
- Length of sparse infill anchor: 2.5 mm
- Max length of sparse infill anchor: 12 mm
- Top/Bottom paint penetration Ignore
3. Speed Tab
- Outer Wall: 30 mm/s (Most important speed setting. Slows down the nozzle to trace audio waves accurately).
- Inner Wall: 60 mm/s (Safe to go a bit faster here).
- Top Surface Speed: 30 mm/s
- Small Perimeters Speed: 30 mm/s
- Top Surface: 30 mm/s (Matches the outer wall speed for consistency).
- First Layer Speed: 30 mm/s (Slow and steady to prevent lifting).
- Movement Outer Wall Speed 30 mm/s
- Movement Z-Hop 0.4 mm
- Infill Sparse Infill 100% Rectilinear
- Sparse Infill Speed: 100 mm/s
- Internal Solid Infill Speed: 60 mm/s
4. Cooling (in Filament Settings)
- Part Cooling Fan: 100% (Keep this ON. PLA needs to harden instantly).
- Auxiliary Fan: 0% or OFF (N/A for A1, but good to know for future reference).
5. Others Tab (Adhesion)
- Brim Type: Outer brim only.
- Brim Width: 10 mm (or 15 mm for extra safety).
- Brim Object Gap: 0 mm (Ensures the brim actually touches the record).
6. Physical Setup (The "Real World" Settings)
- Build Plate: Textured PEI Plate.
- Cleaning: Wash with hot water + Dish Soap (W5, clear/translucent version). Scrub well.
- Environment:
- Draft Shield: Cardboard walls on Left, Right, Back.
- Top: OPEN (Do not cover).
- Room: Close windows/doors.
EXTREMELY IMPORTANT: Make sure no-ironing is selected under ironing
Prepeare to print
Click on the preview page on Bambu Studio and wait for it to generate all the G-code. This can take upwards of 10 minutes depending on the song you chose.
Final check before you click Print: Slice the model and look at the Time Estimate. A 7-inch record with these slow settings usually takes more than 5 hours. If it says 45 minutes, your speeds are incorrect.
Do not print yet, complete the steps below first.
Clean Your Build Plate and Prepare for Printing
To ensure optimal printing it is important to prepare an ideal printing environment. This includes cleaning the build plate, ensuring proper room temperature and blocking off any drafts or wind sources.
Cleaning your build plate
To ensure optimal bed adhesion it is important to clean your build plate. To do so take normal dish soap (DO NOT use moisturising soaps and hand soaps) and a clean sponge, hold the plate by the edges without touching the print area and rinse first with warm water. Then take the dish soap and apply a few lines of soap over the plate. Then take the sponge and use circular motions to rub the soap in over the entire plate. Use warm water to wash the plate off and ensure there is no soap left. Wash both sides this way. Use a dry paper towel to dry off and ensure no fibres come off. When putting the plate back on your printer hold the plate with a paper towel.
Wash as thoroughly as possible as it really does make a different when printing.
Preventing drafts
If your printer has a case then just leave the door open and turn off the aux fan.
If your printer doesn't have a case it is recommended to construct a makeshift one. I did this by cutting large sheets of cardboard and assembling them around the back and sides of the printer. I left the front and top open so heat could escape.
Print and Prepare Record
When you have completed all of the above steps go back to your slicer and click print plate to send the record to your printer. It is recommended to do this during the day as it took me 11 hours to print mine. Additionally watch the first couple minutes of printing to see if there are any skips or errors. It took me more than 3 tries to get a somewhat working prototype so no need to give up on the first try. Each record will also use more than 200 grams of filament as they are solid discs.
Common issues and potential causes
These are the issues that I ran in to when printing my record:
Ends of the record rise off the buildplate
Cause: The top of the record cools differently and quicker than the bottom causing it to contract and pull the record upwards
Fix: Increase the brim in the splicer by 5mm or more if possible, use a box around the printer to cut draft away, turn off Aux fan if you have it.
What to do: Immediately stop the print and wait for the plate to cool before removing the record from it. It is most probably ruined but the inner loops may still be playable. The record will also have contracted and lifting the plate off will cause it to warp as well but not permanently.
Grooves generate but without texture
Cause: Resolution isn't high enough in the splicer causing the printer to skip the texture
Fix: Change the resolution setting in the printer to 0.001 mm to ensure it captures all details
What to do: Stop the printer as there will be no noise.
Needle skips on record player
Cause: The grooves are too big for the sensitive needle
Fix: Place some sticky tag and a coin on top of the needle to weigh it into the record
Non-manifold edges warning in splicer
Cause: There are holes you cannot see in the geometry
Fix: Do not use the open source website recommended by bambu studio as the file is too big. If your computer has 16gb ram or more go into blender, select the entire record, press tab, select the entire record, press on the green triangle on the far right menu(Data), go to remesh, select voxel remesh, put the voxel size to 0.08 mm to ensure all angles are used.
WARNING: this is very heavy on your computers RAM and therefore it is important to save before and it is recommended to free up as much RAM as possible. I only have 8 GB and doing this forced my Mac to use SSD as ram but that froze my computer and made me force quit everything. If your computer does not have that much ram try to find one with and send the "broken" file to that computer for fixing. You can attempt the remesh option but it will most probably not work. Otherwise rerun the code and try again.
Play the Record
This is the moment of truth, whether or not it worked for you. As the grooves are very deep and wide it is important to weigh down the needle so it tracks properly. To do this take a bit of sticky tack and place it on the top of the needle, then stick a coin into it. I placed the needle in the record with my record player turned off so I could place it at the absolute beginning, I let the tonearm lower itself so the needle doesn't get too worn. I set the rotation speed to 33 rpm. This is important. Then turn the record player on and hopefully you'll hear the audio file you used.
This is a very long and detailed process and therefore errors are easy. They may not be your fault and could be mine too. I used more than 600 grams of filament when trying different methods before I got a barely recognisable sound. You will probably face a similar issue.
Thank you for taking the time to read my instructable as this is my first one. I tried to make it as detailed as possible so anybody with out any experience can attempt it.