---
title: "Horis: good-enough random name generator"
url: https://ad301.org
---

Like many computer science students, I am terrible at naming things. That’s why I created Horis, a python script that is good at creating cool sounding names without to much effort.

I like space…

… and as such, I also like names of space missions. Galileo, Sagittarius, Copernicus, etc. To make sure my projects have a similar vibe without ever actually using the same names from these mission I let Gemini 4.5 Flash generate a list of known “space mission words”:

Ares, Cassiopeia, Castor, Pollux, Perseus, Andromeda, Pegasus, Centaurus, Vulcan, Odyssey, Daedalus, Icarus, Argos, Chimera, Hydra, Nebula, Comet, Aurora, Meteor, Globus, Equinox, Solstice, Epsilon, Zeta, Ursa, Polaris, Dorado, Eridanus, Forax, Serpens, Caelus, Ariel, Oberon, Umbriel, Miranda, Titania, Puck, Himalia, Elara, Pasiphae, Thebe, Amalthea, Metis, Callirrhoe, Leda, Europa, Ganymed, Triton, Charon.

Then, to get some professional flair into it I also wanted to include latin sounding words, to off to the LLM we go:

Hyperion, Aequitas, Alatus, Altus, Aperio, Arcus, Audax, Axis, Caelus, Celer, Clarus, Communis, Decus, Destino, Ducatus, Fides, Finis, Fortis, Gravitas, Gratus, Illustris, Imperium, Inceptum, Lapis, Liber, Linea, Lumen, Magnus, Melius, Meta, Movere, Nascens, Nitor, Notus, Pondus, Portus, Praxis, Primas, Probo, Pulsa, Radius, Rectus, Regulus, Sidus, Statio, Summus, Tenebra, Tergum, Verto, Victor, Vigilans.

Combining the names

To generate new names from this list of presets, I wanted to combine them in a controlled randomized way. We begin by sampling two words from the list (these could each either be latin or space themed since they are stored in the same list):

word_1, word_2 = random.sample(source_words, 2)

# Example:
# Argos + Primas

Then, we will cut each word - according to some random offsets - roughly in half while taking the first half from the first word and the second half from the second word:

cut_1_min, cut_1_max = 2, len(word_1) - 1
cut_1 = random.randing(cut_1_min, cut_1_max)
segment_1 = word_1[:cut_1]

# Same for word_2:
segment_2 = word_2[cut_2:]

# Example
# Ar (cut at 3) + mas (cut at 4)

This gives us the final output:

Armas

which we could use for our projects. Other examples after running this a bunch of times:

Gea, Caas, Umbel, Argota, Trita, Lis, Solsa, Alax, ...

The rate of actual good names is quite high, although there are bad ones aswell:

Prtis, Glx, Tergns, ...

That being said, I had to ignore a lot of good names to get these bad ones.

Try it out yourself

Obviously the code is open source:

Link to Horis on Codeberg.org


Comments

Leave a comment


https://ad301.org/ [Horis: good-enough random name generator] [+]

0,0-1

-- VISUAL --