Skip to main content
seedrecover.py recovers BIP39, SLIP39, and Electrum seed phrases where words are missing, incorrect, or reordered. It can also be launched with no arguments to display a simple graphical interface. Minimum invocation (GUI):
python seedrecover.py
Minimum invocation (CLI with known address):
python seedrecover.py --wallet-type bip39 \
  --addrs <YOUR-ADDRESS> \
  --mnemonic "word1 word2 ... wordN"
FlagArgumentDescription
--wallet-typeTYPESpecify the wallet/coin type when not using a wallet file. Common values: bip39, ethereum, litecoin, cardano, dogecoin, bch, ripple, tron, solana, xlm, dash, digibyte, vertcoin, monacoin, groestlecoin, polkadotsubstrate, stacks, zilliqa, helium, elrond, tezos, aezeed, electrum1, electrum2, ethereumvalidator, hederaed25519.
--walletFILEThe wallet file to use (autodetects wallet type).
--mpkXPUB-OR-HEXMaster public key (xpub, ypub, or zpub) instead of individual addresses.
--pathlistFILEA file containing a list of BIP32 derivation paths to search simultaneously.
--bip32-pathPATH [PATH ...]One or more BIP32 derivation paths (e.g., m/44'/0'/0'/0). Default: BIP44, BIP49, and BIP84 account 0.
--substrate-pathPATH [PATH ...]Substrate derivation path(s) for Polkadot (e.g., //hard/soft).
--languageLANG-CODEBIP39 wordlist language (default: auto-detected from mnemonic).
--force-p2shForce checking P2SH SegWit addresses on all derivation paths (required for CoolWallet S with P2SH accounts).
--force-p2trForce checking Taproot (P2TR) addresses on all paths.
--force-bip44Force checking BIP44 legacy addresses even if they do not match the supplied address.
--force-bip84Force checking BIP84 native SegWit addresses even if they do not match the supplied address.
--disable-p2shDisable P2SH SegWit address checking.
--disable-p2trDisable Taproot address checking.
--disable-bip44Disable BIP44 legacy address checking.
--disable-bip84Disable BIP84 native SegWit address checking.
--checksinglexpubaddressCheck non-standard single-address wallets (e.g., Atomic Wallet, MyBitcoinWallet).
FlagArgumentDescription
--addrsADDRESS [...]One or more known addresses in the wallet. Used to verify candidate seeds.
--addr-limitCOUNTHow many addresses to generate and check per derivation path. Higher values are slower but necessary if the target address is not account index 0.
--addr-start-indexCOUNTThe index at which --addr-limit starts counting (useful for wallets like Wasabi that may not start at index 0).
--addressdbFILEPath to an address database file. Use instead of --addrs when you do not have a specific known address.
If you do not have a known address, you can create an Address Database from the blockchain. There is no significant performance penalty for using one.
Example — address limit of 10
python seedrecover.py --wallet-type bip39 \
  --addrs bc1qv87qf7prhjf2ld8vgm7l0mj59jggm6ae5jdkx2 \
  --addr-limit 10 \
  --mnemonic "element entire sniff tired miracle solve shadow scatter hello never tank side sight isolate sister uniform advice pen praise soap lizard festival connect"
FlagArgumentDescription
--mnemonicMNEMONICYour best guess of the mnemonic. If omitted you will be prompted (GUI or terminal).
--mnemonic-promptPrompt for the mnemonic via the terminal instead of the GUI.
--mnemonic-lengthCOUNTExpected word count of the correct mnemonic (default: auto-detected).
--tokenlistFILEBIP39 word list formatted as a tokenlist, for descrambling or recovering seeds with unknown words.
--keep-tokens-orderDo not permute token order; use tokens in file order.
--max-tokensCOUNTMaximum number of tokens to combine per seed candidate.
--min-tokensCOUNTMinimum number of tokens to combine per seed candidate.
--seedlistFILE or -File of complete seed phrases to test, one per line. Use - for stdin.
--multi-file-seedlistLoad a seedlist split across multiple files with the suffix _XXXX.txt.
--listseedsPrint all seed combinations that would be tried, then exit.
--savevalidseedsFILESave all seeds that pass checksum validation to this file.
--savevalidseeds-filesizeCOUNTMaximum number of valid seeds per output file; additional files are auto-incremented.
Example — tokenlist descramble
python seedrecover.py --wallet-type bip39 \
  --addrs 17GR7xWtWrfYm6y3xoZy8cXioVqBbSYcpU \
  --tokenlist ./my_words.txt \
  --mnemonic-length 12
seedrecover.py automatically runs four phases searching for single and double typos (including completely wrong words). You can override these defaults.
FlagArgumentDescription
--typosCOUNTMaximum number of word-level mistakes to try.
--big-typosCOUNTMaximum number of “big” mistakes — substituting an entirely different BIP39 word. Default: 0 (auto).
--min-typosCOUNTEnforce a minimum number of mistakes per guess.
--close-matchCUTOFFSimilarity threshold for close-word matching (0.0–1.0, default: 0.65). Lower values cast a wider net.
--passphraseThe mnemonic is augmented with a BIP39 or Electrum 2.x passphrase that you know. Prompts interactively.
--passphrase-argPASSPHRASE [...]Supply the known passphrase directly as an argument.
--passphrase-listFILEFile containing a list of passphrases to test alongside each seed candidate.
--passphrase-promptPrompt for the passphrase via the terminal.
--transform-wordswapsCOUNTTest swapping this many pairs of words within the mnemonic.
--seed-transform-trezor-common-mistakesCOUNTApply common Trezor-specific seed transcription mistakes.
--skipCOUNTSkip this many initial seed candidates (to resume a search without autosave).
--max-etaHOURSRefuse to start if estimated completion exceeds this value (default: 168 hours).
--no-etaDisable ETA calculation.
--no-dupchecks / -dDisable duplicate seed checking to save memory. Specify multiple times for additional effect.
FlagArgumentDescription
--slip39Recover a SLIP39 seed share (Shamir’s Secret Sharing).
--share-lengthCOUNTOverride the auto-detected share length (20 or 33 words).
Example — fix a damaged share
python seedrecover.py --slip39 \
  --mnemonic "hearing echo academic acid deny bracelet playoff exact fancy various evidence standard adjust muscle parcel sled crucial amazing mansion losing" \
  --typos 2
Example — recover a share with missing words
python seedrecover.py --slip39 \
  --mnemonic "hearing echo academic acid deny bracelet playoff exact fancy various evidence standard adjust muscle parcel sled crucial amazing mansion" \
  --big-typos 2
FlagArgumentDescription
--threadsCOUNTNumber of worker threads (default: logical CPU cores for CPU mode; physical cores for GPU mode).
--workerID/TOTALSplit the search across multiple machines. Example: --worker 2/4 runs the second quarter of the search. Supports multi-slice assignment: --worker 1,2/4.
--autosaveFILESave progress every 5 minutes. Restores from the file if it already exists.
--restoreFILERestore progress from an autosave file. Must be the only argument.
--performanceRun a continuous performance benchmark (Ctrl-C to exit).
--skip-worker-checksumSkip per-worker seed checksum validation (reduces accuracy, increases speed in some distributed setups).
GPU acceleration in seedrecover.py supports BIP39 seeds and Electrum seeds.
FlagArgumentDescription
--enable-openclEnable OpenCL-based GPU acceleration.
--opencl-infoList available GPU platforms and devices, then exit.
--opencl-platformID [ID ...]OpenCL platform ID(s) to use (default: auto).
--opencl-devicesID1 ID2 ...Space-separated device IDs within the chosen platform (default: all).
--opencl-workgroup-sizeCOUNT [ID ...]Batch size for OpenCL work groups.
--force-checksum-in-generatorMove seed checksum calculation to the main thread (can improve performance for 24-word seeds).
Example — GPU-accelerated BIP39 recovery
python seedrecover.py --wallet-type bip39 \
  --addrs bc1qv87qf7prhjf2ld8vgm7l0mj59jggm6ae5jdkx2 \
  --mnemonic "element entire sniff tired miracle solve shadow scatter hello never tank side sight isolate sister uniform advice pen praise soap lizard festival connect" \
  --enable-opencl
FlagArgumentDescription
--no-guiForce disable GUI elements; use terminal-only mode.
--no-progressDisable the progress bar.
--no-pauseNever pause before exiting (default: auto).
--version / -vShow full version information and exit.
--disablesecuritywarnings / --dswDisable security warning messages.
--beep-on-findPlay an audible alert when a seed is found.

Build docs developers (and LLMs) love