Skip to content

Repository files navigation

NPC generator

An unofficial generator for use with Cyberpunk RED.

Python PEP8 lines lines lines License: GPLv3

Patreon BuyMeACoffee

Info

A generator that generates NPCs based on json configs using the specified rank and role.

Generates:

  • Description

    The nationality is selected based on the approximate number of different nationalities in Night City, and a first name and surname are generated accordingly.
    A backstory, appearance, values, lovers, enemies and friends are generated based on the core book’s generation rules.
    If an AI model is connected, an easy-to-read description of the character’s appearance and behaviour is generated.

  • Stats

    Stats are generated based on the list of stats for each role for a street rat from the rulebook: a random set is selected and scaled according to the rank. The lowest rank has a stat sum of 40, the highest has a stat sum of 80.

  • Skills

    Skills are generated based on the list of skills for the role for a street rat from the rulebook: the list is taken and scaled according to rank. The lowest rank has a skill sum of 50, the highest has a skill sum of 130.

  • Cyberware

    Cyberware is generated based on a list of cyberware unique to each role and a purchase budget that is determined by rank. The generator will attempt to buy dependent cyberware and paired cyberware. If a cyberware has modifiers, they will be added to stats/skills.

  • Armor

    If armor or shields are generated in cyberware, they will be added. Otherwise, the generator will try to buy armor according to the role's preferences. For example, media will be satisfied with Kevlar®, while solo will try to buy Metalgear®. If the budget is not enough, the generator will try to buy a cheaper armor. A body armor is generated with priority.

  • Weapon

    If a weapon was generated in the cyberware, it will be added. If there was no weapon preferred by the role among these cyberware, it will be generated according to the budget. The main weapon will be generated with priority.

    All long-range weapons are generated unloaded, the user must select the required ammunition, subtract the amount of ammunition in the inventory and insert it into the weapon.

  • Ammunition for selected weapons and grenades

    Some amount of basic ammunition will always be added. Further grenades and improved ammunition will be added according to role preference as long as there is enough money.

  • Equipment

    Different tools will be generated that best suit the selected role. The tools will not replicate cyberware with similar functionality.

  • Drugs

    If Airhypo was generated in the equipment, drugs will be generated that depend on the role of the NPC. For example, a solo will prefer Berserker, a netrunner - Sixgun, and a rockerboy will prefer Prime Time.

  • Different junk for the entourage

    Various items that have no practical use and are intended to add realism to the contents of pockets. Some of them can be used by gamemaster for spontaneous stories (photo, letter, corporate business card), hiding places (key to safe, note). Most of them are worthless, but expensive items like a gold chain can be found.

Usage

You may be a netrunner and not need such explanations, but not everyone here knows their way around a computer, choom!
This is a console application, which means that you need to do the following to get a sensible result:

  1. On the right side of the github page there is a releases section, open the last one.
  2. Download npc_generator_for_cp_red.zip and unpack it. The archive contains the executable, the configs directory, and a ready-to-edit settings.json in the same directory as the executable.
  3. Open Explorer where the npc_generator_for_cp_red.exe file is, type "cmd" in the address bar and press Enter.
  4. Now you should see a command prompt opened in the right directory where you can type commands from examples.
    Try this for starters: npc_generator_for_cp_red.exe --rank=captain --role=solo.

Calling npc_generator_for_cp_red.exe without arguments generates a captain-rank solo.

Full -h output
usage: main.py [-h]
               [--rank {private,corporal,lieutenant,captain,lieutenant_colonel,lieutenant_general,general,0,1,2,3,4,5,6}]
               [--role {rockerboy,solo,netrunner,tech,medtech,media,exec,lawman,fixer,nomad,civilian}]
               [--nationality {United States,Mexico,Japan,China,India,Philippines,Canada,Russia,Vietnam,Colombia,Brazil,South Korea,Indonesia,Australia,Argentina,Germany,United Kingdom,Chile,Pakistan,Thailand,France,Ukraine,Italy,Spain,Bangladesh,Nigeria,Poland,New Zealand,Türkiye,Netherlands,Egypt,South Africa,Ethiopia,Portugal,Nepal,Romania,Belgium,Switzerland,Iran,Sweden,Austria,Kenya,Czechia,Uzbekistan,Greece,Ireland,Ghana,Hungary,Denmark,Norway,Algeria,Saudi Arabia,Finland,Bulgaria,Azerbaijan,United Arab Emirates,Israel,Slovakia,Croatia,Georgia,Jordan,Lithuania,Bosnia & Herzegovina,Armenia,Cyprus,Latvia,Albania,Slovenia,Estonia,Palestinian Territories,North Macedonia,Luxembourg,Malta,Iceland,Bahrain,Liechtenstein}]
               [--allow-non-basic-ammo | --no-allow-non-basic-ammo]
               [--allow-grenades | --no-allow-grenades]
               [--allow-armor | --no-allow-armor]
               [--allow-cyberware | --no-allow-cyberware]
               [--allow-borgware | --no-allow-borgware]
               [--allow-drugs | --no-allow-drugs]
               [--allow-equipment | --no-allow-equipment]
               [--allow-money | --no-allow-money]
               [--allow-junk | --no-allow-junk]
               [--allow-melee-weapon | --no-allow-melee-weapon]
               [--allow-ranged-weapon | --no-allow-ranged-weapon]
               [--allow-martial-arts | --no-allow-martial-arts]
               [--allow-description | --no-allow-description]
               [--allow-lifepath | --no-allow-lifepath] [--seed SEED]
               [--model-id MODEL_ID] [--model-api-key MODEL_API_KEY]
               [--model-base-url MODEL_BASE_URL]
               [--model-language MODEL_LANGUAGE] [--flat | --no-flat]
               [--json-output | --no-json-output]
               [--log-level {CRITICAL,FATAL,ERROR,WARN,WARNING,INFO,DEBUG,NOTSET}]
               [--forbidden-skills FORBIDDEN_SKILLS [FORBIDDEN_SKILLS ...]]

options:
  -h, --help            show this help message and exit

NPC Customization:
  --rank {private,corporal,lieutenant,captain,lieutenant_colonel,lieutenant_general,general,0,1,2,3,4,5,6}
                        A measure of the development of a given NPC, where
                        private is an unskilled and unknown newcomer, and
                        general is a world-class character. Rank determines
                        how advanced an NPC's skills are and how cool his
                        equipment is. (default: captain)
  --role {rockerboy,solo,netrunner,tech,medtech,media,exec,lawman,fixer,nomad,civilian}
                        An occupation the NPC is known by on The Street.
                        `civilian` means that this is just a regular human.
                        The role can determine the equipment and the direction
                        of the NPC's skills. The default value is `solo`.
                        (default: solo)
  --nationality {United States,Mexico,Japan,China,India,Philippines,Canada,Russia,Vietnam,Colombia,Brazil,South Korea,Indonesia,Australia,Argentina,Germany,United Kingdom,Chile,Pakistan,Thailand,France,Ukraine,Italy,Spain,Bangladesh,Nigeria,Poland,New Zealand,Türkiye,Netherlands,Egypt,South Africa,Ethiopia,Portugal,Nepal,Romania,Belgium,Switzerland,Iran,Sweden,Austria,Kenya,Czechia,Uzbekistan,Greece,Ireland,Ghana,Hungary,Denmark,Norway,Algeria,Saudi Arabia,Finland,Bulgaria,Azerbaijan,United Arab Emirates,Israel,Slovakia,Croatia,Georgia,Jordan,Lithuania,Bosnia & Herzegovina,Armenia,Cyprus,Latvia,Albania,Slovenia,Estonia,Palestinian Territories,North Macedonia,Luxembourg,Malta,Iceland,Bahrain,Liechtenstein}
                        Nationality used to generate the NPC name, e.g. Russia
                        or United States. If omitted, a random nationality is
                        used. (default: None)
  --allow-non-basic-ammo, --no-allow-non-basic-ammo
                        If specified, allow non-basic ammo, such as armor
                        piercing and expansive. (default: True)
  --allow-grenades, --no-allow-grenades
                        If specified, allow grenades. (default: True)
  --allow-armor, --no-allow-armor
                        If specified, allow armor items (cyberware armor will
                        still be there). (default: True)
  --allow-cyberware, --no-allow-cyberware
                        If specified, allow cyberware. (default: True)
  --allow-borgware, --no-allow-borgware
                        If specified, allow borgware. Usually you don't want
                        regular mooks to use that cool stuff. (default: False)
  --allow-drugs, --no-allow-drugs
                        If specified, allow adding drugs. Drugs may be added
                        or not depending on airhypo generation. (default:
                        True)
  --allow-equipment, --no-allow-equipment
                        If specified, allow equipment, such as flashlight and
                        airhypo (cyberware equipment will still be there).
                        (default: True)
  --allow-money, --no-allow-money
                        If specified, allow money. (default: True)
  --allow-junk, --no-allow-junk
                        If specified, allow useless junk for flavor. (default:
                        True)
  --allow-melee-weapon, --no-allow-melee-weapon
                        If specified, allow melee weapons (brawling, martial
                        arts and cyberware weapons will still be there).
                        (default: True)
  --allow-ranged-weapon, --no-allow-ranged-weapon
                        If specified, allow ranged weapons (cyberware weapons
                        will still be there). (default: True)
  --allow-martial-arts, --no-allow-martial-arts
                        If specified, allow martial arts (brawling will still
                        be there). (default: True)
  --allow-description, --no-allow-description
                        If specified, allow AI generation of the NPC
                        description. (default: False)
  --allow-lifepath, --no-allow-lifepath
                        If specified, randomly generate the NPC Lifepath from
                        the core rulebook tables. (default: True)

Generation settings:
  --seed SEED           A number for the random engine. The same seed always
                        gives the same result when the other arguments are
                        unchanged. Zero means "use Unix epoch". (default: 0)
  --model-id MODEL_ID   Model identifier used to generate the NPC description.
                        (default: qwen/qwen3.6-35b-a3b)
  --model-api-key MODEL_API_KEY
                        API key for the OpenAI-compatible model server.
                        (default: lm-studio)
  --model-base-url MODEL_BASE_URL
                        Base URL of the OpenAI-compatible model server.
                        (default: http://localhost:1234/v1)
  --model-language MODEL_LANGUAGE
                        Language in which the model generates the NPC
                        description. (default: English)

Appearance:
  --flat, --no-flat     If specified, don't use columns. Easier for editing
                        and copy-pasting, but takes much more space. (default:
                        None)
  --json-output, --no-json-output
                        If specified, output results in JSON format. (default:
                        False)
  --log-level {CRITICAL,FATAL,ERROR,WARN,WARNING,INFO,DEBUG,NOTSET}
                        Logging level. (default: INFO)

Compatibility:
  --forbidden-skills FORBIDDEN_SKILLS [FORBIDDEN_SKILLS ...]
                        A skill that must not be generated because the target
                        module does not support it. Accepts one or more
                        values. (default: ())

Every Boolean option has a positive and negative form. Command-line arguments override values loaded from settings.json.

Balance

For balance details, see ranks.xlsx. There is a ruff explanation of every rank:

Rank number Rank name Combat number Description
0 private 7-9 weak boosters
1 corporal 8-10 boosters
2 lieutenant 10-13 starter edgerunners
3 captain 12-14 advanced edgerunners, police
4 lieutenant_colonel 13-16 high profile gangs, local corps
5 lieutenant_general 16-17 megacorps, military, mafia
6 general 17-18 MaxTac, special forces, legends

Examples of input and output data

Private (the lowest rank, punching dolls for the initial characters) Input:
--rank=0 --role=solo --allow-description

Possible output:

<=================================================================================================>

Andrea Long (United States, 21 yo)

Lifepath:

    Cultural origin: United States
    Language: English
    Personality: Shy and secretive
    Clothing style: Generic Chic (Standard, Colorful, Modular)
    Hairstyle: Mohawk
    Affectation: Tattoos
    Values most: Power
    Feelings about people: Every person is a valuable individual.
    Most valued person: A brother or sister
    Most valued possession: A photograph
    Family background: Nomad Pack
    Background details: Home was a mix of rugged trailers, vehicles, and road kombis; family, fresh food, driving,
                        fighting, and home schooling shaped childhood.
    Childhood environment: In the ruins of a deserted town or city taken over by Reclaimers.
    Family crisis: Your family is imprisoned, and you alone escaped.
    Friends:
        None
    Enemies:
        Enemy 1 - Who: Person working for you
            Cause: One of you was a business rival.
            Wronged party: You
            Resources: The local cops or other Lawmen.
            Reaction: Avoid the scum.
        Enemy 2 - Who: Government official
            Cause: Caused the other to lose face or status.
            Wronged party: They
            Resources: Themselves and a few friends.
            Reaction: Set them up for a crime or other transgression they didn't commit.
        Enemy 3 - Who: Boosterganger
            Cause: Caused a major public humiliation.
            Wronged party: You
            Resources: An entire city, government, or agency.
            Reaction: Avoid the scum.
    Tragic love affairs:
        Love affair 1 - What happened: A personal goal or vendetta came between you and your lover.
    Life goal: Get off The Street no matter what it takes.

Description:

    A jagged crimson mohawk cuts across a scalp scarred by old road burns, framing a face where a Kill Display glows
    faintly against the jawline. She wears modular leathers dyed in faded electric blue and rust, tailored to move
    without whispering. Her build is lean and unassuming, built for endurance rather than brute force, with a quiet,
    deliberate pace that never rushes. When she shifts her weight, her movements are fluid and precise, shoulders
    rolling with a practiced economy.

    Sharp cheekbones and a steady gaze give her a striking, almost polished presence, sharpened by a half-tube of
    rouge noir she applies with methodical care. She speaks little, listening with a practiced stillness that feels
    both shy and calculating. Her posture carries the quiet tension of someone who has watched too much burn, yet
    her eyes linger on people with a rare, unspoken respect. She never fidgets unnecessarily, preferring to stand
    just slightly off-center, ready to step back or step forward without breaking rhythm. The neon of the street
    reflects off her leather collar, but she keeps her hands tucked close, knuckles pale from gripping her own
    sleeves.

Has items total worth of 382eb

Stats:          Conditions:                                                   
    [4] INT         HP: 30/30 (Seriously Wounded: 15)                         
    [5] REF         TraumaTeam status: NONE                                   
    [5] DEX         Can evade bullets: False                                  
    [2] TECH        No intangible obscurement penalties: False                
    [6] COOL        Has flashes of light protection: False                    
    [4] WILL        Has ears protection: False                                
    [4] LUCK        Has breath protection: True (Anti-Smog Breathing Mask)    
    [4] MOVE                                                                  
    [4] BODY                                                                  
    [4] EMP                                                                   

Skills:
    Education                               Technique                                  Social                                  
        [4(INT)=4] Accounting                   [2(TECH)=2] AirVehicleTech                 [6(COOL)=6] Bribery                 
        [4(INT)=4] AnimalHandling               [2(TECH)=2] BasicTech                      [4(EMP)+2=6] Conversation           
        [4(INT)=4] Bureaucracy                  [2(TECH)=2] Cybertech                      [4(EMP)+2=6] HumanPerception        
        [4(INT)=4] Business                     [2(TECH)=2] Demolitions                    [6(COOL)+3=9] Interrogation         
        [4(INT)=4] Composition                  [2(TECH)=2] ElectronicsSecurityTech        [6(COOL)+2=8] Persuasion            
        [4(INT)=4] Criminology                  [2(TECH)+3=5] FirstAid                     [6(COOL)=6] PersonalGrooming        
        [4(INT)=4] Cryptography                 [2(TECH)=2] Forgery                        [6(COOL)=6] Streetwise              
        [4(INT)=4] Deduction                    [2(TECH)=2] LandVehicleTech                [6(COOL)=6] Trading                 
        [4(INT)+2=6] Education                  [2(TECH)=2] PaintDrawSculpt                [6(COOL)=6] WardrobeStyle           
        [4(INT)=4] Gamble                       [2(TECH)=2] Paramedic                  Body                                    
        [4(INT)=4] LibrarySearch                [2(TECH)=2] PhotographyFilm                [5(DEX)+2=7] Athletics              
        [4(INT)+2=6] LocalExpertYourHome        [2(TECH)=2] PickLock                       [5(DEX)=5] Contortionist            
        [4(INT)+3=7] Tactics                    [2(TECH)=2] PickPocket                     [5(DEX)=5] Dance                    
        [4(INT)=4] WildernessSurvival           [2(TECH)=2] SeaVehicleTech                 [4(WILL)=4] Endurance               
        [4(INT)+2=6] LanguageStreetslang        [2(TECH)=2] Weaponstech                    [4(WILL)+3=7] ResistTortureDrugs    
    Awareness                               Fighting                                       [5(DEX)+2=7] Stealth                
        [4(WILL)+2=6] Concentration             [5(DEX)=5] Brawling                    Ranged_Weapon                           
        [4(INT)=4] ConcealRevealObject          [5(DEX)+3=8] Evasion                       [5(REF)=5] Archery                  
        [4(INT)=4] LipReading                   [5(DEX)+3=8] MeleeWeapon                   [5(REF)+3=8] Autofire               
        [4(INT)+3=7] Perception                 [5(REF)=5] Initiative                      [5(REF)+3=8] Handgun                
        [4(INT)=4] Tracking                     [5(DEX)+1=6] MartialArts (Kung Fu)         [5(REF)=5] HeavyWeapons             
    Control                                 Performance                                    [5(REF)+3=8] ShoulderArms           
        [5(REF)=5] DriveLandVehicle             [6(COOL)=6] Acting                                                             
        [5(REF)=5] PilotAirVehicle                                                                                             
        [5(REF)=5] PilotSeaVehicle                                                                                             
        [5(REF)=5] Riding                                                                                                      
    
Cyberware:
    Fashionware [1/7]           
        Kill Display [100eb]    
    
Armor:                                           Ranged weapons:                                                                                     
    Leathers (Head) [20eb (everyday), SP=4/4]        [8(S)/8(A)] Chadran Arms "City Reaper" (poor) [50eb (costly), Damage=3d6, ROF=1, Mag=/40 ()]    
    Leathers (Body) [20eb (everyday), SP=4/4]    Melee weapons:                                                                                      
                                                     [8] Machete [50eb (costly), Damage=2d6, ROF=2]                                                  
                                                     [6] MartialArts (Kung Fu) [Damage=1d6, ROF=2]                                                   

Inventory:
    Ammo                                                  Equipment / Drugs                                     Junk                                             
        [1] Grenade (Armor-Piercing) [100eb (premium)]        [1] Anti-Smog Breathing Mask [20eb (everyday)]        [48] Eddies [1eb (cheap)]                    
        [80] Heavy Pistol (Basic) [1eb (cheap)]                                                                     [1] Area Streetmap [10eb (cheap)]            
                                                                                                                    [1] Prayer Beads [10eb (cheap)]              
                                                                                                                    [1] A pair of six-sided dice                 
                                                                                                                    [1] Half-Used Tube of Rouge Noir Lipstick    
                                                                                                                    [1] Zip Ties                                 
                                                                                                                    [1] Storage Locker Key   
Captain (equivalent of the players' starting characters) Input:
--rank=3 --role=solo --allow-description

Possible output:

<=================================================================================================>

Huang  Shan Ben  (Japan, 31 yo)

Lifepath:

    Cultural origin: Japan
    Language: Japanese
    Personality: Sneaky and deceptive
    Clothing style: Generic Chic (Standard, Colorful, Modular)
    Hairstyle: Neat and short
    Affectation: Spiked boots or heels
    Values most: Knowledge
    Feelings about people: Wipe ‘em all out and let the cockroaches take over.
    Most valued person: A pet
    Most valued possession: A photograph
    Family background: Corporate Managers
    Background details: Well-to-do, with a large home, safe neighborhood, nice cars, and a mix of private and
                        corporate education.
    Childhood environment: In a Nomad pack with roots in transport (ships, planes, caravans).
    Family crisis: Your family is imprisoned, and you alone escaped.
    Friends:
        None
    Enemies:
        Enemy 1 - Who: Ex-friend
            Cause: One of you was a romantic rival.
            Wronged party: You
            Resources: Themselves and a close friend.
            Reaction: Go into a murderous rage and try to physically rip their face off.
    Tragic love affairs:
        None
    Life goal: Save, if possible, anyone else involved in your background, like a lover or family member.

Description:

    A tailored, modular jacket drapes over a rigid Medium Armorjack, its panels shifting with practiced ease. His
    frame is lean and wiry, built for endurance rather than raw mass. Every step is economical, yet his movements
    carry a fluid, predatory grace that makes him seem to glide through crowded streets. Striking, polished features
    command attention—sharp cheekbones, a clean jawline, and an effortless, curated elegance that feels both
    expensive and deliberately understated. Subtle telemetry glows from a slim chest strap, while a discreet wrist
    rig flashes a quiet crimson tally. His eyes are fitted with tinted OptiShield lenses that catch the neon glare
    without reflecting it. He watches everything with a calculating stillness, fingers occasionally brushing a worn
    photograph tucked into his collar. His gaze lingers a fraction too long, dissecting conversations before
    offering a polished, untrustworthy smile. He treats every interaction as a ledger to be balanced, always three
    steps ahead, moving through the sprawl like a ghost in tailored fabric.

Has items total worth of 2012eb

Stats:                                       Conditions:                                                   Actions:          Abilities:                
    [6] INT                                      HP: 40/40 (Seriously Wounded: 20)                             Black Lace        Radio Communicator    
    [7-2(Medium Armorjack (Head))=5] REF         TraumaTeam status: NONE                                       Synthcoke         Handcuffs             
    [7-2(Medium Armorjack (Head))=5] DEX         Can evade bullets: False                                                                              
    [3] TECH                                     No intangible obscurement penalties: False                                                            
    [8] COOL                                     Has flashes of light protection: True (OptiShield)                                                    
    [6] WILL                                     Has ears protection: False                                                                            
    [5] LUCK                                     Has breath protection: True (Anti-Smog Breathing Mask)                                                
    [5-2(Medium Armorjack (Head))=3] MOVE                                                                                                              
    [6] BODY                                                                                                                                           
    [4] EMP                                                                                                                                            

Skills:
    Education                               Technique                                  Social                                   
        [6(INT)=6] Accounting                   [3(TECH)=3] AirVehicleTech                 [8(COOL)=8] Bribery                  
        [6(INT)=6] AnimalHandling               [3(TECH)=3] BasicTech                      [4(EMP)+2=6] Conversation            
        [6(INT)=6] Bureaucracy                  [3(TECH)=3] Cybertech                      [4(EMP)+2=6] HumanPerception         
        [6(INT)=6] Business                     [3(TECH)=3] Demolitions                    [8(COOL)+6=14] Interrogation         
        [6(INT)=6] Composition                  [3(TECH)=3] ElectronicsSecurityTech        [8(COOL)+2=10] Persuasion            
        [6(INT)=6] Criminology                  [3(TECH)+6=9] FirstAid                     [8(COOL)=8] PersonalGrooming         
        [6(INT)=6] Cryptography                 [3(TECH)=3] Forgery                        [8(COOL)=8] Streetwise               
        [6(INT)=6] Deduction                    [3(TECH)=3] LandVehicleTech                [8(COOL)=8] Trading                  
        [6(INT)+2=8] Education                  [3(TECH)=3] PaintDrawSculpt                [8(COOL)=8] WardrobeStyle            
        [6(INT)=6] Gamble                       [3(TECH)=3] Paramedic                  Body                                     
        [6(INT)=6] LibrarySearch                [3(TECH)=3] PhotographyFilm                [5(DEX)+2=7] Athletics               
        [6(INT)+2=8] LocalExpertYourHome        [3(TECH)=3] PickLock                       [5(DEX)=5] Contortionist             
        [6(INT)+6=12] Tactics                   [3(TECH)=3] PickPocket                     [5(DEX)=5] Dance                     
        [6(INT)=6] WildernessSurvival           [3(TECH)=3] SeaVehicleTech                 [6(WILL)=6] Endurance                
        [6(INT)+2=8] LanguageStreetslang        [3(TECH)=3] Weaponstech                    [6(WILL)+6=12] ResistTortureDrugs    
    Awareness                               Ranged_Weapon                                  [5(DEX)+2=7] Stealth                 
        [6(WILL)+2=8] Concentration             [5(REF)=5] Archery                     Control                                  
        [6(INT)=6] ConcealRevealObject          [5(REF)+6=11] Autofire                     [5(REF)=5] DriveLandVehicle          
        [6(INT)=6] LipReading                   [5(REF)+6=11] Handgun                      [5(REF)=5] PilotAirVehicle           
        [6(INT)+6=12] Perception                [5(REF)=5] HeavyWeapons                    [5(REF)=5] PilotSeaVehicle           
        [6(INT)=6] Tracking                     [5(REF)+6=11] ShoulderArms                 [5(REF)=5] Riding                    
    Fighting                                Performance                                                                         
        [5(DEX)+2=7] Brawling                   [8(COOL)=8] Acting                                                              
        [5(DEX)+6=11] Evasion                                                                                                   
        [5(DEX)+6=11] MeleeWeapon                                                                                               
        [5(REF)=5] Initiative                                                                                                   
    
Cyberware:
    Auditory System [1/1]                          Fashionware [2/7]           External Cyberware [1/7]    
        Discount Cyberaudio Suite [100eb] [1/1]        Kill Display [100eb]        OptiShield [500eb]      
            Radio Communicator [100eb]                 Biomonitor [100eb]                                  
    
Armor:                                                     Ranged weapons:                                                                           
    Medium Armorjack (Head) [100eb (premium), SP=12/12]        [11(S)/11(A)] Militech "Mini-Gat" [100eb (premium), Damage=2d6, ROF=1, Mag=/30 ()]    
    Medium Armorjack (Body) [100eb (premium), SP=12/12]    Melee weapons:                                                                            
                                                               [12] Naginata (excellent) [500eb (expensive), Damage=4d6, ROF=1]                      
                                                               [11] Unarmed [Damage=2d6, ROF=2]                                                      

Inventory:
    Ammo                                                  Equipment / Drugs                                     Junk                              
        [1] Grenade (Armor-Piercing) [100eb (premium)]        [1] Airhypo [50eb (costly)]                           [504] Eddies [1eb (cheap)]    
        [60] Medium Pistol (Basic) [1eb (cheap)]              [1] Handcuffs [50eb (costly)]                         [1] Zip Ties                  
                                                              [1] Black Lace [50eb (costly)]                        [1] Poker Chip                
                                                              [1] Carryall [20eb (everyday)]                                                      
                                                              [1] Anti-Smog Breathing Mask [20eb (everyday)]                                      
                                                              [1] Synthcoke [20eb (everyday)]                                                     
General (Adam Smasher) Input:
--rank=6 --role=solo --allow-description

Possible output:

<=================================================================================================>

Nancy Soto (United States, 53 yo)

Lifepath:

    Cultural origin: United States
    Language: English
    Personality: Stable and serious
    Clothing style: Generic Chic (Standard, Colorful, Modular)
    Hairstyle: Mohawk
    Affectation: Spiked boots or heels
    Values most: Honesty
    Feelings about people: People are untrustworthy. Don't depend on anyone.
    Most valued person: A parent
    Most valued possession: A piece of jewelry
    Family background: Corporate Technicians
    Background details: Middle-middle class, with a comfortable conapt or Beaverville home and corporate-run
                        technical schooling.
    Childhood environment: Spent in a safe Corp Zone walled off from the rest of the City.
    Family crisis: Your family vanished. You are the only remaining member.
    Friends:
        None
    Enemies:
        Enemy 1 - Who: Ex-lover
            Cause: One of you was a romantic rival.
            Wronged party: They
            Resources: Themselves and a few friends.
            Reaction: Go into a murderous rage and try to physically rip their face off.
        Enemy 2 - Who: Estranged relative
            Cause: Turned down the other's offer of a job or romantic involvement.
            Wronged party: You
            Resources: An entire city, government, or agency.
            Reaction: Backstab them indirectly.
        Enemy 3 - Who: Boosterganger
            Cause: Turned down the other's offer of a job or romantic involvement.
            Wronged party: You
            Resources: Themselves and a close friend.
            Reaction: Go into a murderous rage and try to physically rip their face off.
    Tragic love affairs:
        None
    Life goal: Get rid of a bad reputation.

Description:

    A sharp, geometric mohawk dyed in fading corporate blue frames a face carved by quiet suspicion. She stands
    broad-shouldered and densely muscled, her physique honed to an unyielding solidity. Despite the polished chrome
    arms—one ending in a heavy, toothed ChainRipp, the other housing a popup SMG and a compact grenade launcher—she
    moves with economical precision. Each step is measured, her cyberlegs terminating in sharply spiked heels that
    click against the pavement like a metronome.

    She wears a modular, color-blocked trench coat over sleek tactical gear, tailored to look expensive in the
    sprawl. Cybereyes glint with a faint targeting reticle, and a slim kill-display band wraps her wrist. Her beauty
    is striking but severe, accentuated by sharp cheekbones and a calm, unreadable expression.

    She rarely lingers, scanning perimeters with a steady gaze. When listening, she stands perfectly still,
    shoulders squared, waiting for others to reveal their hand first. Tapping a single finger against her thigh
    betrays her impatience with half-truths. City neon catches her chrome, but she pays it no mind, moving through
    the grime with deliberate grace.

Has items total worth of 25312eb

Stats:                                             Conditions:                                                   Actions:           Abilities:                 
    [8] INT                                            HP: 55/55 (Seriously Wounded: No, Pain Editor)                Sandevistan        Appetite Controller    
    [8-4(Metalgear® (Head))=4] REF                     TraumaTeam status: EXECUTIVE                                  Berserker          Radio Communicator     
    [8-4(Metalgear® (Head))=4] DEX                     Can evade bullets: False                                      Timewarp           Targeting Scope        
    [8] TECH                                           No intangible obscurement penalties: False                    Black Lace         Jump Booster           
    [8] COOL                                           Has flashes of light protection: True (Anti-Dazzle)           Synthcoke          Jump Booster           
    [8] WILL                                           Has ears protection: True (Level Damper)                                         Radar Detector         
    [8] LUCK                                           Has breath protection: True (Anti-Smog Breathing Mask)                           Flashlight             
    [8-4(Metalgear® (Head))=4] MOVE                                                                                                                            
    [8+2(Grafted Muscle and Bone Lace)=10] BODY                                                                                                                
    [2] EMP                                                                                                                                                    

Skills:
    Education                                   Technique                                  Social                                                     
        [8(INT)=8] Accounting                       [8(TECH)=8] AirVehicleTech                 [8(COOL)=8] Bribery                                    
        [8(INT)=8] AnimalHandling                   [8(TECH)=8] BasicTech                      [2(EMP)+3=5] Conversation                              
        [8(INT)=8] Bureaucracy                      [8(TECH)=8] Cybertech                      [2(EMP)+3=5] HumanPerception                           
        [8(INT)=8] Business                         [8(TECH)=8] Demolitions                    [8(COOL)+10=18] Interrogation                          
        [8(INT)=8] Composition                      [8(TECH)=8] ElectronicsSecurityTech        [8(COOL)+3=11] Persuasion                              
        [8(INT)=8] Criminology                      [8(TECH)+10=18] FirstAid                   [8(COOL)=8] PersonalGrooming                           
        [8(INT)=8] Cryptography                     [8(TECH)=8] Forgery                        [8(COOL)=8] Streetwise                                 
        [8(INT)=8] Deduction                        [8(TECH)=8] LandVehicleTech                [8(COOL)=8] Trading                                    
        [8(INT)+3=11] Education                     [8(TECH)=8] PaintDrawSculpt                [8(COOL)=8] WardrobeStyle                              
        [8(INT)=8] Gamble                           [8(TECH)=8] Paramedic                  Body                                                       
        [8(INT)=8] LibrarySearch                    [8(TECH)=8] PhotographyFilm                [4(DEX)+3=7] Athletics                                 
        [8(INT)+3=11] LocalExpertYourHome           [8(TECH)=8] PickLock                       [4(DEX)=4] Contortionist                               
        [8(INT)+10=18] Tactics                      [8(TECH)=8] PickPocket                     [4(DEX)=4] Dance                                       
        [8(INT)=8] WildernessSurvival               [8(TECH)=8] SeaVehicleTech                 [8(WILL)=8] Endurance                                  
        [8(INT)+3=11] LanguageStreetslang           [8(TECH)=8] Weaponstech                    [8(WILL)+10+2(Toxin Binders)=20] ResistTortureDrugs    
    Awareness                                   Ranged_Weapon                                  [4(DEX)+3=7] Stealth                                   
        [8(WILL)+3=11] Concentration                [4(REF)=4] Archery                     Control                                                    
        [8(INT)=8] ConcealRevealObject              [4(REF)+10=14] Autofire                    [4(REF)=4] DriveLandVehicle                            
        [8(INT)=8] LipReading                       [4(REF)+10=14] Handgun                     [4(REF)=4] PilotAirVehicle                             
        [8(INT)+10=18] Perception                   [4(REF)=4] HeavyWeapons                    [4(REF)=4] PilotSeaVehicle                             
        [8(INT)=8] Tracking                         [4(REF)+10=14] ShoulderArms                [4(REF)=4] Riding                                      
    Fighting                                    Performance                                                                                           
        [4(DEX)+3=7] Brawling                       [8(COOL)=8] Acting                                                                                
        [4(DEX)+10=14] Evasion                                                                                                                        
        [4(DEX)+10=14] MeleeWeapon                                                                                                                    
        [4(REF)+3(Sandevistan)=7] Initiative                                                                                                          
    
Cyberware:
    Internal Cyberware [7/7]                      Shoulders [2/2]                              Eye Sockets [2/2]                  
        Grafted Muscle and Bone Lace [1000eb]         Cyberarm [500eb] [4/4]                       Cybereye [100eb] [2/3]         
        Appetite Controller [500eb]                       Popup Ranged Weapon (SMG) [500eb]            Targeting Scope [500eb]    
        Grafted Muscle and Bone Lace [1000eb]             Popup Grenade Launcher [500eb]               Anti-Dazzle [100eb]        
        Bodyweight AutoInjector [100eb]               Cyberarm [500eb] [4/4]                       Cybereye [100eb] [1/3]         
        Toxin Binders [100eb]                             ChainRipp (excellent) [500eb]                Anti-Dazzle [100eb]        
        Radar/Sonar Implant [1000eb]              Neuralware [1/1]                             Hips [2/2]                         
        Hardened Shielding (Internal) [1000eb]        Neural Link [500eb] [2/5]                    Cyberleg [100eb] [2/3]         
    Auditory System [1/1]                                 Chipware Socket [500eb] [1/1]                Jump Booster [500eb]       
        Cyberaudio Suite [500eb] [2/3]                        Pain Editor [1000eb]                 Cyberleg [100eb] [2/3]         
            Level Damper [100eb]                          Sandevistan [500eb]                          Jump Booster [500eb]       
            Radio Communicator [100eb]            Fashionware [2/7]                                                               
                                                      Biomonitor [100eb]                                                          
                                                      Kill Display [100eb]                                                        
    
Armor:                                                 Ranged weapons:                                                                                   
    Metalgear® (Head) [5000eb (luxury), SP=18/18]          [4] Popup Grenade Launcher [500eb (expensive), Damage=6d6, ROF=1, Mag=/2 ()]                  
    Metalgear® (Body) [5000eb (luxury), SP=18/18]          [14(S)/14(A)] Popup Ranged Weapon (SMG) [500eb (expensive), Damage=2d6, ROF=1, Mag=/30 ()]    
    Bullet Proof Shield [100eb (premium), SP=10/10]    Melee weapons:                                                                                    
                                                           [14] Unarmed [Damage=3d6, ROF=2]                                                              
                                                           [15] ChainRipp (excellent) [500eb (expensive), Damage=4d6, ROF=1]                             

Inventory:
    Ammo                                                      Equipment / Drugs                                          Junk                                        
        [30] Medium Pistol (Armor-Piercing) [10eb (cheap)]        [1] Radar Detector [500eb (expensive)]                     [2495] Eddies [1eb (cheap)]             
        [2] Grenade (Smoke) [50eb (costly)]                       [1] Bullet Proof Shield [100eb (premium), SP=10/10]        [1] Cheap Necklace [20eb (everyday)]    
        [30] Medium Pistol (Basic) [1eb (cheap)]                  [1] Berserker [100eb (premium)]                                                                    
                                                                  [1] Timewarp [100eb (premium)]                                                                     
                                                                  [1] Black Lace [50eb (costly)]                                                                     
                                                                  [1] Carryall [20eb (everyday)]                                                                     
                                                                  [1] Anti-Smog Breathing Mask [20eb (everyday)]                                                     
                                                                  [1] Flashlight [20eb (everyday)]                                                                   
                                                                  [1] Synthcoke [20eb (everyday)]                                                                    

Text output layout

By default, the character sheet uses multiple columns to keep the output compact. Use --flat for a single-column layout that is easier to edit and copy, but takes considerably more vertical space.

Python package API

Python 3.13 or newer is required. Install the package from the repository and run the CLI as a module:

python -m pip install .
python -m cp_red_npc_generator --help

Build an installable wheel with:

python -m pip install build
python -m build

The library API is asynchronous:

import asyncio

from cp_red_npc_generator import GenerationRules, generate_npc

rules = GenerationRules(
    rank="captain",
    role="solo",
    nationality="United States",
    seed=123,
    model_id=None,
)

npc = asyncio.run(generate_npc(rules))

Inside an existing async application, use npc = await generate_npc(rules) instead of asyncio.run(). generate_npc() does not read command-line arguments, print output, or terminate the process. Invalid rules raise Python exceptions. It returns an Npc; use npc.to_string(flat=True) for text.

UI option discovery uses the same field definitions as argparse:

from cp_red_npc_generator import get_generation_options

for option in get_generation_options().fields:
    print(option.name, option.help, option.type, option.choices, option.default, option.group)

Each option provides its name, help text, Python type, choices, default value, group, and Boolean flag. This keeps a UI, settings.json, and command-line parsing on the same option definitions.

Pyodide

The package is designed for Pyodide running in a Chromium Web Worker. Pyodide supplies NumPy; micropip installs the built generator wheel and its pure-Python dependencies. Serve the wheel over HTTP rather than opening it from a local filesystem path.

importScripts("https://cdn.jsdelivr.net/pyodide/v314.0.2/full/pyodide.js");

const pyodide = await loadPyodide();
await pyodide.loadPackage(["numpy", "micropip"]);

await pyodide.runPythonAsync(`
import micropip
await micropip.install("./wheels/cp_red_npc_generator-0.1.0-py3-none-any.whl")
`);

const npcProxy = await pyodide.runPythonAsync(`
from cp_red_npc_generator import GenerationRules, generate_npc

await generate_npc(GenerationRules(
    rank="captain",
    role="solo",
    nationality="United States",
    seed=123,
    model_id=None,
))
`);

Destroy PyProxy objects when they are no longer needed (npcProxy.destroy()). A Web Worker and the main page have separate Pyodide instances and separate Python global state.

When AI description generation is enabled, native Python and the EXE use urllib; Pyodide uses pyodide.http.pyfetch. The configured OpenAI-compatible server must allow requests from the Foundry origin through CORS, including the Authorization and Content-Type headers and the POST method. Browser mixed-content rules also block an http:// model endpoint when Foundry is served over https://. Set allow_description=False to disable AI requests without clearing the model configuration.

The tested native environment is Python 3.13 with NumPy 2.2. Pyodide 314.0.2 uses Python 3.13 and is the selected browser target. Browser generation runs on one Worker thread; long synchronous NPC generation temporarily occupies that Worker. Network access remains asynchronous. Browser persistence, IndexedDB caching, and Foundry-specific JavaScript integration are intentionally outside this pure-Python repository.

Limitations (or todos? who knows)

  • No skill chips
  • Skills - only upgrades to street rat
  • (Almost) only items from the basic rulebook
  • No weapon modifications
  • No exotic weapons

License

The original source code of this project is licensed under GNU GPLv3.

Third-party intellectual property

This tool is not intended to replace the Cyberpunk RED Core Rulebook.

Cyberpunk, Cyberpunk RED, Night City, and related names, terminology, game data, and other intellectual property belong to R. Talsorian Games and/or their respective licensors. Such material is not licensed under GNU GPLv3 by this repository.

NPC Generator is unofficial content provided under the Homebrew Content Policy of R. Talsorian Games and is not approved or endorsed by RTG. This content references materials that are the property of R. Talsorian Games and its licensees.

About

A generator that generates Cyberpunk Red NPCs based on json configs using the specified rank and role.

Topics

Resources

Stars

6 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages