Repository files navigation

bioLOLPython

PyPI versionPythonTestsLicense: MITStreamlit

A time capsule of internet slang eras, doubling as a bioinformatics scripting language.

demo

Table of Contents

Why This Exists

As someone who moved between countries and languages, I've always paid attention to how people actually talk — the slang, the in-jokes, the words that date you to a specific moment online. Moving to the US, I went through the same process with English internet culture: learning what "I can has" meant in 2008, what "no cap" meant in 2020, and what "skibidi" means now.

Slang is ephemeral. The words people use to say "this is good" rotate every few years, and each generation's vocabulary becomes incomprehensible to the next. This project treats that as a feature: each era of internet slang becomes a selectable dialect for the same set of DNA analysis operations. The biology doesn't change — only the way you talk to it.

bioLOLPython is a time capsule. New dialects are generated quarterly from whatever is trending, so the project accumulates a running record of how the internet spoke at each point in time.

Background

LOLCODE is an esoteric programming language created in 2007 by Adam Lindsay, based on lolspeak — the broken-English caption style from the lolcat meme era. LOLPython, by Andrew Dalke, adapted the concept into a Python transpiler.

bioLOLPython extends LOLPython with bioinformatics commands and a dialect system that maps internet slang from different eras to the same DNA analysis operations.

Installation

From PyPI:

pip install bioLOLPython

Or install with pipx for an isolated CLI tool:

pipx install bioLOLPython

For development:

git clone https://github.com/ChenHsieh/bioLOLPython.git
cd bioLOLPython
pip install -e .

Quick Start

HAI GENZOME 1.0
DNA GO X ITZ "ATGCGTAC"
GC BOMB X
TRANSLATE X
VISIBLE "protein: " + X
KTHXBYE

Save as hello.lolz and run:

bioLOL hello.lolz

Or use Chinese internet slang:

666 基因组
安排 X 是 "ATGCGTAC"
YYDS检测 X
翻译 X
xswl "蛋白质: " + X
撤了
bioLOL --dialect wangyuyan hello_cn.lolz

Or brainrot:

SKIBIDI GENOME
SIGMA X RIZZ "ATGCGTAC"
AURA CHECK X
LOOKSMAX X
HAWK TUAH "protein: " + X
MOGGER OUT
bioLOL --dialect brainrot hello_brainrot.lolz

Dialects

Each dialect represents a different era of internet slang. The biology stays the same — only the syntax changes.

DialectEraVibe
lolcat~2005-2012I CAN HAS BIOINFORMATICS?
taiwan_ptt~2010-2020484很純?PTT/Dcard鄉民用語 (Taiwanese internet slang)
wangyuyan~2015-2020666这基因组YYDS (Chinese internet slang)
gen_z~2018-2023no cap this DNA is bussin fr fr
brainrot~2023-2026skibidi DNA sigma rizz

New dialects are generated quarterly by AI based on current internet trends. For the full gallery with command cheat sheets, see GALLERY.md.

Side-by-side comparison

Operationlolcatgen_zbrainrot
StartHAI GENZOMEYO ITS GIVING GENOMESKIBIDI GENOME
Declare DNADNA GO X ITZ "ATGC"NO CAP X IS "ATGC"SIGMA X RIZZ "ATGC"
GC contentGC BOMB XVIBE CHECK XAURA CHECK X
Reverse complementREVERSE THAT XUNO REVERSE XFANUM TAX X
TranscribeTRANSCRIBE XMAIN CHARACTER XEDGING X
TranslateTRANSLATE XGLOW UP XLOOKSMAX X
ComplementCOMPLEMENT XMIRROR CHECK XREVERSE UNO X
LengthHOW LONG XBESTIE HOW LONG XGYATT HOW LONG X
Find ORFFIND ORF XUNDERSTOOD THE ASSIGNMENT XSIGMA GRIND X
Motif searchMOTIF HUNT X FOR "CCC"LIVING RENT FREE X FOR "CCC"SUSSY SEARCH X FOR "CCC"
MutateI CRAVE VIOLENCE XCAUGHT IN 4K XONLY IN OHIO X
AlignALIGN A WIT BRIZZ CHECK A AND BMEWING CONTEST A VS B
PrintVISIBLE "..." + XSPILL "..." + XHAWK TUAH "..." + X
EndKTHXBYEPERIODTMOGGER OUT

Commands

bioLOLPython supports 14 biological operations, each mapped to dialect-specific syntax:

CommandDescriptionOutput
DeclareDefine a named DNA sequence
GC contentCalculate GC percentageGC content: 50.00%
Reverse complementReverse complement a sequenceModifies variable in place
TranscribeDNA → RNA (T→U)Modifies variable in place
TranslateDNA → protein (codon table)Modifies variable in place
ComplementComplement without reversingModifies variable in place
LengthSequence length in basesX is 8 bases long
Find ORFFind first open reading frame (ATG…stop)ORF sequence and length
Motif searchFind all occurrences of a patternPositions of each match
MutateRandom single-base substitutionReports position and change
AlignGlobal pairwise alignment (Biopython)Similarity score and rating
PrintPrint strings and/or variablesSupports + concatenation
Start / EndProgram delimitersGreeting message on start

DNA sequences are validated against IUPAC nucleotide codes (ACGTUNRYSWKMBDHV) on declaration.

Usage

Run a script

bioLOL script.lolz # default (lolcat)
bioLOL --dialect gen_z script.lolz # Gen Z mode
bioLOL --dialect brainrot script.lolz # brainrot mode

Interactive REPL

bioLOL # lolcat REPL
bioLOL --dialect brainrot # brainrot REPL

Web interface

Try it at bioLOL.streamlit.app — includes a dialect selector and example scripts for each era.

To run locally:

pip install streamlit
streamlit run streamlit_app.py

Fetch community dialects

bioLOL --list-dialects # show available dialects
bioLOL --update # fetch latest from registry (24h cache)
bioLOL --update --force # bypass cache

User dialects are stored in ~/.bioLOL/dialects/.

Creating a New Dialect

Dialects are YAML files. Drop one into ~/.bioLOL/dialects/ for personal use, or add it to bioLOLPython/dialects/definitions/ and open a PR.

YAML format

name: mydialectera: "~2025-2026"description: "One-line description of the vibe."commands:
init:
pattern: "MY START COMMAND"greeting: "Welcome message with emoji"end:
pattern: "MY END COMMAND"declare:
pattern: 'MY DECLARE {name} WITH {seq}'reverse:
pattern: "MY REVERSE {name}"gc_content:
pattern: "MY GC {name}"response: "GC content: {value:.2f}%"print:
pattern: "MY PRINT"transcribe:
pattern: "MY TRANSCRIBE {name}"translate:
pattern: "MY TRANSLATE {name}"align:
pattern: "MY ALIGN {a} WITH {b}"response: "Score: {score:.2f} {rating}"mutate:
pattern: "MY MUTATE {name}"response: "Mutated {name} at pos {pos}: {old} -> {new}"length:
pattern: "MY LENGTH {name}"response: "{name} is {value} bases"complement:
pattern: "MY COMPLEMENT {name}"find_orf:
pattern: "MY ORF {name}"orf_found: "ORF: {orf} ({length} bp)"orf_missing: "No ORF in {name}"motif:
pattern: 'MY MOTIF {name} FOR {pattern}'found: "Found {count} match(es) for '{pattern}' in {name}:"position: " pos {start}-{end}"not_found: "No matches for '{pattern}' in {name}"examples:
GC Content: | MY START COMMAND MY DECLARE X WITH "ATGCATGC" MY GC X MY END COMMAND

All 14 commands are required. The dialect is validated on load.

Pattern placeholders

PlaceholderCaptures
{name}A variable name (word characters)
{a}, {b}Variable names for two-sequence commands
{seq}A quoted DNA sequence (e.g., "ATGC")
{pattern}A quoted search pattern

Generate with AI

Use the generator script to create a dialect with the Claude API:

# Specify name, era, and description
python scripts/generate_dialect.py "cottagecore""~2020-2022" \
"gentle pastoral internet aesthetic meets DNA" \
--validate \
-o bioLOLPython/dialects/definitions/cottagecore.yaml
# Or let Claude pick the name and era from a theme
python scripts/generate_dialect.py \
--auto "what's trending on TikTok right now" \
--validate \
-o bioLOLPython/dialects/definitions/new.yaml

Requires ANTHROPIC_API_KEY environment variable and pip install anthropic.

Auto-generation via GitHub Actions

A GitHub Action runs quarterly to generate a new dialect based on current internet trends. It:

  1. Calls the Claude API to generate a dialect YAML
  2. Validates the output against the required schema
  3. Runs the full test suite
  4. Opens a PR for human review

To trigger manually: Actions > "Generate New Dialect" > Run workflow. You can optionally provide a custom theme.

Requires the ANTHROPIC_API_KEY repository secret (Settings > Secrets > Actions).

Examples

Example scripts are in the examples/ directory:

FileDialectWhat it does
test_bio.lolzlolcatGC content, transcription, translation
test_alignment.lolzlolcatPairwise sequence alignment
test_violence.lolzlolcatRandom mutation
test_transcribe.lolzlolcatDNA → RNA
test_translate.lolzlolcatDNA → protein
gen_z_demo.lolzgen_zFull sequence analysis workflow
brainrot_demo.lolzbrainrotFull sequence analysis workflow
wangyuyan_demo.lolzwangyuyanFull sequence analysis workflow (Chinese)
taiwan_ptt_demo.lolztaiwan_pttFull sequence analysis workflow (Taiwanese)

Run any example:

bioLOL examples/test_bio.lolz
bioLOL --dialect gen_z examples/gen_z_demo.lolz
bioLOL --dialect brainrot examples/brainrot_demo.lolz

Running Tests

pip install pytest
pytest

96 tests covering the BioSeq class, interpreter commands across all dialects, and dialect loading/validation.

Requires Python >= 3.8. Dependencies: biopython, ply, pyyaml.

License

MIT

Contributing

Contributions welcome — especially new dialects. The easiest way to contribute:

  1. Write a YAML dialect file following the format above
  2. Add your dialect name to bioLOLPython/dialects/definitions/index.txt
  3. Add example scripts to examples/
  4. Run pytest to verify
  5. Open a PR

Or use the AI generator as a starting point and customize from there.

Acknowledgments

  • LOLPython by Andrew Dalke (public domain) — the original inspiration
  • Bioinformatics extensions, dialect system, and curation by Chen Hsieh
  • Development assisted by Claude (Anthropic) and ChatGPT (OpenAI)
  • Every generation of internet users who invented words that made the previous generation confused

About

Analyze bio sequences with internet slang

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

bioLOLPython

PyPI versionPythonTestsLicense: MITStreamlit

A time capsule of internet slang eras, doubling as a bioinformatics scripting language.

demo

Table of Contents

Why This Exists

As someone who moved between countries and languages, I've always paid attention to how people actually talk — the slang, the in-jokes, the words that date you to a specific moment online. Moving to the US, I went through the same process with English internet culture: learning what "I can has" meant in 2008, what "no cap" meant in 2020, and what "skibidi" means now.

Slang is ephemeral. The words people use to say "this is good" rotate every few years, and each generation's vocabulary becomes incomprehensible to the next. This project treats that as a feature: each era of internet slang becomes a selectable dialect for the same set of DNA analysis operations. The biology doesn't change — only the way you talk to it.

bioLOLPython is a time capsule. New dialects are generated quarterly from whatever is trending, so the project accumulates a running record of how the internet spoke at each point in time.

Background

LOLCODE is an esoteric programming language created in 2007 by Adam Lindsay, based on lolspeak — the broken-English caption style from the lolcat meme era. LOLPython, by Andrew Dalke, adapted the concept into a Python transpiler.

bioLOLPython extends LOLPython with bioinformatics commands and a dialect system that maps internet slang from different eras to the same DNA analysis operations.

Installation

From PyPI:

pip install bioLOLPython

Or install with pipx for an isolated CLI tool:

pipx install bioLOLPython

For development:

git clone https://github.com/ChenHsieh/bioLOLPython.git
cd bioLOLPython
pip install -e .

Quick Start

HAI GENZOME 1.0
DNA GO X ITZ "ATGCGTAC"
GC BOMB X
TRANSLATE X
VISIBLE "protein: " + X
KTHXBYE

Save as hello.lolz and run:

bioLOL hello.lolz

Or use Chinese internet slang:

666 基因组
安排 X 是 "ATGCGTAC"
YYDS检测 X
翻译 X
xswl "蛋白质: " + X
撤了
bioLOL --dialect wangyuyan hello_cn.lolz

Or brainrot:

SKIBIDI GENOME
SIGMA X RIZZ "ATGCGTAC"
AURA CHECK X
LOOKSMAX X
HAWK TUAH "protein: " + X
MOGGER OUT
bioLOL --dialect brainrot hello_brainrot.lolz

Dialects

Each dialect represents a different era of internet slang. The biology stays the same — only the syntax changes.

DialectEraVibe
lolcat~2005-2012I CAN HAS BIOINFORMATICS?
taiwan_ptt~2010-2020484很純?PTT/Dcard鄉民用語 (Taiwanese internet slang)
wangyuyan~2015-2020666这基因组YYDS (Chinese internet slang)
gen_z~2018-2023no cap this DNA is bussin fr fr
brainrot~2023-2026skibidi DNA sigma rizz

New dialects are generated quarterly by AI based on current internet trends. For the full gallery with command cheat sheets, see GALLERY.md.

Side-by-side comparison

Operationlolcatgen_zbrainrot
StartHAI GENZOMEYO ITS GIVING GENOMESKIBIDI GENOME
Declare DNADNA GO X ITZ "ATGC"NO CAP X IS "ATGC"SIGMA X RIZZ "ATGC"
GC contentGC BOMB XVIBE CHECK XAURA CHECK X
Reverse complementREVERSE THAT XUNO REVERSE XFANUM TAX X
TranscribeTRANSCRIBE XMAIN CHARACTER XEDGING X
TranslateTRANSLATE XGLOW UP XLOOKSMAX X
ComplementCOMPLEMENT XMIRROR CHECK XREVERSE UNO X
LengthHOW LONG XBESTIE HOW LONG XGYATT HOW LONG X
Find ORFFIND ORF XUNDERSTOOD THE ASSIGNMENT XSIGMA GRIND X
Motif searchMOTIF HUNT X FOR "CCC"LIVING RENT FREE X FOR "CCC"SUSSY SEARCH X FOR "CCC"
MutateI CRAVE VIOLENCE XCAUGHT IN 4K XONLY IN OHIO X
AlignALIGN A WIT BRIZZ CHECK A AND BMEWING CONTEST A VS B
PrintVISIBLE "..." + XSPILL "..." + XHAWK TUAH "..." + X
EndKTHXBYEPERIODTMOGGER OUT

Commands

bioLOLPython supports 14 biological operations, each mapped to dialect-specific syntax:

CommandDescriptionOutput
DeclareDefine a named DNA sequence
GC contentCalculate GC percentageGC content: 50.00%
Reverse complementReverse complement a sequenceModifies variable in place
TranscribeDNA → RNA (T→U)Modifies variable in place
TranslateDNA → protein (codon table)Modifies variable in place
ComplementComplement without reversingModifies variable in place
LengthSequence length in basesX is 8 bases long
Find ORFFind first open reading frame (ATG…stop)ORF sequence and length
Motif searchFind all occurrences of a patternPositions of each match
MutateRandom single-base substitutionReports position and change
AlignGlobal pairwise alignment (Biopython)Similarity score and rating
PrintPrint strings and/or variablesSupports + concatenation
Start / EndProgram delimitersGreeting message on start

DNA sequences are validated against IUPAC nucleotide codes (ACGTUNRYSWKMBDHV) on declaration.

Usage

Run a script

bioLOL script.lolz # default (lolcat)
bioLOL --dialect gen_z script.lolz # Gen Z mode
bioLOL --dialect brainrot script.lolz # brainrot mode

Interactive REPL

bioLOL # lolcat REPL
bioLOL --dialect brainrot # brainrot REPL

Web interface

Try it at bioLOL.streamlit.app — includes a dialect selector and example scripts for each era.

To run locally:

pip install streamlit
streamlit run streamlit_app.py

Fetch community dialects

bioLOL --list-dialects # show available dialects
bioLOL --update # fetch latest from registry (24h cache)
bioLOL --update --force # bypass cache

User dialects are stored in ~/.bioLOL/dialects/.

Creating a New Dialect

Dialects are YAML files. Drop one into ~/.bioLOL/dialects/ for personal use, or add it to bioLOLPython/dialects/definitions/ and open a PR.

YAML format

name: mydialectera: "~2025-2026"description: "One-line description of the vibe."commands:
init:
pattern: "MY START COMMAND"greeting: "Welcome message with emoji"end:
pattern: "MY END COMMAND"declare:
pattern: 'MY DECLARE {name} WITH {seq}'reverse:
pattern: "MY REVERSE {name}"gc_content:
pattern: "MY GC {name}"response: "GC content: {value:.2f}%"print:
pattern: "MY PRINT"transcribe:
pattern: "MY TRANSCRIBE {name}"translate:
pattern: "MY TRANSLATE {name}"align:
pattern: "MY ALIGN {a} WITH {b}"response: "Score: {score:.2f} {rating}"mutate:
pattern: "MY MUTATE {name}"response: "Mutated {name} at pos {pos}: {old} -> {new}"length:
pattern: "MY LENGTH {name}"response: "{name} is {value} bases"complement:
pattern: "MY COMPLEMENT {name}"find_orf:
pattern: "MY ORF {name}"orf_found: "ORF: {orf} ({length} bp)"orf_missing: "No ORF in {name}"motif:
pattern: 'MY MOTIF {name} FOR {pattern}'found: "Found {count} match(es) for '{pattern}' in {name}:"position: " pos {start}-{end}"not_found: "No matches for '{pattern}' in {name}"examples:
GC Content: | MY START COMMAND MY DECLARE X WITH "ATGCATGC" MY GC X MY END COMMAND

All 14 commands are required. The dialect is validated on load.

Pattern placeholders

PlaceholderCaptures
{name}A variable name (word characters)
{a}, {b}Variable names for two-sequence commands
{seq}A quoted DNA sequence (e.g., "ATGC")
{pattern}A quoted search pattern

Generate with AI

Use the generator script to create a dialect with the Claude API:

# Specify name, era, and description
python scripts/generate_dialect.py "cottagecore""~2020-2022" \
"gentle pastoral internet aesthetic meets DNA" \
--validate \
-o bioLOLPython/dialects/definitions/cottagecore.yaml
# Or let Claude pick the name and era from a theme
python scripts/generate_dialect.py \
--auto "what's trending on TikTok right now" \
--validate \
-o bioLOLPython/dialects/definitions/new.yaml

Requires ANTHROPIC_API_KEY environment variable and pip install anthropic.

Auto-generation via GitHub Actions

A GitHub Action runs quarterly to generate a new dialect based on current internet trends. It:

  1. Calls the Claude API to generate a dialect YAML
  2. Validates the output against the required schema
  3. Runs the full test suite
  4. Opens a PR for human review

To trigger manually: Actions > "Generate New Dialect" > Run workflow. You can optionally provide a custom theme.

Requires the ANTHROPIC_API_KEY repository secret (Settings > Secrets > Actions).

Examples

Example scripts are in the examples/ directory:

FileDialectWhat it does
test_bio.lolzlolcatGC content, transcription, translation
test_alignment.lolzlolcatPairwise sequence alignment
test_violence.lolzlolcatRandom mutation
test_transcribe.lolzlolcatDNA → RNA
test_translate.lolzlolcatDNA → protein
gen_z_demo.lolzgen_zFull sequence analysis workflow
brainrot_demo.lolzbrainrotFull sequence analysis workflow
wangyuyan_demo.lolzwangyuyanFull sequence analysis workflow (Chinese)
taiwan_ptt_demo.lolztaiwan_pttFull sequence analysis workflow (Taiwanese)

Run any example:

bioLOL examples/test_bio.lolz
bioLOL --dialect gen_z examples/gen_z_demo.lolz
bioLOL --dialect brainrot examples/brainrot_demo.lolz

Running Tests

pip install pytest
pytest

96 tests covering the BioSeq class, interpreter commands across all dialects, and dialect loading/validation.

Requires Python >= 3.8. Dependencies: biopython, ply, pyyaml.

License

MIT

Contributing

Contributions welcome — especially new dialects. The easiest way to contribute:

  1. Write a YAML dialect file following the format above
  2. Add your dialect name to bioLOLPython/dialects/definitions/index.txt
  3. Add example scripts to examples/
  4. Run pytest to verify
  5. Open a PR

Or use the AI generator as a starting point and customize from there.

Acknowledgments

  • LOLPython by Andrew Dalke (public domain) — the original inspiration
  • Bioinformatics extensions, dialect system, and curation by Chen Hsieh
  • Development assisted by Claude (Anthropic) and ChatGPT (OpenAI)
  • Every generation of internet users who invented words that made the previous generation confused

About

Analyze bio sequences with internet slang

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

bioLOLPython

PyPI versionPythonTestsLicense: MITStreamlit

A time capsule of internet slang eras, doubling as a bioinformatics scripting language.

demo

Table of Contents

Why This Exists

As someone who moved between countries and languages, I've always paid attention to how people actually talk — the slang, the in-jokes, the words that date you to a specific moment online. Moving to the US, I went through the same process with English internet culture: learning what "I can has" meant in 2008, what "no cap" meant in 2020, and what "skibidi" means now.

Slang is ephemeral. The words people use to say "this is good" rotate every few years, and each generation's vocabulary becomes incomprehensible to the next. This project treats that as a feature: each era of internet slang becomes a selectable dialect for the same set of DNA analysis operations. The biology doesn't change — only the way you talk to it.

bioLOLPython is a time capsule. New dialects are generated quarterly from whatever is trending, so the project accumulates a running record of how the internet spoke at each point in time.

Background

LOLCODE is an esoteric programming language created in 2007 by Adam Lindsay, based on lolspeak — the broken-English caption style from the lolcat meme era. LOLPython, by Andrew Dalke, adapted the concept into a Python transpiler.

bioLOLPython extends LOLPython with bioinformatics commands and a dialect system that maps internet slang from different eras to the same DNA analysis operations.

Installation

From PyPI:

pip install bioLOLPython

Or install with pipx for an isolated CLI tool:

pipx install bioLOLPython

For development:

git clone https://github.com/ChenHsieh/bioLOLPython.git
cd bioLOLPython
pip install -e .

Quick Start

HAI GENZOME 1.0
DNA GO X ITZ "ATGCGTAC"
GC BOMB X
TRANSLATE X
VISIBLE "protein: " + X
KTHXBYE

Save as hello.lolz and run:

bioLOL hello.lolz

Or use Chinese internet slang:

666 基因组
安排 X 是 "ATGCGTAC"
YYDS检测 X
翻译 X
xswl "蛋白质: " + X
撤了
bioLOL --dialect wangyuyan hello_cn.lolz

Or brainrot:

SKIBIDI GENOME
SIGMA X RIZZ "ATGCGTAC"
AURA CHECK X
LOOKSMAX X
HAWK TUAH "protein: " + X
MOGGER OUT
bioLOL --dialect brainrot hello_brainrot.lolz

Dialects

Each dialect represents a different era of internet slang. The biology stays the same — only the syntax changes.

DialectEraVibe
lolcat~2005-2012I CAN HAS BIOINFORMATICS?
taiwan_ptt~2010-2020484很純?PTT/Dcard鄉民用語 (Taiwanese internet slang)
wangyuyan~2015-2020666这基因组YYDS (Chinese internet slang)
gen_z~2018-2023no cap this DNA is bussin fr fr
brainrot~2023-2026skibidi DNA sigma rizz

New dialects are generated quarterly by AI based on current internet trends. For the full gallery with command cheat sheets, see GALLERY.md.

Side-by-side comparison

Operationlolcatgen_zbrainrot
StartHAI GENZOMEYO ITS GIVING GENOMESKIBIDI GENOME
Declare DNADNA GO X ITZ "ATGC"NO CAP X IS "ATGC"SIGMA X RIZZ "ATGC"
GC contentGC BOMB XVIBE CHECK XAURA CHECK X
Reverse complementREVERSE THAT XUNO REVERSE XFANUM TAX X
TranscribeTRANSCRIBE XMAIN CHARACTER XEDGING X
TranslateTRANSLATE XGLOW UP XLOOKSMAX X
ComplementCOMPLEMENT XMIRROR CHECK XREVERSE UNO X
LengthHOW LONG XBESTIE HOW LONG XGYATT HOW LONG X
Find ORFFIND ORF XUNDERSTOOD THE ASSIGNMENT XSIGMA GRIND X
Motif searchMOTIF HUNT X FOR "CCC"LIVING RENT FREE X FOR "CCC"SUSSY SEARCH X FOR "CCC"
MutateI CRAVE VIOLENCE XCAUGHT IN 4K XONLY IN OHIO X
AlignALIGN A WIT BRIZZ CHECK A AND BMEWING CONTEST A VS B
PrintVISIBLE "..." + XSPILL "..." + XHAWK TUAH "..." + X
EndKTHXBYEPERIODTMOGGER OUT

Commands

bioLOLPython supports 14 biological operations, each mapped to dialect-specific syntax:

CommandDescriptionOutput
DeclareDefine a named DNA sequence
GC contentCalculate GC percentageGC content: 50.00%
Reverse complementReverse complement a sequenceModifies variable in place
TranscribeDNA → RNA (T→U)Modifies variable in place
TranslateDNA → protein (codon table)Modifies variable in place
ComplementComplement without reversingModifies variable in place
LengthSequence length in basesX is 8 bases long
Find ORFFind first open reading frame (ATG…stop)ORF sequence and length
Motif searchFind all occurrences of a patternPositions of each match
MutateRandom single-base substitutionReports position and change
AlignGlobal pairwise alignment (Biopython)Similarity score and rating
PrintPrint strings and/or variablesSupports + concatenation
Start / EndProgram delimitersGreeting message on start

DNA sequences are validated against IUPAC nucleotide codes (ACGTUNRYSWKMBDHV) on declaration.

Usage

Run a script

bioLOL script.lolz # default (lolcat)
bioLOL --dialect gen_z script.lolz # Gen Z mode
bioLOL --dialect brainrot script.lolz # brainrot mode

Interactive REPL

bioLOL # lolcat REPL
bioLOL --dialect brainrot # brainrot REPL

Web interface

Try it at bioLOL.streamlit.app — includes a dialect selector and example scripts for each era.

To run locally:

pip install streamlit
streamlit run streamlit_app.py

Fetch community dialects

bioLOL --list-dialects # show available dialects
bioLOL --update # fetch latest from registry (24h cache)
bioLOL --update --force # bypass cache

User dialects are stored in ~/.bioLOL/dialects/.

Creating a New Dialect

Dialects are YAML files. Drop one into ~/.bioLOL/dialects/ for personal use, or add it to bioLOLPython/dialects/definitions/ and open a PR.

YAML format

name: mydialectera: "~2025-2026"description: "One-line description of the vibe."commands:
init:
pattern: "MY START COMMAND"greeting: "Welcome message with emoji"end:
pattern: "MY END COMMAND"declare:
pattern: 'MY DECLARE {name} WITH {seq}'reverse:
pattern: "MY REVERSE {name}"gc_content:
pattern: "MY GC {name}"response: "GC content: {value:.2f}%"print:
pattern: "MY PRINT"transcribe:
pattern: "MY TRANSCRIBE {name}"translate:
pattern: "MY TRANSLATE {name}"align:
pattern: "MY ALIGN {a} WITH {b}"response: "Score: {score:.2f} {rating}"mutate:
pattern: "MY MUTATE {name}"response: "Mutated {name} at pos {pos}: {old} -> {new}"length:
pattern: "MY LENGTH {name}"response: "{name} is {value} bases"complement:
pattern: "MY COMPLEMENT {name}"find_orf:
pattern: "MY ORF {name}"orf_found: "ORF: {orf} ({length} bp)"orf_missing: "No ORF in {name}"motif:
pattern: 'MY MOTIF {name} FOR {pattern}'found: "Found {count} match(es) for '{pattern}' in {name}:"position: " pos {start}-{end}"not_found: "No matches for '{pattern}' in {name}"examples:
GC Content: | MY START COMMAND MY DECLARE X WITH "ATGCATGC" MY GC X MY END COMMAND

All 14 commands are required. The dialect is validated on load.

Pattern placeholders

PlaceholderCaptures
{name}A variable name (word characters)
{a}, {b}Variable names for two-sequence commands
{seq}A quoted DNA sequence (e.g., "ATGC")
{pattern}A quoted search pattern

Generate with AI

Use the generator script to create a dialect with the Claude API:

# Specify name, era, and description
python scripts/generate_dialect.py "cottagecore""~2020-2022" \
"gentle pastoral internet aesthetic meets DNA" \
--validate \
-o bioLOLPython/dialects/definitions/cottagecore.yaml
# Or let Claude pick the name and era from a theme
python scripts/generate_dialect.py \
--auto "what's trending on TikTok right now" \
--validate \
-o bioLOLPython/dialects/definitions/new.yaml

Requires ANTHROPIC_API_KEY environment variable and pip install anthropic.

Auto-generation via GitHub Actions

A GitHub Action runs quarterly to generate a new dialect based on current internet trends. It:

  1. Calls the Claude API to generate a dialect YAML
  2. Validates the output against the required schema
  3. Runs the full test suite
  4. Opens a PR for human review

To trigger manually: Actions > "Generate New Dialect" > Run workflow. You can optionally provide a custom theme.

Requires the ANTHROPIC_API_KEY repository secret (Settings > Secrets > Actions).

Examples

Example scripts are in the examples/ directory:

FileDialectWhat it does
test_bio.lolzlolcatGC content, transcription, translation
test_alignment.lolzlolcatPairwise sequence alignment
test_violence.lolzlolcatRandom mutation
test_transcribe.lolzlolcatDNA → RNA
test_translate.lolzlolcatDNA → protein
gen_z_demo.lolzgen_zFull sequence analysis workflow
brainrot_demo.lolzbrainrotFull sequence analysis workflow
wangyuyan_demo.lolzwangyuyanFull sequence analysis workflow (Chinese)
taiwan_ptt_demo.lolztaiwan_pttFull sequence analysis workflow (Taiwanese)

Run any example:

bioLOL examples/test_bio.lolz
bioLOL --dialect gen_z examples/gen_z_demo.lolz
bioLOL --dialect brainrot examples/brainrot_demo.lolz

Running Tests

pip install pytest
pytest

96 tests covering the BioSeq class, interpreter commands across all dialects, and dialect loading/validation.

Requires Python >= 3.8. Dependencies: biopython, ply, pyyaml.

License

MIT

Contributing

Contributions welcome — especially new dialects. The easiest way to contribute:

  1. Write a YAML dialect file following the format above
  2. Add your dialect name to bioLOLPython/dialects/definitions/index.txt
  3. Add example scripts to examples/
  4. Run pytest to verify
  5. Open a PR

Or use the AI generator as a starting point and customize from there.

Acknowledgments

  • LOLPython by Andrew Dalke (public domain) — the original inspiration
  • Bioinformatics extensions, dialect system, and curation by Chen Hsieh
  • Development assisted by Claude (Anthropic) and ChatGPT (OpenAI)
  • Every generation of internet users who invented words that made the previous generation confused

About

Analyze bio sequences with internet slang

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

bioLOLPython

PyPI versionPythonTestsLicense: MITStreamlit

A time capsule of internet slang eras, doubling as a bioinformatics scripting language.

demo

Table of Contents

Why This Exists

As someone who moved between countries and languages, I've always paid attention to how people actually talk — the slang, the in-jokes, the words that date you to a specific moment online. Moving to the US, I went through the same process with English internet culture: learning what "I can has" meant in 2008, what "no cap" meant in 2020, and what "skibidi" means now.

Slang is ephemeral. The words people use to say "this is good" rotate every few years, and each generation's vocabulary becomes incomprehensible to the next. This project treats that as a feature: each era of internet slang becomes a selectable dialect for the same set of DNA analysis operations. The biology doesn't change — only the way you talk to it.

bioLOLPython is a time capsule. New dialects are generated quarterly from whatever is trending, so the project accumulates a running record of how the internet spoke at each point in time.

Background

LOLCODE is an esoteric programming language created in 2007 by Adam Lindsay, based on lolspeak — the broken-English caption style from the lolcat meme era. LOLPython, by Andrew Dalke, adapted the concept into a Python transpiler.

bioLOLPython extends LOLPython with bioinformatics commands and a dialect system that maps internet slang from different eras to the same DNA analysis operations.

Installation

From PyPI:

pip install bioLOLPython

Or install with pipx for an isolated CLI tool:

pipx install bioLOLPython

For development:

git clone https://github.com/ChenHsieh/bioLOLPython.git
cd bioLOLPython
pip install -e .

Quick Start

HAI GENZOME 1.0
DNA GO X ITZ "ATGCGTAC"
GC BOMB X
TRANSLATE X
VISIBLE "protein: " + X
KTHXBYE

Save as hello.lolz and run:

bioLOL hello.lolz

Or use Chinese internet slang:

666 基因组
安排 X 是 "ATGCGTAC"
YYDS检测 X
翻译 X
xswl "蛋白质: " + X
撤了
bioLOL --dialect wangyuyan hello_cn.lolz

Or brainrot:

SKIBIDI GENOME
SIGMA X RIZZ "ATGCGTAC"
AURA CHECK X
LOOKSMAX X
HAWK TUAH "protein: " + X
MOGGER OUT
bioLOL --dialect brainrot hello_brainrot.lolz

Dialects

Each dialect represents a different era of internet slang. The biology stays the same — only the syntax changes.

DialectEraVibe
lolcat~2005-2012I CAN HAS BIOINFORMATICS?
taiwan_ptt~2010-2020484很純?PTT/Dcard鄉民用語 (Taiwanese internet slang)
wangyuyan~2015-2020666这基因组YYDS (Chinese internet slang)
gen_z~2018-2023no cap this DNA is bussin fr fr
brainrot~2023-2026skibidi DNA sigma rizz

New dialects are generated quarterly by AI based on current internet trends. For the full gallery with command cheat sheets, see GALLERY.md.

Side-by-side comparison

Operationlolcatgen_zbrainrot
StartHAI GENZOMEYO ITS GIVING GENOMESKIBIDI GENOME
Declare DNADNA GO X ITZ "ATGC"NO CAP X IS "ATGC"SIGMA X RIZZ "ATGC"
GC contentGC BOMB XVIBE CHECK XAURA CHECK X
Reverse complementREVERSE THAT XUNO REVERSE XFANUM TAX X
TranscribeTRANSCRIBE XMAIN CHARACTER XEDGING X
TranslateTRANSLATE XGLOW UP XLOOKSMAX X
ComplementCOMPLEMENT XMIRROR CHECK XREVERSE UNO X
LengthHOW LONG XBESTIE HOW LONG XGYATT HOW LONG X
Find ORFFIND ORF XUNDERSTOOD THE ASSIGNMENT XSIGMA GRIND X
Motif searchMOTIF HUNT X FOR "CCC"LIVING RENT FREE X FOR "CCC"SUSSY SEARCH X FOR "CCC"
MutateI CRAVE VIOLENCE XCAUGHT IN 4K XONLY IN OHIO X
AlignALIGN A WIT BRIZZ CHECK A AND BMEWING CONTEST A VS B
PrintVISIBLE "..." + XSPILL "..." + XHAWK TUAH "..." + X
EndKTHXBYEPERIODTMOGGER OUT

Commands

bioLOLPython supports 14 biological operations, each mapped to dialect-specific syntax:

CommandDescriptionOutput
DeclareDefine a named DNA sequence
GC contentCalculate GC percentageGC content: 50.00%
Reverse complementReverse complement a sequenceModifies variable in place
TranscribeDNA → RNA (T→U)Modifies variable in place
TranslateDNA → protein (codon table)Modifies variable in place
ComplementComplement without reversingModifies variable in place
LengthSequence length in basesX is 8 bases long
Find ORFFind first open reading frame (ATG…stop)ORF sequence and length
Motif searchFind all occurrences of a patternPositions of each match
MutateRandom single-base substitutionReports position and change
AlignGlobal pairwise alignment (Biopython)Similarity score and rating
PrintPrint strings and/or variablesSupports + concatenation
Start / EndProgram delimitersGreeting message on start

DNA sequences are validated against IUPAC nucleotide codes (ACGTUNRYSWKMBDHV) on declaration.

Usage

Run a script

bioLOL script.lolz # default (lolcat)
bioLOL --dialect gen_z script.lolz # Gen Z mode
bioLOL --dialect brainrot script.lolz # brainrot mode

Interactive REPL

bioLOL # lolcat REPL
bioLOL --dialect brainrot # brainrot REPL

Web interface

Try it at bioLOL.streamlit.app — includes a dialect selector and example scripts for each era.

To run locally:

pip install streamlit
streamlit run streamlit_app.py

Fetch community dialects

bioLOL --list-dialects # show available dialects
bioLOL --update # fetch latest from registry (24h cache)
bioLOL --update --force # bypass cache

User dialects are stored in ~/.bioLOL/dialects/.

Creating a New Dialect

Dialects are YAML files. Drop one into ~/.bioLOL/dialects/ for personal use, or add it to bioLOLPython/dialects/definitions/ and open a PR.

YAML format

name: mydialectera: "~2025-2026"description: "One-line description of the vibe."commands:
init:
pattern: "MY START COMMAND"greeting: "Welcome message with emoji"end:
pattern: "MY END COMMAND"declare:
pattern: 'MY DECLARE {name} WITH {seq}'reverse:
pattern: "MY REVERSE {name}"gc_content:
pattern: "MY GC {name}"response: "GC content: {value:.2f}%"print:
pattern: "MY PRINT"transcribe:
pattern: "MY TRANSCRIBE {name}"translate:
pattern: "MY TRANSLATE {name}"align:
pattern: "MY ALIGN {a} WITH {b}"response: "Score: {score:.2f} {rating}"mutate:
pattern: "MY MUTATE {name}"response: "Mutated {name} at pos {pos}: {old} -> {new}"length:
pattern: "MY LENGTH {name}"response: "{name} is {value} bases"complement:
pattern: "MY COMPLEMENT {name}"find_orf:
pattern: "MY ORF {name}"orf_found: "ORF: {orf} ({length} bp)"orf_missing: "No ORF in {name}"motif:
pattern: 'MY MOTIF {name} FOR {pattern}'found: "Found {count} match(es) for '{pattern}' in {name}:"position: " pos {start}-{end}"not_found: "No matches for '{pattern}' in {name}"examples:
GC Content: | MY START COMMAND MY DECLARE X WITH "ATGCATGC" MY GC X MY END COMMAND

All 14 commands are required. The dialect is validated on load.

Pattern placeholders

PlaceholderCaptures
{name}A variable name (word characters)
{a}, {b}Variable names for two-sequence commands
{seq}A quoted DNA sequence (e.g., "ATGC")
{pattern}A quoted search pattern

Generate with AI

Use the generator script to create a dialect with the Claude API:

# Specify name, era, and description
python scripts/generate_dialect.py "cottagecore""~2020-2022" \
"gentle pastoral internet aesthetic meets DNA" \
--validate \
-o bioLOLPython/dialects/definitions/cottagecore.yaml
# Or let Claude pick the name and era from a theme
python scripts/generate_dialect.py \
--auto "what's trending on TikTok right now" \
--validate \
-o bioLOLPython/dialects/definitions/new.yaml

Requires ANTHROPIC_API_KEY environment variable and pip install anthropic.

Auto-generation via GitHub Actions

A GitHub Action runs quarterly to generate a new dialect based on current internet trends. It:

  1. Calls the Claude API to generate a dialect YAML
  2. Validates the output against the required schema
  3. Runs the full test suite
  4. Opens a PR for human review

To trigger manually: Actions > "Generate New Dialect" > Run workflow. You can optionally provide a custom theme.

Requires the ANTHROPIC_API_KEY repository secret (Settings > Secrets > Actions).

Examples

Example scripts are in the examples/ directory:

FileDialectWhat it does
test_bio.lolzlolcatGC content, transcription, translation
test_alignment.lolzlolcatPairwise sequence alignment
test_violence.lolzlolcatRandom mutation
test_transcribe.lolzlolcatDNA → RNA
test_translate.lolzlolcatDNA → protein
gen_z_demo.lolzgen_zFull sequence analysis workflow
brainrot_demo.lolzbrainrotFull sequence analysis workflow
wangyuyan_demo.lolzwangyuyanFull sequence analysis workflow (Chinese)
taiwan_ptt_demo.lolztaiwan_pttFull sequence analysis workflow (Taiwanese)

Run any example:

bioLOL examples/test_bio.lolz
bioLOL --dialect gen_z examples/gen_z_demo.lolz
bioLOL --dialect brainrot examples/brainrot_demo.lolz

Running Tests

pip install pytest
pytest

96 tests covering the BioSeq class, interpreter commands across all dialects, and dialect loading/validation.

Requires Python >= 3.8. Dependencies: biopython, ply, pyyaml.

License

MIT

Contributing

Contributions welcome — especially new dialects. The easiest way to contribute:

  1. Write a YAML dialect file following the format above
  2. Add your dialect name to bioLOLPython/dialects/definitions/index.txt
  3. Add example scripts to examples/
  4. Run pytest to verify
  5. Open a PR

Or use the AI generator as a starting point and customize from there.

Acknowledgments

  • LOLPython by Andrew Dalke (public domain) — the original inspiration
  • Bioinformatics extensions, dialect system, and curation by Chen Hsieh
  • Development assisted by Claude (Anthropic) and ChatGPT (OpenAI)
  • Every generation of internet users who invented words that made the previous generation confused

About

Analyze bio sequences with internet slang

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

bioLOLPython

PyPI versionPythonTestsLicense: MITStreamlit

A time capsule of internet slang eras, doubling as a bioinformatics scripting language.

demo

Table of Contents

Why This Exists

As someone who moved between countries and languages, I've always paid attention to how people actually talk — the slang, the in-jokes, the words that date you to a specific moment online. Moving to the US, I went through the same process with English internet culture: learning what "I can has" meant in 2008, what "no cap" meant in 2020, and what "skibidi" means now.

Slang is ephemeral. The words people use to say "this is good" rotate every few years, and each generation's vocabulary becomes incomprehensible to the next. This project treats that as a feature: each era of internet slang becomes a selectable dialect for the same set of DNA analysis operations. The biology doesn't change — only the way you talk to it.

bioLOLPython is a time capsule. New dialects are generated quarterly from whatever is trending, so the project accumulates a running record of how the internet spoke at each point in time.

Background

LOLCODE is an esoteric programming language created in 2007 by Adam Lindsay, based on lolspeak — the broken-English caption style from the lolcat meme era. LOLPython, by Andrew Dalke, adapted the concept into a Python transpiler.

bioLOLPython extends LOLPython with bioinformatics commands and a dialect system that maps internet slang from different eras to the same DNA analysis operations.

Installation

From PyPI:

pip install bioLOLPython

Or install with pipx for an isolated CLI tool:

pipx install bioLOLPython

For development:

git clone https://github.com/ChenHsieh/bioLOLPython.git
cd bioLOLPython
pip install -e .

Quick Start

HAI GENZOME 1.0
DNA GO X ITZ "ATGCGTAC"
GC BOMB X
TRANSLATE X
VISIBLE "protein: " + X
KTHXBYE

Save as hello.lolz and run:

bioLOL hello.lolz

Or use Chinese internet slang:

666 基因组
安排 X 是 "ATGCGTAC"
YYDS检测 X
翻译 X
xswl "蛋白质: " + X
撤了
bioLOL --dialect wangyuyan hello_cn.lolz

Or brainrot:

SKIBIDI GENOME
SIGMA X RIZZ "ATGCGTAC"
AURA CHECK X
LOOKSMAX X
HAWK TUAH "protein: " + X
MOGGER OUT
bioLOL --dialect brainrot hello_brainrot.lolz

Dialects

Each dialect represents a different era of internet slang. The biology stays the same — only the syntax changes.

DialectEraVibe
lolcat~2005-2012I CAN HAS BIOINFORMATICS?
taiwan_ptt~2010-2020484很純?PTT/Dcard鄉民用語 (Taiwanese internet slang)
wangyuyan~2015-2020666这基因组YYDS (Chinese internet slang)
gen_z~2018-2023no cap this DNA is bussin fr fr
brainrot~2023-2026skibidi DNA sigma rizz

New dialects are generated quarterly by AI based on current internet trends. For the full gallery with command cheat sheets, see GALLERY.md.

Side-by-side comparison

Operationlolcatgen_zbrainrot
StartHAI GENZOMEYO ITS GIVING GENOMESKIBIDI GENOME
Declare DNADNA GO X ITZ "ATGC"NO CAP X IS "ATGC"SIGMA X RIZZ "ATGC"
GC contentGC BOMB XVIBE CHECK XAURA CHECK X
Reverse complementREVERSE THAT XUNO REVERSE XFANUM TAX X
TranscribeTRANSCRIBE XMAIN CHARACTER XEDGING X
TranslateTRANSLATE XGLOW UP XLOOKSMAX X
ComplementCOMPLEMENT XMIRROR CHECK XREVERSE UNO X
LengthHOW LONG XBESTIE HOW LONG XGYATT HOW LONG X
Find ORFFIND ORF XUNDERSTOOD THE ASSIGNMENT XSIGMA GRIND X
Motif searchMOTIF HUNT X FOR "CCC"LIVING RENT FREE X FOR "CCC"SUSSY SEARCH X FOR "CCC"
MutateI CRAVE VIOLENCE XCAUGHT IN 4K XONLY IN OHIO X
AlignALIGN A WIT BRIZZ CHECK A AND BMEWING CONTEST A VS B
PrintVISIBLE "..." + XSPILL "..." + XHAWK TUAH "..." + X
EndKTHXBYEPERIODTMOGGER OUT

Commands

bioLOLPython supports 14 biological operations, each mapped to dialect-specific syntax:

CommandDescriptionOutput
DeclareDefine a named DNA sequence
GC contentCalculate GC percentageGC content: 50.00%
Reverse complementReverse complement a sequenceModifies variable in place
TranscribeDNA → RNA (T→U)Modifies variable in place
TranslateDNA → protein (codon table)Modifies variable in place
ComplementComplement without reversingModifies variable in place
LengthSequence length in basesX is 8 bases long
Find ORFFind first open reading frame (ATG…stop)ORF sequence and length
Motif searchFind all occurrences of a patternPositions of each match
MutateRandom single-base substitutionReports position and change
AlignGlobal pairwise alignment (Biopython)Similarity score and rating
PrintPrint strings and/or variablesSupports + concatenation
Start / EndProgram delimitersGreeting message on start

DNA sequences are validated against IUPAC nucleotide codes (ACGTUNRYSWKMBDHV) on declaration.

Usage

Run a script

bioLOL script.lolz # default (lolcat)
bioLOL --dialect gen_z script.lolz # Gen Z mode
bioLOL --dialect brainrot script.lolz # brainrot mode

Interactive REPL

bioLOL # lolcat REPL
bioLOL --dialect brainrot # brainrot REPL

Web interface

Try it at bioLOL.streamlit.app — includes a dialect selector and example scripts for each era.

To run locally:

pip install streamlit
streamlit run streamlit_app.py

Fetch community dialects

bioLOL --list-dialects # show available dialects
bioLOL --update # fetch latest from registry (24h cache)
bioLOL --update --force # bypass cache

User dialects are stored in ~/.bioLOL/dialects/.

Creating a New Dialect

Dialects are YAML files. Drop one into ~/.bioLOL/dialects/ for personal use, or add it to bioLOLPython/dialects/definitions/ and open a PR.

YAML format

name: mydialectera: "~2025-2026"description: "One-line description of the vibe."commands:
init:
pattern: "MY START COMMAND"greeting: "Welcome message with emoji"end:
pattern: "MY END COMMAND"declare:
pattern: 'MY DECLARE {name} WITH {seq}'reverse:
pattern: "MY REVERSE {name}"gc_content:
pattern: "MY GC {name}"response: "GC content: {value:.2f}%"print:
pattern: "MY PRINT"transcribe:
pattern: "MY TRANSCRIBE {name}"translate:
pattern: "MY TRANSLATE {name}"align:
pattern: "MY ALIGN {a} WITH {b}"response: "Score: {score:.2f} {rating}"mutate:
pattern: "MY MUTATE {name}"response: "Mutated {name} at pos {pos}: {old} -> {new}"length:
pattern: "MY LENGTH {name}"response: "{name} is {value} bases"complement:
pattern: "MY COMPLEMENT {name}"find_orf:
pattern: "MY ORF {name}"orf_found: "ORF: {orf} ({length} bp)"orf_missing: "No ORF in {name}"motif:
pattern: 'MY MOTIF {name} FOR {pattern}'found: "Found {count} match(es) for '{pattern}' in {name}:"position: " pos {start}-{end}"not_found: "No matches for '{pattern}' in {name}"examples:
GC Content: | MY START COMMAND MY DECLARE X WITH "ATGCATGC" MY GC X MY END COMMAND

All 14 commands are required. The dialect is validated on load.

Pattern placeholders

PlaceholderCaptures
{name}A variable name (word characters)
{a}, {b}Variable names for two-sequence commands
{seq}A quoted DNA sequence (e.g., "ATGC")
{pattern}A quoted search pattern

Generate with AI

Use the generator script to create a dialect with the Claude API:

# Specify name, era, and description
python scripts/generate_dialect.py "cottagecore""~2020-2022" \
"gentle pastoral internet aesthetic meets DNA" \
--validate \
-o bioLOLPython/dialects/definitions/cottagecore.yaml
# Or let Claude pick the name and era from a theme
python scripts/generate_dialect.py \
--auto "what's trending on TikTok right now" \
--validate \
-o bioLOLPython/dialects/definitions/new.yaml

Requires ANTHROPIC_API_KEY environment variable and pip install anthropic.

Auto-generation via GitHub Actions

A GitHub Action runs quarterly to generate a new dialect based on current internet trends. It:

  1. Calls the Claude API to generate a dialect YAML
  2. Validates the output against the required schema
  3. Runs the full test suite
  4. Opens a PR for human review

To trigger manually: Actions > "Generate New Dialect" > Run workflow. You can optionally provide a custom theme.

Requires the ANTHROPIC_API_KEY repository secret (Settings > Secrets > Actions).

Examples

Example scripts are in the examples/ directory:

FileDialectWhat it does
test_bio.lolzlolcatGC content, transcription, translation
test_alignment.lolzlolcatPairwise sequence alignment
test_violence.lolzlolcatRandom mutation
test_transcribe.lolzlolcatDNA → RNA
test_translate.lolzlolcatDNA → protein
gen_z_demo.lolzgen_zFull sequence analysis workflow
brainrot_demo.lolzbrainrotFull sequence analysis workflow
wangyuyan_demo.lolzwangyuyanFull sequence analysis workflow (Chinese)
taiwan_ptt_demo.lolztaiwan_pttFull sequence analysis workflow (Taiwanese)

Run any example:

bioLOL examples/test_bio.lolz
bioLOL --dialect gen_z examples/gen_z_demo.lolz
bioLOL --dialect brainrot examples/brainrot_demo.lolz

Running Tests

pip install pytest
pytest

96 tests covering the BioSeq class, interpreter commands across all dialects, and dialect loading/validation.

Requires Python >= 3.8. Dependencies: biopython, ply, pyyaml.

License

MIT

Contributing

Contributions welcome — especially new dialects. The easiest way to contribute:

  1. Write a YAML dialect file following the format above
  2. Add your dialect name to bioLOLPython/dialects/definitions/index.txt
  3. Add example scripts to examples/
  4. Run pytest to verify
  5. Open a PR

Or use the AI generator as a starting point and customize from there.

Acknowledgments

  • LOLPython by Andrew Dalke (public domain) — the original inspiration
  • Bioinformatics extensions, dialect system, and curation by Chen Hsieh
  • Development assisted by Claude (Anthropic) and ChatGPT (OpenAI)
  • Every generation of internet users who invented words that made the previous generation confused

About

Analyze bio sequences with internet slang

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

bioLOLPython

PyPI versionPythonTestsLicense: MITStreamlit

A time capsule of internet slang eras, doubling as a bioinformatics scripting language.

demo

Table of Contents

Why This Exists

As someone who moved between countries and languages, I've always paid attention to how people actually talk — the slang, the in-jokes, the words that date you to a specific moment online. Moving to the US, I went through the same process with English internet culture: learning what "I can has" meant in 2008, what "no cap" meant in 2020, and what "skibidi" means now.

Slang is ephemeral. The words people use to say "this is good" rotate every few years, and each generation's vocabulary becomes incomprehensible to the next. This project treats that as a feature: each era of internet slang becomes a selectable dialect for the same set of DNA analysis operations. The biology doesn't change — only the way you talk to it.

bioLOLPython is a time capsule. New dialects are generated quarterly from whatever is trending, so the project accumulates a running record of how the internet spoke at each point in time.

Background

LOLCODE is an esoteric programming language created in 2007 by Adam Lindsay, based on lolspeak — the broken-English caption style from the lolcat meme era. LOLPython, by Andrew Dalke, adapted the concept into a Python transpiler.

bioLOLPython extends LOLPython with bioinformatics commands and a dialect system that maps internet slang from different eras to the same DNA analysis operations.

Installation

From PyPI:

pip install bioLOLPython

Or install with pipx for an isolated CLI tool:

pipx install bioLOLPython

For development:

git clone https://github.com/ChenHsieh/bioLOLPython.git
cd bioLOLPython
pip install -e .

Quick Start

HAI GENZOME 1.0
DNA GO X ITZ "ATGCGTAC"
GC BOMB X
TRANSLATE X
VISIBLE "protein: " + X
KTHXBYE

Save as hello.lolz and run:

bioLOL hello.lolz

Or use Chinese internet slang:

666 基因组
安排 X 是 "ATGCGTAC"
YYDS检测 X
翻译 X
xswl "蛋白质: " + X
撤了
bioLOL --dialect wangyuyan hello_cn.lolz

Or brainrot:

SKIBIDI GENOME
SIGMA X RIZZ "ATGCGTAC"
AURA CHECK X
LOOKSMAX X
HAWK TUAH "protein: " + X
MOGGER OUT
bioLOL --dialect brainrot hello_brainrot.lolz

Dialects

Each dialect represents a different era of internet slang. The biology stays the same — only the syntax changes.

DialectEraVibe
lolcat~2005-2012I CAN HAS BIOINFORMATICS?
taiwan_ptt~2010-2020484很純?PTT/Dcard鄉民用語 (Taiwanese internet slang)
wangyuyan~2015-2020666这基因组YYDS (Chinese internet slang)
gen_z~2018-2023no cap this DNA is bussin fr fr
brainrot~2023-2026skibidi DNA sigma rizz

New dialects are generated quarterly by AI based on current internet trends. For the full gallery with command cheat sheets, see GALLERY.md.

Side-by-side comparison

Operationlolcatgen_zbrainrot
StartHAI GENZOMEYO ITS GIVING GENOMESKIBIDI GENOME
Declare DNADNA GO X ITZ "ATGC"NO CAP X IS "ATGC"SIGMA X RIZZ "ATGC"
GC contentGC BOMB XVIBE CHECK XAURA CHECK X
Reverse complementREVERSE THAT XUNO REVERSE XFANUM TAX X
TranscribeTRANSCRIBE XMAIN CHARACTER XEDGING X
TranslateTRANSLATE XGLOW UP XLOOKSMAX X
ComplementCOMPLEMENT XMIRROR CHECK XREVERSE UNO X
LengthHOW LONG XBESTIE HOW LONG XGYATT HOW LONG X
Find ORFFIND ORF XUNDERSTOOD THE ASSIGNMENT XSIGMA GRIND X
Motif searchMOTIF HUNT X FOR "CCC"LIVING RENT FREE X FOR "CCC"SUSSY SEARCH X FOR "CCC"
MutateI CRAVE VIOLENCE XCAUGHT IN 4K XONLY IN OHIO X
AlignALIGN A WIT BRIZZ CHECK A AND BMEWING CONTEST A VS B
PrintVISIBLE "..." + XSPILL "..." + XHAWK TUAH "..." + X
EndKTHXBYEPERIODTMOGGER OUT

Commands

bioLOLPython supports 14 biological operations, each mapped to dialect-specific syntax:

CommandDescriptionOutput
DeclareDefine a named DNA sequence
GC contentCalculate GC percentageGC content: 50.00%
Reverse complementReverse complement a sequenceModifies variable in place
TranscribeDNA → RNA (T→U)Modifies variable in place
TranslateDNA → protein (codon table)Modifies variable in place
ComplementComplement without reversingModifies variable in place
LengthSequence length in basesX is 8 bases long
Find ORFFind first open reading frame (ATG…stop)ORF sequence and length
Motif searchFind all occurrences of a patternPositions of each match
MutateRandom single-base substitutionReports position and change
AlignGlobal pairwise alignment (Biopython)Similarity score and rating
PrintPrint strings and/or variablesSupports + concatenation
Start / EndProgram delimitersGreeting message on start

DNA sequences are validated against IUPAC nucleotide codes (ACGTUNRYSWKMBDHV) on declaration.

Usage

Run a script

bioLOL script.lolz # default (lolcat)
bioLOL --dialect gen_z script.lolz # Gen Z mode
bioLOL --dialect brainrot script.lolz # brainrot mode

Interactive REPL

bioLOL # lolcat REPL
bioLOL --dialect brainrot # brainrot REPL

Web interface

Try it at bioLOL.streamlit.app — includes a dialect selector and example scripts for each era.

To run locally:

pip install streamlit
streamlit run streamlit_app.py

Fetch community dialects

bioLOL --list-dialects # show available dialects
bioLOL --update # fetch latest from registry (24h cache)
bioLOL --update --force # bypass cache

User dialects are stored in ~/.bioLOL/dialects/.

Creating a New Dialect

Dialects are YAML files. Drop one into ~/.bioLOL/dialects/ for personal use, or add it to bioLOLPython/dialects/definitions/ and open a PR.

YAML format

name: mydialectera: "~2025-2026"description: "One-line description of the vibe."commands:
init:
pattern: "MY START COMMAND"greeting: "Welcome message with emoji"end:
pattern: "MY END COMMAND"declare:
pattern: 'MY DECLARE {name} WITH {seq}'reverse:
pattern: "MY REVERSE {name}"gc_content:
pattern: "MY GC {name}"response: "GC content: {value:.2f}%"print:
pattern: "MY PRINT"transcribe:
pattern: "MY TRANSCRIBE {name}"translate:
pattern: "MY TRANSLATE {name}"align:
pattern: "MY ALIGN {a} WITH {b}"response: "Score: {score:.2f} {rating}"mutate:
pattern: "MY MUTATE {name}"response: "Mutated {name} at pos {pos}: {old} -> {new}"length:
pattern: "MY LENGTH {name}"response: "{name} is {value} bases"complement:
pattern: "MY COMPLEMENT {name}"find_orf:
pattern: "MY ORF {name}"orf_found: "ORF: {orf} ({length} bp)"orf_missing: "No ORF in {name}"motif:
pattern: 'MY MOTIF {name} FOR {pattern}'found: "Found {count} match(es) for '{pattern}' in {name}:"position: " pos {start}-{end}"not_found: "No matches for '{pattern}' in {name}"examples:
GC Content: | MY START COMMAND MY DECLARE X WITH "ATGCATGC" MY GC X MY END COMMAND

All 14 commands are required. The dialect is validated on load.

Pattern placeholders

PlaceholderCaptures
{name}A variable name (word characters)
{a}, {b}Variable names for two-sequence commands
{seq}A quoted DNA sequence (e.g., "ATGC")
{pattern}A quoted search pattern

Generate with AI

Use the generator script to create a dialect with the Claude API:

# Specify name, era, and description
python scripts/generate_dialect.py "cottagecore""~2020-2022" \
"gentle pastoral internet aesthetic meets DNA" \
--validate \
-o bioLOLPython/dialects/definitions/cottagecore.yaml
# Or let Claude pick the name and era from a theme
python scripts/generate_dialect.py \
--auto "what's trending on TikTok right now" \
--validate \
-o bioLOLPython/dialects/definitions/new.yaml

Requires ANTHROPIC_API_KEY environment variable and pip install anthropic.

Auto-generation via GitHub Actions

A GitHub Action runs quarterly to generate a new dialect based on current internet trends. It:

  1. Calls the Claude API to generate a dialect YAML
  2. Validates the output against the required schema
  3. Runs the full test suite
  4. Opens a PR for human review

To trigger manually: Actions > "Generate New Dialect" > Run workflow. You can optionally provide a custom theme.

Requires the ANTHROPIC_API_KEY repository secret (Settings > Secrets > Actions).

Examples

Example scripts are in the examples/ directory:

FileDialectWhat it does
test_bio.lolzlolcatGC content, transcription, translation
test_alignment.lolzlolcatPairwise sequence alignment
test_violence.lolzlolcatRandom mutation
test_transcribe.lolzlolcatDNA → RNA
test_translate.lolzlolcatDNA → protein
gen_z_demo.lolzgen_zFull sequence analysis workflow
brainrot_demo.lolzbrainrotFull sequence analysis workflow
wangyuyan_demo.lolzwangyuyanFull sequence analysis workflow (Chinese)
taiwan_ptt_demo.lolztaiwan_pttFull sequence analysis workflow (Taiwanese)

Run any example:

bioLOL examples/test_bio.lolz
bioLOL --dialect gen_z examples/gen_z_demo.lolz
bioLOL --dialect brainrot examples/brainrot_demo.lolz

Running Tests

pip install pytest
pytest

96 tests covering the BioSeq class, interpreter commands across all dialects, and dialect loading/validation.

Requires Python >= 3.8. Dependencies: biopython, ply, pyyaml.

License

MIT

Contributing

Contributions welcome — especially new dialects. The easiest way to contribute:

  1. Write a YAML dialect file following the format above
  2. Add your dialect name to bioLOLPython/dialects/definitions/index.txt
  3. Add example scripts to examples/
  4. Run pytest to verify
  5. Open a PR

Or use the AI generator as a starting point and customize from there.

Acknowledgments

  • LOLPython by Andrew Dalke (public domain) — the original inspiration
  • Bioinformatics extensions, dialect system, and curation by Chen Hsieh
  • Development assisted by Claude (Anthropic) and ChatGPT (OpenAI)
  • Every generation of internet users who invented words that made the previous generation confused

About

Analyze bio sequences with internet slang

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

bioLOLPython

PyPI versionPythonTestsLicense: MITStreamlit

A time capsule of internet slang eras, doubling as a bioinformatics scripting language.

demo

Table of Contents

Why This Exists

As someone who moved between countries and languages, I've always paid attention to how people actually talk — the slang, the in-jokes, the words that date you to a specific moment online. Moving to the US, I went through the same process with English internet culture: learning what "I can has" meant in 2008, what "no cap" meant in 2020, and what "skibidi" means now.

Slang is ephemeral. The words people use to say "this is good" rotate every few years, and each generation's vocabulary becomes incomprehensible to the next. This project treats that as a feature: each era of internet slang becomes a selectable dialect for the same set of DNA analysis operations. The biology doesn't change — only the way you talk to it.

bioLOLPython is a time capsule. New dialects are generated quarterly from whatever is trending, so the project accumulates a running record of how the internet spoke at each point in time.

Background

LOLCODE is an esoteric programming language created in 2007 by Adam Lindsay, based on lolspeak — the broken-English caption style from the lolcat meme era. LOLPython, by Andrew Dalke, adapted the concept into a Python transpiler.

bioLOLPython extends LOLPython with bioinformatics commands and a dialect system that maps internet slang from different eras to the same DNA analysis operations.

Installation

From PyPI:

pip install bioLOLPython

Or install with pipx for an isolated CLI tool:

pipx install bioLOLPython

For development:

git clone https://github.com/ChenHsieh/bioLOLPython.git
cd bioLOLPython
pip install -e .

Quick Start

HAI GENZOME 1.0
DNA GO X ITZ "ATGCGTAC"
GC BOMB X
TRANSLATE X
VISIBLE "protein: " + X
KTHXBYE

Save as hello.lolz and run:

bioLOL hello.lolz

Or use Chinese internet slang:

666 基因组
安排 X 是 "ATGCGTAC"
YYDS检测 X
翻译 X
xswl "蛋白质: " + X
撤了
bioLOL --dialect wangyuyan hello_cn.lolz

Or brainrot:

SKIBIDI GENOME
SIGMA X RIZZ "ATGCGTAC"
AURA CHECK X
LOOKSMAX X
HAWK TUAH "protein: " + X
MOGGER OUT
bioLOL --dialect brainrot hello_brainrot.lolz

Dialects

Each dialect represents a different era of internet slang. The biology stays the same — only the syntax changes.

DialectEraVibe
lolcat~2005-2012I CAN HAS BIOINFORMATICS?
taiwan_ptt~2010-2020484很純?PTT/Dcard鄉民用語 (Taiwanese internet slang)
wangyuyan~2015-2020666这基因组YYDS (Chinese internet slang)
gen_z~2018-2023no cap this DNA is bussin fr fr
brainrot~2023-2026skibidi DNA sigma rizz

New dialects are generated quarterly by AI based on current internet trends. For the full gallery with command cheat sheets, see GALLERY.md.

Side-by-side comparison

Operationlolcatgen_zbrainrot
StartHAI GENZOMEYO ITS GIVING GENOMESKIBIDI GENOME
Declare DNADNA GO X ITZ "ATGC"NO CAP X IS "ATGC"SIGMA X RIZZ "ATGC"
GC contentGC BOMB XVIBE CHECK XAURA CHECK X
Reverse complementREVERSE THAT XUNO REVERSE XFANUM TAX X
TranscribeTRANSCRIBE XMAIN CHARACTER XEDGING X
TranslateTRANSLATE XGLOW UP XLOOKSMAX X
ComplementCOMPLEMENT XMIRROR CHECK XREVERSE UNO X
LengthHOW LONG XBESTIE HOW LONG XGYATT HOW LONG X
Find ORFFIND ORF XUNDERSTOOD THE ASSIGNMENT XSIGMA GRIND X
Motif searchMOTIF HUNT X FOR "CCC"LIVING RENT FREE X FOR "CCC"SUSSY SEARCH X FOR "CCC"
MutateI CRAVE VIOLENCE XCAUGHT IN 4K XONLY IN OHIO X
AlignALIGN A WIT BRIZZ CHECK A AND BMEWING CONTEST A VS B
PrintVISIBLE "..." + XSPILL "..." + XHAWK TUAH "..." + X
EndKTHXBYEPERIODTMOGGER OUT

Commands

bioLOLPython supports 14 biological operations, each mapped to dialect-specific syntax:

CommandDescriptionOutput
DeclareDefine a named DNA sequence
GC contentCalculate GC percentageGC content: 50.00%
Reverse complementReverse complement a sequenceModifies variable in place
TranscribeDNA → RNA (T→U)Modifies variable in place
TranslateDNA → protein (codon table)Modifies variable in place
ComplementComplement without reversingModifies variable in place
LengthSequence length in basesX is 8 bases long
Find ORFFind first open reading frame (ATG…stop)ORF sequence and length
Motif searchFind all occurrences of a patternPositions of each match
MutateRandom single-base substitutionReports position and change
AlignGlobal pairwise alignment (Biopython)Similarity score and rating
PrintPrint strings and/or variablesSupports + concatenation
Start / EndProgram delimitersGreeting message on start

DNA sequences are validated against IUPAC nucleotide codes (ACGTUNRYSWKMBDHV) on declaration.

Usage

Run a script

bioLOL script.lolz # default (lolcat)
bioLOL --dialect gen_z script.lolz # Gen Z mode
bioLOL --dialect brainrot script.lolz # brainrot mode

Interactive REPL

bioLOL # lolcat REPL
bioLOL --dialect brainrot # brainrot REPL

Web interface

Try it at bioLOL.streamlit.app — includes a dialect selector and example scripts for each era.

To run locally:

pip install streamlit
streamlit run streamlit_app.py

Fetch community dialects

bioLOL --list-dialects # show available dialects
bioLOL --update # fetch latest from registry (24h cache)
bioLOL --update --force # bypass cache

User dialects are stored in ~/.bioLOL/dialects/.

Creating a New Dialect

Dialects are YAML files. Drop one into ~/.bioLOL/dialects/ for personal use, or add it to bioLOLPython/dialects/definitions/ and open a PR.

YAML format

name: mydialectera: "~2025-2026"description: "One-line description of the vibe."commands:
init:
pattern: "MY START COMMAND"greeting: "Welcome message with emoji"end:
pattern: "MY END COMMAND"declare:
pattern: 'MY DECLARE {name} WITH {seq}'reverse:
pattern: "MY REVERSE {name}"gc_content:
pattern: "MY GC {name}"response: "GC content: {value:.2f}%"print:
pattern: "MY PRINT"transcribe:
pattern: "MY TRANSCRIBE {name}"translate:
pattern: "MY TRANSLATE {name}"align:
pattern: "MY ALIGN {a} WITH {b}"response: "Score: {score:.2f} {rating}"mutate:
pattern: "MY MUTATE {name}"response: "Mutated {name} at pos {pos}: {old} -> {new}"length:
pattern: "MY LENGTH {name}"response: "{name} is {value} bases"complement:
pattern: "MY COMPLEMENT {name}"find_orf:
pattern: "MY ORF {name}"orf_found: "ORF: {orf} ({length} bp)"orf_missing: "No ORF in {name}"motif:
pattern: 'MY MOTIF {name} FOR {pattern}'found: "Found {count} match(es) for '{pattern}' in {name}:"position: " pos {start}-{end}"not_found: "No matches for '{pattern}' in {name}"examples:
GC Content: | MY START COMMAND MY DECLARE X WITH "ATGCATGC" MY GC X MY END COMMAND

All 14 commands are required. The dialect is validated on load.

Pattern placeholders

PlaceholderCaptures
{name}A variable name (word characters)
{a}, {b}Variable names for two-sequence commands
{seq}A quoted DNA sequence (e.g., "ATGC")
{pattern}A quoted search pattern

Generate with AI

Use the generator script to create a dialect with the Claude API:

# Specify name, era, and description
python scripts/generate_dialect.py "cottagecore""~2020-2022" \
"gentle pastoral internet aesthetic meets DNA" \
--validate \
-o bioLOLPython/dialects/definitions/cottagecore.yaml
# Or let Claude pick the name and era from a theme
python scripts/generate_dialect.py \
--auto "what's trending on TikTok right now" \
--validate \
-o bioLOLPython/dialects/definitions/new.yaml

Requires ANTHROPIC_API_KEY environment variable and pip install anthropic.

Auto-generation via GitHub Actions

A GitHub Action runs quarterly to generate a new dialect based on current internet trends. It:

  1. Calls the Claude API to generate a dialect YAML
  2. Validates the output against the required schema
  3. Runs the full test suite
  4. Opens a PR for human review

To trigger manually: Actions > "Generate New Dialect" > Run workflow. You can optionally provide a custom theme.

Requires the ANTHROPIC_API_KEY repository secret (Settings > Secrets > Actions).

Examples

Example scripts are in the examples/ directory:

FileDialectWhat it does
test_bio.lolzlolcatGC content, transcription, translation
test_alignment.lolzlolcatPairwise sequence alignment
test_violence.lolzlolcatRandom mutation
test_transcribe.lolzlolcatDNA → RNA
test_translate.lolzlolcatDNA → protein
gen_z_demo.lolzgen_zFull sequence analysis workflow
brainrot_demo.lolzbrainrotFull sequence analysis workflow
wangyuyan_demo.lolzwangyuyanFull sequence analysis workflow (Chinese)
taiwan_ptt_demo.lolztaiwan_pttFull sequence analysis workflow (Taiwanese)

Run any example:

bioLOL examples/test_bio.lolz
bioLOL --dialect gen_z examples/gen_z_demo.lolz
bioLOL --dialect brainrot examples/brainrot_demo.lolz

Running Tests

pip install pytest
pytest

96 tests covering the BioSeq class, interpreter commands across all dialects, and dialect loading/validation.

Requires Python >= 3.8. Dependencies: biopython, ply, pyyaml.

License

MIT

Contributing

Contributions welcome — especially new dialects. The easiest way to contribute:

  1. Write a YAML dialect file following the format above
  2. Add your dialect name to bioLOLPython/dialects/definitions/index.txt
  3. Add example scripts to examples/
  4. Run pytest to verify
  5. Open a PR

Or use the AI generator as a starting point and customize from there.

Acknowledgments

  • LOLPython by Andrew Dalke (public domain) — the original inspiration
  • Bioinformatics extensions, dialect system, and curation by Chen Hsieh
  • Development assisted by Claude (Anthropic) and ChatGPT (OpenAI)
  • Every generation of internet users who invented words that made the previous generation confused

About

Analyze bio sequences with internet slang

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

bioLOLPython

PyPI versionPythonTestsLicense: MITStreamlit

A time capsule of internet slang eras, doubling as a bioinformatics scripting language.

demo

Table of Contents

Why This Exists

As someone who moved between countries and languages, I've always paid attention to how people actually talk — the slang, the in-jokes, the words that date you to a specific moment online. Moving to the US, I went through the same process with English internet culture: learning what "I can has" meant in 2008, what "no cap" meant in 2020, and what "skibidi" means now.

Slang is ephemeral. The words people use to say "this is good" rotate every few years, and each generation's vocabulary becomes incomprehensible to the next. This project treats that as a feature: each era of internet slang becomes a selectable dialect for the same set of DNA analysis operations. The biology doesn't change — only the way you talk to it.

bioLOLPython is a time capsule. New dialects are generated quarterly from whatever is trending, so the project accumulates a running record of how the internet spoke at each point in time.

Background

LOLCODE is an esoteric programming language created in 2007 by Adam Lindsay, based on lolspeak — the broken-English caption style from the lolcat meme era. LOLPython, by Andrew Dalke, adapted the concept into a Python transpiler.

bioLOLPython extends LOLPython with bioinformatics commands and a dialect system that maps internet slang from different eras to the same DNA analysis operations.

Installation

From PyPI:

pip install bioLOLPython

Or install with pipx for an isolated CLI tool:

pipx install bioLOLPython

For development:

git clone https://github.com/ChenHsieh/bioLOLPython.git
cd bioLOLPython
pip install -e .

Quick Start

HAI GENZOME 1.0
DNA GO X ITZ "ATGCGTAC"
GC BOMB X
TRANSLATE X
VISIBLE "protein: " + X
KTHXBYE

Save as hello.lolz and run:

bioLOL hello.lolz

Or use Chinese internet slang:

666 基因组
安排 X 是 "ATGCGTAC"
YYDS检测 X
翻译 X
xswl "蛋白质: " + X
撤了
bioLOL --dialect wangyuyan hello_cn.lolz

Or brainrot:

SKIBIDI GENOME
SIGMA X RIZZ "ATGCGTAC"
AURA CHECK X
LOOKSMAX X
HAWK TUAH "protein: " + X
MOGGER OUT
bioLOL --dialect brainrot hello_brainrot.lolz

Dialects

Each dialect represents a different era of internet slang. The biology stays the same — only the syntax changes.

DialectEraVibe
lolcat~2005-2012I CAN HAS BIOINFORMATICS?
taiwan_ptt~2010-2020484很純?PTT/Dcard鄉民用語 (Taiwanese internet slang)
wangyuyan~2015-2020666这基因组YYDS (Chinese internet slang)
gen_z~2018-2023no cap this DNA is bussin fr fr
brainrot~2023-2026skibidi DNA sigma rizz

New dialects are generated quarterly by AI based on current internet trends. For the full gallery with command cheat sheets, see GALLERY.md.

Side-by-side comparison

Operationlolcatgen_zbrainrot
StartHAI GENZOMEYO ITS GIVING GENOMESKIBIDI GENOME
Declare DNADNA GO X ITZ "ATGC"NO CAP X IS "ATGC"SIGMA X RIZZ "ATGC"
GC contentGC BOMB XVIBE CHECK XAURA CHECK X
Reverse complementREVERSE THAT XUNO REVERSE XFANUM TAX X
TranscribeTRANSCRIBE XMAIN CHARACTER XEDGING X
TranslateTRANSLATE XGLOW UP XLOOKSMAX X
ComplementCOMPLEMENT XMIRROR CHECK XREVERSE UNO X
LengthHOW LONG XBESTIE HOW LONG XGYATT HOW LONG X
Find ORFFIND ORF XUNDERSTOOD THE ASSIGNMENT XSIGMA GRIND X
Motif searchMOTIF HUNT X FOR "CCC"LIVING RENT FREE X FOR "CCC"SUSSY SEARCH X FOR "CCC"
MutateI CRAVE VIOLENCE XCAUGHT IN 4K XONLY IN OHIO X
AlignALIGN A WIT BRIZZ CHECK A AND BMEWING CONTEST A VS B
PrintVISIBLE "..." + XSPILL "..." + XHAWK TUAH "..." + X
EndKTHXBYEPERIODTMOGGER OUT

Commands

bioLOLPython supports 14 biological operations, each mapped to dialect-specific syntax:

CommandDescriptionOutput
DeclareDefine a named DNA sequence
GC contentCalculate GC percentageGC content: 50.00%
Reverse complementReverse complement a sequenceModifies variable in place
TranscribeDNA → RNA (T→U)Modifies variable in place
TranslateDNA → protein (codon table)Modifies variable in place
ComplementComplement without reversingModifies variable in place
LengthSequence length in basesX is 8 bases long
Find ORFFind first open reading frame (ATG…stop)ORF sequence and length
Motif searchFind all occurrences of a patternPositions of each match
MutateRandom single-base substitutionReports position and change
AlignGlobal pairwise alignment (Biopython)Similarity score and rating
PrintPrint strings and/or variablesSupports + concatenation
Start / EndProgram delimitersGreeting message on start

DNA sequences are validated against IUPAC nucleotide codes (ACGTUNRYSWKMBDHV) on declaration.

Usage

Run a script

bioLOL script.lolz # default (lolcat)
bioLOL --dialect gen_z script.lolz # Gen Z mode
bioLOL --dialect brainrot script.lolz # brainrot mode

Interactive REPL

bioLOL # lolcat REPL
bioLOL --dialect brainrot # brainrot REPL

Web interface

Try it at bioLOL.streamlit.app — includes a dialect selector and example scripts for each era.

To run locally:

pip install streamlit
streamlit run streamlit_app.py

Fetch community dialects

bioLOL --list-dialects # show available dialects
bioLOL --update # fetch latest from registry (24h cache)
bioLOL --update --force # bypass cache

User dialects are stored in ~/.bioLOL/dialects/.

Creating a New Dialect

Dialects are YAML files. Drop one into ~/.bioLOL/dialects/ for personal use, or add it to bioLOLPython/dialects/definitions/ and open a PR.

YAML format

name: mydialectera: "~2025-2026"description: "One-line description of the vibe."commands:
init:
pattern: "MY START COMMAND"greeting: "Welcome message with emoji"end:
pattern: "MY END COMMAND"declare:
pattern: 'MY DECLARE {name} WITH {seq}'reverse:
pattern: "MY REVERSE {name}"gc_content:
pattern: "MY GC {name}"response: "GC content: {value:.2f}%"print:
pattern: "MY PRINT"transcribe:
pattern: "MY TRANSCRIBE {name}"translate:
pattern: "MY TRANSLATE {name}"align:
pattern: "MY ALIGN {a} WITH {b}"response: "Score: {score:.2f} {rating}"mutate:
pattern: "MY MUTATE {name}"response: "Mutated {name} at pos {pos}: {old} -> {new}"length:
pattern: "MY LENGTH {name}"response: "{name} is {value} bases"complement:
pattern: "MY COMPLEMENT {name}"find_orf:
pattern: "MY ORF {name}"orf_found: "ORF: {orf} ({length} bp)"orf_missing: "No ORF in {name}"motif:
pattern: 'MY MOTIF {name} FOR {pattern}'found: "Found {count} match(es) for '{pattern}' in {name}:"position: " pos {start}-{end}"not_found: "No matches for '{pattern}' in {name}"examples:
GC Content: | MY START COMMAND MY DECLARE X WITH "ATGCATGC" MY GC X MY END COMMAND

All 14 commands are required. The dialect is validated on load.

Pattern placeholders

PlaceholderCaptures
{name}A variable name (word characters)
{a}, {b}Variable names for two-sequence commands
{seq}A quoted DNA sequence (e.g., "ATGC")
{pattern}A quoted search pattern

Generate with AI

Use the generator script to create a dialect with the Claude API:

# Specify name, era, and description
python scripts/generate_dialect.py "cottagecore""~2020-2022" \
"gentle pastoral internet aesthetic meets DNA" \
--validate \
-o bioLOLPython/dialects/definitions/cottagecore.yaml
# Or let Claude pick the name and era from a theme
python scripts/generate_dialect.py \
--auto "what's trending on TikTok right now" \
--validate \
-o bioLOLPython/dialects/definitions/new.yaml

Requires ANTHROPIC_API_KEY environment variable and pip install anthropic.

Auto-generation via GitHub Actions

A GitHub Action runs quarterly to generate a new dialect based on current internet trends. It:

  1. Calls the Claude API to generate a dialect YAML
  2. Validates the output against the required schema
  3. Runs the full test suite
  4. Opens a PR for human review

To trigger manually: Actions > "Generate New Dialect" > Run workflow. You can optionally provide a custom theme.

Requires the ANTHROPIC_API_KEY repository secret (Settings > Secrets > Actions).

Examples

Example scripts are in the examples/ directory:

FileDialectWhat it does
test_bio.lolzlolcatGC content, transcription, translation
test_alignment.lolzlolcatPairwise sequence alignment
test_violence.lolzlolcatRandom mutation
test_transcribe.lolzlolcatDNA → RNA
test_translate.lolzlolcatDNA → protein
gen_z_demo.lolzgen_zFull sequence analysis workflow
brainrot_demo.lolzbrainrotFull sequence analysis workflow
wangyuyan_demo.lolzwangyuyanFull sequence analysis workflow (Chinese)
taiwan_ptt_demo.lolztaiwan_pttFull sequence analysis workflow (Taiwanese)

Run any example:

bioLOL examples/test_bio.lolz
bioLOL --dialect gen_z examples/gen_z_demo.lolz
bioLOL --dialect brainrot examples/brainrot_demo.lolz

Running Tests

pip install pytest
pytest

96 tests covering the BioSeq class, interpreter commands across all dialects, and dialect loading/validation.

Requires Python >= 3.8. Dependencies: biopython, ply, pyyaml.

License

MIT

Contributing

Contributions welcome — especially new dialects. The easiest way to contribute:

  1. Write a YAML dialect file following the format above
  2. Add your dialect name to bioLOLPython/dialects/definitions/index.txt
  3. Add example scripts to examples/
  4. Run pytest to verify
  5. Open a PR

Or use the AI generator as a starting point and customize from there.

Acknowledgments

  • LOLPython by Andrew Dalke (public domain) — the original inspiration
  • Bioinformatics extensions, dialect system, and curation by Chen Hsieh
  • Development assisted by Claude (Anthropic) and ChatGPT (OpenAI)
  • Every generation of internet users who invented words that made the previous generation confused

About

Analyze bio sequences with internet slang

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages