3D STL Preview — Interactive preview only (drag to rotate, scroll to zoom)
⚠
Brightness:
Normal
Contrast:
Normal
To interact with the 3D preview: Use mouse drag to rotate, mouse wheel to zoom. Touch users: one finger to rotate, pinch to zoom. Keyboard users: the visual preview is supplementary; generated STL files contain the same geometry.
What Does This Program Do?
Generates custom braille embossing plates for cylinders such as labels and containers.
View on GitHub
First Step: Decide What to Include
Braille space is limited. Not everything from print will fit.
Help & Guide
Choosing What to Include
The most important decision: Braille takes far more space than print. You cannot include everything — you must prioritize.
BANA wrote this guidance for printed business cards, and it transfers directly to the cylinders (jars, bottles, containers) this tool produces: a cylinder row holds about as many cells as a card line, so the same space constraints and prioritization strategies apply.
The Core Question
"Can someone identify me and contact me with just this information?"
If yes, you have enough. If no, add the minimum needed — nothing more.
Space (BANA, verbatim)
"The typical business card stock used in the United States and Canada can accommodate 4 lines of braille with 13 or 14 cells each, depending on the equipment used to produce the cards. One strategy that can help is to use the fold-over style of business card stock that effectively doubles the writing surface of the card. In any event, there is usually far more print on the card than will fit in braille no matter how it is produced."
What BANA lists as candidate elements
BANA lists nine elements typically found on a print card; expect most to be cut:
name
job title
organization/company
mailing address
phone
fax
cell
e-mail address
website
"There may be other elements as well, but those will almost certainly have to be omitted."
BANA's typical four-line layout
first line: name
second line: organization/company
third line: phone number
fourth line: e-mail address
"The format of these lines should be planned considering the entire card, not just one line at a time."
If the name does not fit (BANA, verbatim)
"In most cases, the person's name is essential. If the name will not fit on a 13- or 14-cell line, one option is to remove the capital indicators. If it still does not fit, remove the middle initial, if there is one. If it still will not fit, use an initial for the person's first name. Another option, if space is available, is to continue the person's name onto a second braille line beginning in cell 1."
If the organization name is too long (BANA, verbatim)
"Some indication of the name of the organization or company is usually desirable on a business card. However, this may be omitted, especially if the e-mail or web address contains the name of the company or organization. Other strategies, such as removing capital indicators, may also be used as needed. In the case of an organization or company name, abbreviating words such as 'lib' for 'library,' 'amer' for 'American,' or 'nat' for 'National' can work well."
BANA names only lib, amer, and nat by example. Use them as a pattern, not an exhaustive list.
BANA's general principles
"Follow The Rules of Unified English Braille."
"Work with a UEB-certified transcriber."
"Have a conversation with the owner of the business card so that they may decide which information is most important to convey."
"When information needs to be pared down to fit within the available space, offer the client suggestions so that they can make an informed decision."
Source: Quoted verbatim from the BANA Business Cards Fact Sheet (approved March 2024). The PDF is the authoritative source.
Cylinder Guide
First: Decide . Cylinder space is limited just like cards.
Cylinders let you create braille labels that wrap around curved surfaces like bottles, jars, and containers.
Key Cylinder Parameters
Parameter
What It Controls
Outer Diameter
The diameter of the object you're labeling (in mm). Measure around the widest part where the label will go.
Cylinder Height
How tall the braille surface will be. This determines how many rows of braille can fit.
Wall Thickness
Thickness of the cylinder wall. Thicker = sturdier but uses more material.
Polygon Cutout
Number of flat sides for the inner shape. Higher numbers = smoother curve but larger file size.
Seam Offset
Rotates where the "seam" (gap) in the cylinder appears. Adjust so the seam doesn't interrupt your text.
Measuring Your Container
Outer diameter: Wrap a string around the container, mark where it meets, then measure the string. Divide by 3.14159 (π) to get diameter.
Height: Measure the flat area where braille will go. Leave margin at top and bottom.
Text Capacity
Each row holds a fixed number of braille cells:
By default, each row holds 13 braille cells of text (2 additional cells are reserved for the indicator letter and the triangle alignment indicator). With indicator letters turned off, up to 14 cells are available — the alignment triangles are always included.
Cells are spaced 6.5mm apart, so the default 13-cell layout needs about 91mm of circumference — the default 30.8mm-diameter cylinder (about 96.8mm around) fits it with room for the seam gap.
A larger diameter gives more circumference, which adds margin around the seam rather than more cells per row.
Tips for Best Results
Print orientation: Print cylinders standing upright for best dot quality
Test fit: Print a small section first to verify the diameter matches your container
Seam placement: Rotate the seam to the back or between words
Before you begin: Decide what information to include using the guide. The tool cannot help you if you try to include too much.
Step-by-Step
Enter your text in the "Enter Text for Braille Translation" area. Use only the essential information you've selected.
Set Placement Mode to "Auto Placement" (handles line wrapping automatically).
Check the braille: press Translate to Braille ↓ under the text box. The braille appears in the Braille (Unicode) box below, where you can edit individual cells.
Generate the STL: Click Generate STL in the bar pinned at the bottom of this panel — it stays in view no matter how far you scroll — then review the 3D preview.
Download both plates:
Download the embossing plate STL
Switch "Select Plate to Generate" to "Universal Counter Plate"
Download again for the counter plate
The Two Translate Buttons
The text box and the Braille (Unicode) box translate in both directions:
Translate to Braille ↓ fills the braille box from the text above it.
Translate to Text ↑ reads pasted braille back into English, so you can check braille that came from somewhere else.
Whenever the braille box has content, those exact cells are what get embossed — clear it to go back to translating the text above.
File Names
Downloads are named Embossing_Cylinder_{preset}_{name}.stl and Counter_Cylinder_{preset}_{name}.stl, where {preset} is the selected Card Thickness and {name} is the first word of your text. Paste braille with no text and the name is back-translated from the braille for you.
Current Availability
Cylinder shapes are available for labeling bottles, jars, and containers.
Key Settings
Setting
Recommendation
Placement Mode
Auto Placement (handles wrapping)
Row Indicator Style
Visual markers (default); choose Tactile seam arrow to free the marker cells and give a blind user a touch alignment point
Capitalized Letters
Enabled (default); disable it under Translation Options in Expert Mode to save one cell per capital, which is BANA's first suggestion when a name will not fit
Number Signs
One number sign per number (default) — standard UEB; choose the repeating option only to match non-standard online translators. Also under Translation Options
Language
English (UEB) contracted, grade 2 (default) — what BANA's Business Cards Fact Sheet uses, and it fits more into each row
Formatting Your Content
Once you've decided , format it to maximize space efficiency. The rule statements below are quoted verbatim from BANA's March 2024 Fact Sheet.
Phone Numbers (BANA, verbatim)
"If the telephone number has no extension, then it can be brailled as follows: #123.456.7890. Omit extra characters such as parentheses. Convert the hyphens to periods to retain the natural sub-units of the phone number. This will maintain the ease of readability, while eliminating the need to repeat numeric indicators. Do not remove the numeric indicator unless absolutely necessary."
In this app: type 123.456.7890 (no parentheses, periods between groups). The numeric indicator is added by the translator.
Why only one number sign? In Unified English Braille, a period (or comma) inside a number keeps "numeric mode" active, so the digits after it do not need another number sign (⠼). For example, 206.616.7678 translates to ⠼⠃⠚⠋⠲⠋⠁⠋⠲⠛⠋⠛⠓ — exactly 13 braille cells, which fits a default row. This is correct UEB, matching BANA's guidance above. The Computer shorthand in the translation preview reflects this: digits after each period stay digits (2 0 6 . 6 1 6 . 7 6 7 8).
Why hyphens and parentheses give you three number signs. UEB numeric mode survives a period or comma, but a hyphen or parenthesis terminates it, so the digits after each one need a fresh number sign. 206-543-4779 therefore translates to ⠼⠃⠚⠋⠤⠼⠑⠙⠉⠤⠼⠙⠛⠛⠊ — 15 cells with three ⠼, which will not fit a 13-cell row and wraps to a second line. That is correct UEB from liblouis, not a bug, and no setting in this app removes those signs. Retype the number in BANA's period form (206.543.4779) and it becomes 13 cells with one number sign. If you must keep the hyphens and still fit one row, translate first and then delete the extra cells by hand in the Braille (Unicode) field under the text inputs — that field is used exactly as you leave it.
Some online translators repeat the number sign after each period as well. That output is non-standard and uses extra braille cells. If you need to match it, choose "Repeat the number sign after each period (non-standard)" under Number Signs in the Translation Options submenu of Expert Mode — but be aware the longer result may no longer fit on one row.
Splitting a long number across two rows: if a phone number will not fit on one row, divide it after a period, and begin the next row with a new number sign (⠼) — the translator adds it automatically when the row starts with digits. For example, 206.616. on one row and 7678 on the next produces ⠼⠃⠚⠋⠲⠋⠁⠋⠲ then ⠼⠛⠋⠛⠓, following the same pattern as BANA's worked examples.
E-mail Addresses (BANA, verbatim)
"An e-mail address should be brailled according to The Rules of Unified English Braille. When an e-mail address must be divided over two lines, divide it after punctuation (e.g., the 'at' sign, a period, or a hyphen). An e-mail address may also be divided between syllables, or between alphabetic and numeric sub-units. The least desirable option is to divide an e-mail address between the letters of a syllable. Use the line continuation indicator (dot 5) at the end of the line to show that the e-mail address has been divided. As a last resort, omit the line continuation indicator. Begin the second line of the e-mail address in cell 1."
In this app: Auto Placement applies BANA's punctuation-first division preference where it can. The dot-5 continuation indicator is added by the translator, not typed.
Web Addresses (BANA, verbatim)
"A web address should be brailled according to The Rules of Unified English Braille. When a web address must be divided over two lines, divide it after punctuation (e.g., a colon, a period, or a slash). A web address may also be divided between syllables, or between alphabetic and numeric sub-units. The least desirable option is to divide a web address between the letters of a syllable. Use the line continuation indicator (dot 5) at the end of the line to show that the web address has been divided. As a last resort, omit the line continuation indicator. Begin the second line of the web address in cell 1."
Tip (this app, not BANA): omit https:// or www. if the domain is clear without it.
Capitalization
Each capital letter in braille adds a capitalization indicator (1 extra cell). The Capitalized Letters toggle, in the Translation Options submenu of Expert Mode, controls how capitals are handled:
Disabled (default): Text is automatically converted to lowercase before translation. You can type normally — capitals are converted for you.
Enabled: Capital letters are preserved, adding indicator cells to the braille output.
Why disable capitals? Saves approximately 1 braille cell per capital letter. Braille readers understand this is standard practice for space-limited applications like labels and business cards.
Expert Mode provides fine-grained control over braille generation. Click Show Expert Mode on the main page to access these options.
What's Inside Expert Mode
Important: The Preview Braille Translation button is located at the top of Expert Mode. Use it to verify your text before generating STL files.
Submenu
What It Controls
Shape Selection
Output shape, braille dot shape (rounded/cone), and indicator letters on/off
Braille Spacing
Number of cells per row, number of rows, cell spacing, line spacing, dot spacing, and the braille line positioning adjustments on the cylinder surface
Braille Dot Adjustments
Dot dimensions (diameter, height, tip size), recess dimensions for counter plates, and indicator dot sizes
Surface Dimensions
Cylinder diameter, height, polygonal cutout, and seam offset
Tactile Indicator Dimensions
Size, raise, and recess clearance of the tactile seam arrow. Appears only when Row Indicator Style is set to Tactile seam arrow
Translation Options
Capitalized Letters and Number Signs — the two settings that change how liblouis renders your text
When to Use Expert Mode
Preview translations: Always preview before generating to catch warnings about text length or character issues
Capitals and numbers: Open Translation Options to keep capital letters, or to repeat the number sign after each period
Custom cylinder sizes: Adjust diameter and height to match your specific container
Fine-tune spacing: Modify cell and line spacing for non-standard applications
Printer calibration: Adjust dot dimensions if your 3D printer produces dots that are too large or small
Default Values
The default settings follow BANA (Braille Authority of North America) guidelines and work well for most applications. Only modify if you have specific requirements or need to calibrate for your printer.
About these business card examples: BANA's own worked examples are in Grade 2 (contracted) braille, which is also this app's default translation, so what you type below comes out in the same code BANA published. BANA's transcribers also used cell-level strategies that vary case by case, so the exact cells can still differ; the "what to type" hints capture BANA's content decisions (which fields to omit, how to split a name). Read BANA's original examples in the Fact Sheet (PDF) →
Example 1: Organization redundant with e-mail (BANA Example 1)
Print card has: Harry Potter / Hogwarts School / harry@hogwarts.edu
BANA strategy: omit capitals from organization; divide the e-mail address.
BANA Grade 2 braille (verbatim from the Fact Sheet):
⠠⠓⠜⠗⠽⠀⠠⠏⠕⠞⠞⠻
⠓⠕⠛⠺⠜⠞⠎⠀⠎⠡⠕⠕⠇
⠓⠜⠗⠽⠈⠁⠐
⠓⠕⠛⠺⠜⠞⠎⠲⠫⠥
What to type in this app:
harry potter
harry@hogwarts.edu
Result: 2-3 lines. E-mail may wrap after @ with a dot-5 continuation indicator.
Example 2: Long name spans two lines (BANA Example 4)
Print card has: Liesel A. Schimmelfennig / US Army Corps of Engineers / l.schimmelfennig@usace.army / 1-520-670-6277
BANA strategy: continue the name onto a second line in cell 1; omit organization (in e-mail); omit phone; divide the e-mail with the dot-5 continuation indicator omitted as a last resort.
BANA Grade 2 braille (verbatim from the Fact Sheet):
BANA strategy: the client chose the nickname "Fran" rather than removing capitals from "Francine"; convert phone hyphens to periods; tag cell/fax with a single-letter prefix.
BANA Grade 2 braille (verbatim from the Fact Sheet):
fran rikard
albuquerque ac
c 505.312.4224
f 505.312.4225
Result: 4 lines.
Cylinder Examples
Example 4: Spice Jar Label
Goal: Label a spice jar (diameter ~55mm) so it can be identified by touch.
Decision: A single word is all that's needed — just the spice name.
Type:
cinnamon
Result: 1 row, fits easily. Cylinder diameter set to 55mm.
Example 5: Medicine Bottle
Goal: Label a prescription bottle (diameter ~40mm) with drug name and dosage.
Decision: Two key pieces of info — the medication name and dosage.
Type:
amoxicillin
500mg
Result: 2 rows. "amoxicillin" is at most 11 braille cells (fewer once contracted), within the default 13-cell row; abbreviate to "amox" if you add more per-row content.
Example 6: Water Bottle ID Tag
Goal: Identify a personal water bottle (diameter ~75mm) at a shared workplace.
Decision: Name plus one contact method. Omit organization — not needed to identify a personal item.
Type:
j. smith
555.867.5309
Result: 2 rows on a 75mm cylinder (~13 cells per row). Initials save space.