Offline BIP39 English mnemonic generation with mandatory operating-system CSPRNG entropy and optional local supplemental entropy.
Run this only on a trusted offline machine. Review the code, install dependencies before going offline, and keep generated mnemonics away from cameras, printers, cloud sync, clipboard tools, and networked services.
The original webcam/audio/mouse implementation is preserved unchanged under legacy/. The maintained generator does not use webcam, microphone, mouse tracking, network access, telemetry, clipboard, audio output, or video output. Optional terminal QR output is available only when --qr is passed.
Current project version: 2.3.0.
The maintained CLI is tested on Windows and Linux with Python 3.11, 3.12, and 3.13 through GitHub Actions.
Python 3.11 or newer is recommended.
Install the CLI from a local checkout:
python -m pip install -r requirements.txt
python -m pip install .
entropyseed --self-testThe installed command is:
entropyseedYou can also run the repository entry point directly:
python -m pip install -r requirements.txt
python seedgen.py --self-test
python seedgen.pyThe generator uses the Python standard library plus qrcode for the optional terminal QR output. pytest is listed for the test suite.
Show help:
python seedgen.py --helpGenerate a 12-word mnemonic:
python seedgen.pyGenerate a 24-word mnemonic:
python seedgen.py --strength 256Generate a mnemonic and then print a terminal QR code containing it:
python seedgen.py --qrAdd hidden manual typing entropy:
python seedgen.py --manualAdd dice-roll entropy:
python seedgen.py --diceAdd timer jitter:
python seedgen.py --timer-jitterGenerate 24 words with manual, dice, timer jitter, and confirmation:
python seedgen.py --strength 256 --manual --dice --timer-jitter --confirmRun internal checks without generating or printing a mnemonic:
python seedgen.py --self-testAfter installing from source, replace python seedgen.py with entropyseed in the examples above.
- Disconnect networking before generation.
- Use a trusted, clean operating system and terminal.
- Run
python seedgen.py --self-testbefore generating a mnemonic. - Write the mnemonic by hand on durable offline media.
- Verify the written words before funding any wallet.
- Store backups according to your own risk model.
When --confirm is used, the program selects 4 random word positions and asks you to re-enter those words.
When --qr is used, the program prints a warning and then displays a QR code in the terminal containing the mnemonic. QR output is disabled by default, is not saved to disk, and should only be displayed in a private offline setting because it can be scanned or photographed easily.
OS CSPRNG entropy from secrets.token_bytes is always included and cannot be disabled. Manual typing, dice rolls, and timer jitter are supplemental only.
Dice input accepts digits 1 through 6; spaces are ignored. For 12-word generation, at least 50 dice rolls are required. For 24-word generation, at least 99 dice rolls are required.
Timer jitter displays a short collection message and progress dots. It is collected in memory and should complete quickly.
By default and by design, this project never saves these to disk:
- QR codes
- audio
- video
- seed material
- entropy material
- mnemonic text
The --qr option prints a QR code in the terminal only. It does not write an image file or mnemonic text file.
Clipboard support is disabled. Write the mnemonic down using your own offline backup process.
Passing tests and self-tests only check expected software behavior. They do not prove the operating system, terminal, firmware, hardware, or physical environment is safe.
Do not include generated seed material, mnemonics, entropy, QR codes, audio, video, screenshots, or wallet-private details in bug reports or public issues.
python -m pytest -q
python seedgen.py --help
python seedgen.py --self-testseedgen.py- maintained CLI entry point.entropyseed/- maintained implementation.tests/- unit tests.legacy/- preserved original implementation and README.