Skip to content
Generate consistent easier-to-remember codenames from strings and numbers.
Branch: master
Clone or download
stemail23 and jjmontesl Link to JavaScript port (#4)
* Link to JavaScript port
Latest commit d8c7327 Nov 2, 2018


Generate consistent easier-to-remember codenames from strings and numbers.


Codenamize is a command line tool and Python library that returns consistent names for objects, by joining adjectives and words together. These are easier to remember and write down than pure numbers, and can be used instead or along UUIDs, GUIDs, hashes (MD5, SHA...), network addresses and other difficult to remember strings.

This can be used to replace identifiers or codes when presenting those to users. As words are easier to identify and remember for humans, this module maps Python objects to easy to remember words.

There are also Ruby, and JavaScript ports available.

How to install

1. easy_install codenamize
2. pip install codenamize
3. git clone
    a. cd codenamize
    b. run python
4. wget
    a. unzip the downloaded file
    b. cd into codenamize-* directory
    c. run python

Usage from Python

Import the codenamize function:

>>> from codenamize import codenamize

Consecutive numbers yield differentiable codenames:

>>> codenamize("1")
>>> codenamize("2")

If you later want to add more adjectives, your existing codenames are retained as suffixes:

>>> codenamize("11:22:33:44:55:66")
>>> codenamize("11:22:33:44:55:66", 2)

Note that integers are internally converted to strings before hashing:

>>> codenamize(1)

Other options (max characters, join character, capitalize):

>>> codenamize(0x123456aa, 2, 3, '', True)
>>> codenamize(0x123456aa, 2, 0, '', True)
>>> codenamize(0x123456aa, 5, 0, ' ', True)
'Spotty Disagreeable Modern Brawny Eminent Bear'
>>> codenamize(0x123456aa, 4, 0, ' ', False)
'disagreeable modern brawny eminent bear'

Usage as command line tool

After installing, run codenamize --help for help:

usage: codenamize [-h] [-p PREFIX] [-m MAXCHARS] [-j JOIN] [-c] [--space]
                  [--tests] [--version]
                  [strings [strings ...]]

Generate consistent easier-to-remember codenames from strings and numbers.

positional arguments:
  strings               One or more strings to codenamize.

optional arguments:
  -h, --help            show this help message and exit
  -p PREFIX, --prefix PREFIX
                        number of prefixes to use
  -m MAXCHARS, --maxchars MAXCHARS
                        max word characters (0 for no limit)
  -a HASH_ALGO, --hash_algorithm HASH_ALGO
                        the algorithm to use to hash the input value
                        (default: md5)
  -j JOIN, --join JOIN  separator between words (default: -)
  -c, --capitalize      capitalize words
  --space               show codename space for the given arguments
  --tests               show information and samples
  --list_algorithms     List the hash algorithms available
  --version             show program's version number and exit


For numbers 100000-100009, show codenames with 0-2 adjectives and different options:

OBJ       ADJ0-MAX5    ADJ1-MAX5         ADJ2-MAX5  ADJ-0, ADJ-1, ADJ-2 (capitalized, empty join character)
100001         boat   funny-boat   real-funny-boat  Community, RacialCommunity, PluckyRacialCommunity
100002        award  first-award  tidy-first-award  Repeat, UptightRepeat, HelpfulUptightRepeat
100003         rush   super-rush  equal-super-rush  Intention, ExpensiveIntention, JazzyExpensiveIntention
100004        uncle   calm-uncle   icky-calm-uncle  March, SubduedMarch, AdamantSubduedMarch
100005        salad   warm-salad   true-warm-salad  Plant, QuickestPlant, ReminiscentQuickestPlant
100006         gift   witty-gift    odd-witty-gift  Estimate, CreepyEstimate, SpectacularCreepyEstimate
100007          son     zany-son    gaudy-zany-son  Truck, MiniatureTruck, OptimalMiniatureTruck
100008        angle   damp-angle  dusty-damp-angle  Steak, SpectacularSteak, RightfulSpectacularSteak
100009         link   utter-link   null-utter-link  Bike, ImportantBike, SweetImportantBike

Codename space sizes

In selecting the number of adjectives and max chars to use, consider how many codenames you need to fit the number of objects you'll handle, since the probability of collision increases with the number of different objects used.

0 adj (max 3 chars) = 115 combinations
0 adj (max 4 chars) = 438 combinations
0 adj (max 5 chars) = 742 combinations
0 adj (max 6 chars) = 987 combinations
0 adj (max 7 chars) = 1176 combinations
0 adj (max 0 chars) = 1525 combinations
1 adj (max 3 chars) = 2760 combinations
1 adj (max 4 chars) = 56940 combinations
1 adj (max 5 chars) = 241150 combinations
1 adj (max 6 chars) = 492513 combinations
1 adj (max 7 chars) = 789096 combinations
1 adj (max 0 chars) = 1701900 combinations
2 adj (max 3 chars) = 66240 combinations
2 adj (max 4 chars) = 7402200 combinations
2 adj (max 5 chars) = 78373750 combinations
2 adj (max 6 chars) = 245763987 combinations
2 adj (max 7 chars) = 529483416 combinations
2 adj (max 0 chars) = 1899320400 combinations

An example is shown by running codenamize --tests .

Other versions

  • Concode - Ruby port (thanks to Danny Ben Shitrit)
  • Codenamize JS - JavaScript port (by Steven Barlow)


Codenamize is released under MIT license.

For full license see the LICENSE file.

You can’t perform that action at this time.