← Back to projects
Project

Heptopod Translator

In Progress · Aug 2026

An experimental English-to-Heptopod glyph generator inspired by Arrival, turning words and phrases into deterministic circular ink forms.

Python PyTorch Stable Diffusion LoRA FastAPI NLP

Arrival is Denis Villeneuve's 2016 film about linguist Louise Banks, brought in by the military to communicate with heptapods, aliens who've arrived on Earth in twelve towering ships with no clear purpose. It's my favorite film, one I keep coming back to, and every rewatch leaves me thinking about the heptapods' writing system a little longer than the last. This project is my homage to it, a small way of sitting with something that has stuck with me for years.

Amy Adams and director Denis Villeneuve on the set of Arrival
Amy Adams (plays Louise Banks) and director Denis Villeneuve on set.

Using the handful of examples the movie gives us, plus the glyph set collected in Wolfram Research's, I wanted to build a tool that turns your own text into Heptopod glyphs and translates them back.

A reference sheet of Heptapod logograms from the film with their English translations
Reference sheet of the film's logograms, compiled by @emma_hollen.

The language of Arrival

In the film, the heptapods actually use two languages: a spoken one, Heptapod A, and a written one, Heptapod B, which is what this project is about. Heptapod B has no fixed word order and is written as a single circular logogram per utterance rather than a sequence of symbols read left to right. A whole sentence, including its subject, its qualifiers, and its meaning, is folded into one non-linear form, with no clear beginning or end. Learning to read it is central to the film's plot, since the language's circular, non-sequential structure is tied to the way the heptapods experience time itself.

How it was designed

The logograms were created by artist Martine Bertrand, working with her husband, production designer Patrice Vermette, who wanted to try something different from the typical sci-fi script. Bertrand took inspiration from squids firing ink and the rings coffee cups leave on a table, refining that into the branching, splattered rings seen throughout the film. They're circular so that they carry no inherent direction.

Louise on set holding a board with a heptapod logogram, next to the film crew
Louise on set, holding one of the hand-designed logograms used in the film.

Building a translator

The heptapods' writing has stuck with me since I first saw the film, and even more so after rewatching it some time later. Since the language of Arrival was never fully developed, I decided I wanted to fill that gap somewhat, though with a slightly different approach. I wanted to use the existing glyphs as a starting point and build a complete language from them. Turns out that's not as easy as I first thought.

Encoding text into glyphs

The first idea that comes to mind, and the one I went with, is to use embeddings, so that semantically similar words and phrases produce visually similar glyphs. I embed each word within a sentence on its own and overlap the resulting glyphs into one combined form, matching the way a full utterance in the film reads as a single circular shape rather than a row of separate symbols. This mirrors how the film's own logograms work: individual concepts are drawn as their own ring and then overlapped into a single denser form once combined into a sentence.

The film's original logogram for 'Louise'
The film's logogram for "Louise"
The film's original logogram for 'weapon'
The film's logogram for "weapon"
The film's original logogram overlapping 'Louise' and 'weapon' into 'Louise has weapon'
The film's own overlap: "Louise has weapon"

Both component structures are still visible in the combined form: the "Louise" ring and the "weapon" ring are each individually recognisable in "Louise has weapon," just rotated slightly from their standalone versions before being overlapped, which is the same rotate-then-overlap behaviour I aimed for in the generated glyphs below. The "has" presumably adds some structure of its own too, but the film never gives us a standalone glyph for it, so there's no way to isolate what it contributes.

My first attempt at this, built last summer, traced the same basic idea of driving the glyph from a word embedding, but didn't look nearly as good. Rather than fine-tuning a diffusion model on the film's glyphs, the embedding was mapped directly onto a simple parametric ring: values from the embedding controlled the stroke thickness, radial wobble, gaps along the stroke, and the ring's global rotation, with a Gaussian blur applied on top to soften the result. It produced recognisable rings, but nothing like the organic, ink-like quality of the originals, which is what pushed me towards the LoRA-tuned Stable Diffusion approach used now.

A generated glyph for the word 'Louise'
The glyph for "Louise"
A generated glyph for the word 'weapon'
The glyph for "weapon"
The two glyphs for 'Louise' and 'weapon' overlapped into one combined glyph
"Louise" and "weapon" overlaid into one glyph

Getting a good embedding isn't the hard part, the hard part is that it lives in a high-dimensional space, which doesn't make finding a good mapping down to 2D particularly easy.

To get glyph-like structures out in the first place, I fine-tuned a Stable Diffusion model with LoRA on that same glyph set from the film, then sample new ink textures from it and composite them with some noise and rotation, which is deterministic and dependends on the general embedding of the whole input.

The film's original Heptopod glyph from the training set, representing the word 'Human'
The film's original glyph for "Human," part of the training set
A glyph texture sampled from the LoRA-tuned diffusion model
A synthetic texture sampled from the LoRA-tuned diffusion model

The web interface keeps things minimal. A small chat-style button opens a translation panel where you type a word or phrase, hit "Encode", and watch the glyph render in place. From there you can download it as a PNG directly from the panel. The design takes its cue from the film's contact room, where Louise steps up to the screen separating her from the heptapods to exchange writing, so the panel opens the same way, as a small window you approach to send something across. I built the whole thing as a webpage that anyone can run themselves, using the LoRA adapters and models I upload to GitHub.

Louise and Ian approaching the heptapods in the misty contact room
The contact room, the design inspiration for the interface.
Heptopod Translator web interface showing a generated glyph
The translation panel, built from that inspiration.

What's next

When I find some more time to pursue the project, I will further work on the encoder before moving on to the decoder. I'll update this page as I go, though the project itself may well move faster than I get around to keeping the write-up in sync, so check the GitHub repo above for the current state.