Ambigram generator (fully customizable) v2.2
Print Profile(6)




Description
Membership
Like my models? Please consider subscribing. This will help me dedicate more time to create new interesting designs. As a subscriber, you'll get my direct email for priority support, and you can gain access to high-res model files (STEP), original project files (F3D) and source code of my scripts (SCAD) and optionally a commercial license.
This is an OpenSCAD script to generate two-sided 3D texts that merge, each text is visible from a different point of view.
2026-02-09: new version 2.2
A new version has arrived, here are the new features and modifications introduced:
- After hearing many request for a more robust heart shape, I've introduced a new parameter called heart_base_width which allows you to set up a custom width of the heart shape in the lower point.
- I removed the old legacy engine and traces of it in the new algorithm which is growing in direction of the new upcoming 3.0 version. This removes the font_custom, running_at, disable_warning parameters and a lot of internal code, making this faster and lighter to execute.
- All fonts available on MakerWorld can now be used, I also removed the font_style parameter because you can choose the font style in the Parametric Model Maker's font selection dialog.
A guide through the parameters
Here's an detailed explanation of every possible setting. Feel free to explore the endless possibilities of combining these values.
Texts
In this tab you can set the basic parameters about displayed texts.
| Parameter | Description | unit | min | max | default |
|---|---|---|---|---|---|
| text_1 | This is the text which is visible:
| text | “SUSANNA” | ||
| text_2 | This is the text which is visible:
| text | “CHRISTIAN” | ||
| text_mode | This defines the mode of rendering of texts, this value can be:
| Left-Right | |||
| text_angle | This value, which is valid only in the Left-Right mode, allows you to set the angle from which the texts will be visible. | degrees | 0 | 180 | 45 |
| text_shape | This value can change the shape of the object, possible values are:
This parameter applies only in Left-Right text_mode. | Rounded rectangle | |||
| text_roundness | If text_shape is set as Rounded rectangle, this is the percentage of roundness to give to corners. A value of zero will create a pure rectangle with squared edges, a value of 100% will have a completely round end. WARNING: time consuming setting, could cause Parametric Model Maker failure to generate model. | % | 0 | 100 | 50 |
| text_heart_direction | Specifies where the pointing end of the heart is directed, this value can be:
| Left | |||
| text_padding | Selects the character to be used when padding texts to match lengths, this can be:
| Space | |||
| heart_base_width | Sets the width of the base at the bottom point of hearts. | millimeters | 0 | 20 | 4 |
Font
In this tab you can set all parameters about the font to be used for the texts.
| Parameter | Description | unit | min | max | default |
|---|---|---|---|---|---|
| font_name | Choose one of the supported fonts from the list to apply it to the text on this side.
Be warned! Complex fonts and fonts with serifs tend to generate floating objects which will result in waste of material and time. Consider using sans serif fonts and/or check my guide on how to easily get rid of floating objects using Fusion 360 down below. | Merriweather Sans | |||
| font_size | The size of the text, which will result in being also the depth of the object and his height (excluding base and top plate). | mm | 1 | 72 | 20 |
| font_spacing | Spacing between letters, the greater the number, the far the letters are. Better results are achieved when the letters touch one another, if they don't, a solid base will be required to keep them together. | 0.1 | 5 | 1 |
Base
To keep the letters united, you need to generate a base plate, these parameters allows you to personalize it's creation.
| Parameter | Description | unit | min | max | default |
|---|---|---|---|---|---|
| base_type | The type of base to be created, this value can be:
| Text | |||
| base_height | The height of the base. | mm | 0.2 | 25 | 3 |
| base_x_correction | Since OpenSCAD does not provide functionalities to compute texts' widths and heights, calculus about the base are approximated, with this parameter you can offset the base position on the X-axis to correct those calculus. | mm | -100 | 100 | 0 |
| base_y_correction | Same as base_x_correction, but for the Y-axis. | mm | -100 | 100 | 0 |
| base_z_correction | Same as base_x_correction, but for the Z-axis. | mm | -100 | 100 | 0.4 |
| base_size_correction | Same reason as for base_x_correction, this parameter allows you to shrink on enlarge the base size. | mm | -100 | 100 | 0 |
| base_heart_size | The correction of the size of the heart when it's being created. | mm | -100 | 100 | 0 |
| base_heart_x | Heart X-axis correction. | mm | -100 | 100 | 0 |
| base_heart_y | Heart Y-axis correction. | mm | -100 | 100 | 0 |
Top
Parameters that will create a top plate over the texts.
| Parameter | Description | unit | min | max | default |
|---|---|---|---|---|---|
| top_type | The type of plate to be created, this value can be:
| None | |||
| top_height | The height of the top plate. | mm | 0.2 | 25 | 3 |
| top_x_correction | Since OpenSCAD does not provide functionalities to compute texts' widths and heights, calculus about the top plate are approximated, with this parameter you can offset the plate position on the X-axis to correct those calculus. | mm | -100 | 100 | 0 |
| top_y_correction | Same as top_x_correction, but for the Y-axis. | mm | -100 | 100 | 0 |
| top_z_correction | Same as top_x_correction, but for the Z-axis. | mm | -100 | 100 | 0.4 |
| top_size_correction | Same reason as for top_x_correction, this parameter allows you to shrink on enlarge the top plate size. | mm | -100 | 100 | 0 |
| top_heart_size | The correction of the size of the heart when it's being created. | mm | -100 | 100 | 0 |
| top_heart_x | Heart X-axis correction. | mm | -100 | 100 | 0 |
| top_heart_y | Heart Y-axis correction. | mm | -100 | 100 | 0 |
Tweaks (fix things up)
Some parameters that can help you fix things that come out weird.
| Parameter | Desccription | min | max | default |
|---|---|---|---|---|
| render_quality | Selects the quality of curves to be used when generating the model, the lowest the quality, the faster generation will take. You can work in Draft all the time for fast refresh, but you need to remember to switch back to Normal or something higher before exporting the model to be printed.
Possible values:
| Normal | ||
| font_ratio | Since OpenSCAD does not provide functionalities to compute texts' widths and heights, calculus are approximated, with this parameter, which represents the ratio between the height and the width of a single letter of the font used, you can correct those calculations. | 0.1 | 3 | 1.33 |
| small_characters | This is the list of the characters that will be considered small and will have a smaller depth (see small_characters_ratio). | "!()1I[]fijlt{" | ||
| small_characters_ratio | This is the ratio between the depth of a normal character and the depth of a character considered small. | 0.01 | 3 | 0.3 |
| space_ratio | This is the ratio between the depth of a normal character and the depth of a rectangle created in place of a white space. | 0.01 | 3 | 0.1 |
How to use symbols in texts
If you want to use symbols in texts, you can with certain restrictions.
How to insert a heart
Since not all fonts include the glyph of an heart and those who sometimes do have different codes, I created a special escape characters sequence to insert an heart. In the position where you want to insert a heart glyph, just insert \h in place.
On Windows
From the start menu, open Characters Map.

Select from the combo box the font you're using in your design, then scroll through characters to find the glyph you want to use, click on it, and press the Select button, then use the Copy button to copy it to the clipboard, go to the Parametric Model Maker, focus the input field and paste from the clipboard.
Optionally you can copy the character code in the lower left corner and insert its hexadecimal value in the text field pre-pending the "\u" escape character sequence, e. g. : U+2665 becomes \u2665
On macOS
On the Apple system you have a similar tool which is Font Book, open it from the Applications folder.

On startup you will be presented the full list of fonts installed on your system, search for the font you're using in the script and double click on it's icon to open up the font details.

Scroll through the glyphs to search the one you like most, then click it to open it up and use the Copy button in the lower-right corner to copy it to the clipboard. Paste it into the script's input field.
Optionally you can copy the character code in the lower left corner and insert its hexadecimal value in the text field pre-pending the "\u" escape character sequence, e. g. : U+263C becomes \u263C.
Boost Me (for free)
Want to show your appreciation for my work? Consider sending me a boost. This encourages me to keep creating beautiful, useful models and scripts, and to share them with full documentation as I always have.
Show me your appreciation: buy me a coffee.

https://buymeacoffee.com/zizzo81
All my models are proudly created in Italy with ♥.

Documentation (1)
License
You may create derivative works based on this object, provided that all such derivative works are published exclusively on the MakerWorld platform and include proper attribution to the original creator. You may not share, upload, host, distribute, or publish this object—or any derivative work of this object—on any other digital platform, marketplace, or distribution channel. Commercial use of this object and any derivative works is strictly prohibited. This includes, but is not limited to, selling, renting, sublicensing, or using the object in any context in which you receive monetary compensation or other financial benefits.


















Comment & Rating (244)