How this started · What this is · The findings · What I got wrong · Try it · License
De-extinction and cultivated meat: a fact-checked review, and three packages that compute the numbers nobody published.
A folder of MrBeast transcripts. One episode about futuristic technology mentions de-extinction and lab-grown chicken, in the breezy way YouTube mentions things, and it raised an obvious question: is any of this real, and how would I know?
So the first half of this repo is a long, boringly careful fact-check.
Some of what fell out:
- The episode aired 2026-01-24. Upside Foods, one of the companies in it, had been selling nothing for about two years — and had quietly pivoted to selling cell culture media to pharma the day before, on 2026-01-23.
- Colossal's valuation reached $10.2 B while cultivated-meat funding fell 96% from its 2021 peak. Same decade, same biotech, opposite directions. The report argues the difference is that only one of them has to win on price in a commodity market.
- Vow's 2023 mammoth meatball was mammoth myoglobin with "gaps filled from African elephant", grown in sheep cells, unveiled at a museum in Amsterdam. Nobody ate it. Vow's own CSO: "I've got no idea what the potential allergenicity might be."
- The famous 1951 Explorers Club mammoth dinner was green sea turtle. Somebody genotyped the leftovers and published it in PLOS ONE in 2016.
📄 The full report — the sources, the timeline, and an appendix listing the twelve things it could not confirm.
Then the fact-check ran out of road. "Gaps filled from African elephant" — how many gaps? Vow never said. Nobody had asked. And the sequences are public.
So the second half of this repo is three Python packages that answer it.
A reading guide, so you know what you are looking at before you scroll.
| Part one | A fact-checked review of de-extinction and cultivated meat as they stood in August 2026, built from primary sources. Everything it could not confirm is listed in its own appendix rather than dropped. → the full report |
| Part two | Three Python packages that answer the question the review ran out of road on: "gaps filled from African elephant" — how many gaps? Everything below Part 1 is output from those. |
| The claim | Every number here is recomputed from UniProt, NCBI and TimeTree by a named script. Nothing is quoted from a press release without being checked, and nothing is estimated where it could be measured. |
| Not the claim | This is not peer-reviewed, and it is one person's work. The corpus is small — 43 nuclear protein comparisons — and biased toward whatever survives in ancient specimens. Where a result rests on that, it says so on the spot. |
| Best entry point | If you read one thing, read §5 — nothing to copy and §6 — the test I couldn't rig. If you want to know how far to trust any of it, § what I got wrong is the honest answer. |
chimaera ── what can be combined with what, and what you'd actually get
├── walghvogel ── ...and what it would taste like
└── tzeentch ── ...and what it would look like
Every number below is recomputed from UniProt, NCBI and TimeTree by a script in this repo. Where a number is wrong, the file that produced it says so.
Press releases use one word — hybrid, chimera, fused — for five physically unrelated operations. Separate them and something falls out immediately.
| operator | what it physically is | genetic result | what stops it |
|---|---|---|---|
blend |
tissues mixed in a bowl | none | almost nothing |
express |
one foreign gene in a chassis | chassis + one protein | protein folding |
edit |
chassis loci rewritten | chassis + N foreign alleles | edit burden, epistasis |
graft |
blastocyst complementation | organ-level chimerism | phylogenetic distance |
cross |
hybridisation | 50/50 genomes | chromosome pairing |
You can combine a pig and an apple — 1.53 billion years apart — far more easily than a baboon and a sheep, 94 million years apart. As long as you don't do it genetically.
Which is why every cultivated meat product actually on sale is a blend. Aleph's
approved steak is 10–20% cultivated cells. GOOD Meat's was 3%. Meatly's pet
food is 4%. Not squeamishness — blend is the only operator whose difficulty
doesn't explode with evolutionary distance.
That table is a model, and models are worth exactly as much as their
calibration. cross decays with divergence, anchored on a line that reads
"horse × donkey (~4 Ma) ... halving at 4 Ma puts the mule at the midpoint."
Horse and donkey are 11.1 Ma apart. TimeTree 5, same source as everything else here. The half-life had been set from a wrong number, so the mule scored 0.146 — the model called the most-bred hybrid in history barely feasible, and missed its own stated target by a factor of three. Nothing caught it, because the operator had never once been scored against a hybrid that exists.
So I scored it against eleven that do.
| cross | Ma | 2n | what actually happens | score |
|---|---|---|---|---|
| goat × Pyrenean ibex | 1.77 | 60/60 | fertile | 0.895 |
| cattle × yak (dzo) | 4.3 | 60/60 | females fertile | 0.765 |
| cattle × bison (beefalo) | 4.3 | 60/60 | females fertile | 0.765 |
| dromedary × Bactrian camel | 4.35 | 74/74 | fully fertile | 0.762 |
| lion × tiger (liger) | 6.8 | 38/38 | females fertile | 0.654 |
| sheep × goat (geep) | 9.3 | 54/60 | usually dies in gestation | 0.559 |
| horse × donkey (mule) | 11.1 | 64/62 | viable, sterile | 0.500 |
| horse × zebra (zorse) | 11.1 | 64/44 | viable, sterile | 0.500 |
| cattle × sheep | 24.6 | 60/54 | nothing | 0.215 |
| chicken × Japanese quail | 39.0 | 78/78 | embryos develop | 0.088 ❌ |
| cattle × pig | 62.0 | 60/38 | nothing | 0.021 |
Fixed, the mule lands on exactly 0.500 and ten of eleven come out right. The old calibration had been calling the beefalo — a registered commercial breed — and a camel hybrid people have bred on purpose for millennia, implausible.
Two things worth noticing in that table. Sheep and goats are closer together than horses and donkeys, and their cross almost always dies while the mule built half the transport of the pre-industrial world. And chicken × quail is 39 Ma — four times the sheep–goat gap — and the embryos develop anyway.
The usual explanation is chromosomes: chickens and quail both carry 2n=78, while sheep and goats differ by three fusions. I expected that to beat divergence outright. It doesn't. A single divergence cutoff near 8 Ma separates fertile from sterile 11 times out of 11; matched karyotype manages 10. Reported the way it came out, with a test pinning the direction so the better story can't quietly come back.
The top row of that table isn't a curiosity. Goat × Pyrenean ibex is why the bucardo attempt had a surrogate at all.
The Pyrenean ibex went extinct on 6 January 2000, when a falling tree killed the last one. Cells had been banked. In 2003 a clone was implanted into goat–ibex hybrid females, and one was carried to term.
It is the only time an extinct animal has ever been born. It lived about seven minutes and died of a malformed lung.
chimaera scores that cross at 0.895 — the highest in the table, and
correctly so. The cross was never the hard part. Nothing in this repo's
feasibility model has anything to say about the lung, which is the whole
problem: a high score means this step is not what stops you.
Take UniProt's mammoth myoglobin. Align it to the African elephant myoglobin Vow said they patched it with. Sort every residue into three buckets.
| of 154 residues | |
|---|---|
| distinctive — mammoth data and different from elephant | 2.60% — 4 residues |
| mammoth data, but identical to elephant anyway | 79.87% |
| no mammoth data at all. Pure elephant. | 17.53% — the entire C-terminal third |
Four residues. The mammoth meatball was 97% not-mammoth, and about a fifth of it was elephant with the label filed off.
Across 95 reconstructions in 7 extinct species, the median distinctive fraction is 1.84%. Half of every "resurrected" protein in the public record differs from its living cousin by fewer than one residue in fifty.
But — and this is what stops it being a gotcha — Campbell et al. 2010 showed that the handful of substitutions separating mammoth from elephant haemoglobin carries the entire cold adaptation. Two per cent of the residues can be the whole animal. This measures how much sequence is distinctive. It says nothing whatsoever about whether it matters.
The drawings at the top of this page are mine. These are the animals.
The quagga photograph is one of only five ever taken of a living one, and the thylacine is the individual that died at Hobart Zoo in 1936, after which there were none. Both are public domain because both animals have been gone long enough for the copyright to lapse — an odd way to be reminded of the timescale this repo is measuring.
Public domain, CC0 and CC BY-SA from Wikimedia Commons, fetched by
scripts/fetch_commons_images.py, with every
author and licence recorded in
assets/photos/CREDITS.yaml.
Fair question. Maybe this measures ancient-DNA quality rather than biology.
There's an external check available, because TimeTree knows how long ago each pair split from a completely separate body of evidence.
Nuclear r = +0.794, mitochondrial +0.617. And the natural control behaves: the aurochs is 0.05 Ma from domestic cattle, and the nuclear measurement returns exactly zero. A method that found difference there would be reporting noise.
While we're checking things — the fallback used when TimeTree has no entry is a clade-age guess, and it's worth knowing how bad that is:
Across 188 pairs: 164 within ±15%, and 163 of those are overestimates. Which is exactly what the method's own caveat predicts, since a clade's age is its deepest split. Biased, usable, and now measured instead of assumed.
Every de-extinction headline gives you a numerator. 45 genes edited. 20 edits at 14 loci. 12 genes in the woolly mouse. Out of how many?
Six mammoth proteins gave an answer so wide it carried no information (19%–81% of the proteome). So instead: fit one substitution rate across every nuclear observation at once, using the fact that a long protein is more likely to show a difference than a short one.
λ = 5.7 × 10⁻⁴ per residue per Ma, from 43 nuclear observations. Which is squarely inside the range reported for protein evolution generally — and nothing in the fit was told to land there, so that's a free sanity check.
The answer: Colossal's 45 mammoth genes represent 0.32%–0.50% of the genes expected to differ.
Here's the one I didn't expect.
Colossal edited 12 genes in the woolly mouse. FGF5 — hair length — is one of
them. So I pulled every proboscidean FGF5 in the record.
271 residues. Four species. One variable site, and the mammoth isn't even the odd one out — it carries the majority allele, and the African forest elephant is the outlier.
There is no mammoth-specific FGF5 protein to copy. Editing a mouse "toward mammoth" at that gene cannot mean copying a mammoth variant, because none exists. Which independently corroborates Colossal's own statement that only 2 of the 12 genes had direct mammoth counterparts.
Then the obvious follow-up: how often is that true?
Twelve of 43 nuclear comparisons come back identical. But "identical" is only interesting when it was the unlikely outcome — a 27-residue fragment across 6.4 Ma comes back identical by arithmetic alone. So each null gets scored against a rate refitted with its own species thrown out (otherwise the sea cow would be grading its own homework). Five of twelve survive.
Extrapolate to whole proteomes and the two flagship programmes fail in opposite directions:
| target | divergence | share with nothing to copy |
|---|---|---|
| mammoth → Asian elephant | 6.4 Ma | 41% — ~8,265 genes |
| thylacine → dunnart | 44 Ma | 6% — ~1,183 genes |
The mammoth is so close to an elephant that a huge chunk of the genome offers nothing to edit toward. The thylacine is so far from a dunnart that nearly every gene differs. One edit list is short because there's little to change; the other isn't short at all. Neither is the tractable middle a headline implies.
That 41% can't be checked inside the corpus. The corpus produced it, and there is no second mammoth.
But the divergence can be matched. TimeTree puts human–chimpanzee at 6.4 Ma — the exact same median it gives mammoth–Asian elephant. Two living species, complete proteomes, no ancient DNA, no imputation, no fragments, and not a single primate anywhere in the fit.
| predicted identical | 26.3% |
| observed identical | 25.7% — 9 of 35, 95% CI 14.2%–42.1% |
| published, all orthologues | 29% (Nature 437:69, 2005) |
A rate fitted entirely on degraded ancient sequence from elephants, sirenians and marsupials lands 0.6 percentage points from a living primate pair it was never shown. And the measurement independently reproduces the published figure, which checks the alignment code as well as the model.
The mechanism shows up with nothing tuned to this pair. Short proteins come
back identical, long ones don't — and the exceptions are ones evolutionary
biology already has names for. PRM1 is 51 residues with 8 substitutions
(protamine is famously one of the fastest-evolving proteins known). RUNX2 is
569 residues and identical against 12% odds (a skeletal transcription factor
under heavy constraint).
A sequence listing is part of a legal claim. So a granted patent naming an extinct species is asserting something about that species. I checked twelve extinct taxa.
Exactly one real hit: US 12478079 B2, granted 2025-11-25, "Compositions comprising a casein." A precision-fermentation dairy patent whose 66-sequence listing spans 20 species, from sperm whale to echidna to woolly mammoth.
Not for de-extinction. For cheese.
Run the same decomposition on it and both patented mammoth caseins show zero amino-acid substitutions against the elephant caseins in the same document. Casein is intrinsically disordered and weakly constrained — caseins differ noticeably even between close relatives. Zero substitutions across 6.4 Ma is not what divergence looks like.
Two other things the survey turned up: the aurochs "hits" are artefacts (the
peptides start with GRKKRRQRRR, the HIV-1 Tat tag — they're engineered
constructs, and Bos primigenius also names domestic cattle), and Colossal's
most-publicised animal, the dire wolf, has zero protein sequences in
UniProt, NCBI, and the patent literature.
This repo opens by asking how much mammoth was in the mammoth meatball. Here is the other half of that question, which nobody asked either.
Vow's meatball was sheep muscle cells expressing one mammoth protein, grown in a bioreactor. Run that exact construct through the flavour model:
| sheep, farmed | the meatball | |
|---|---|---|
| myoglobin (bloody) | 6.0 | 6.5 |
| BCFA (mutton) | 9.0 | 0.45 |
| Maillard (roast) | 6.0 | 2.7 |
| reads as | mutton, sheepy, bloody, roast | bloody, roast, fishy, green |
The mammoth gene buys +0.5 on one axis — which is what 2.60% of one protein gets you. Meanwhile the bioreactor collapses branched-chain fatty acids from 9.0 to 0.45, and BCFA is the compound class that makes lamb taste like lamb.
The mutton note doesn't survive, and no mammoth note arrives.
There is a trap in the arithmetic here, and I walked into it. Summed across all seven traits the meatball is closer to mammoth than farmed sheep is — which sounds like the transgene working. It isn't. Sheep sits far from mammoth largely because of its BCFA, so destroying the BCFA closes the gap. Over 90% of the movement toward mammoth comes from stripping out the sheep; under a tenth comes from the mammoth gene. A test asserts that split, because the aggregate number on its own tells the flattering version.
Same mammoth genome, farmed versus cultivated. Myoglobin: unchanged at 8.5. Branched-chain fatty acids: 2.0 → 0.1. Maillard precursors: 6.0 → 2.7.
A bioreactor has no rumen and no post-mortem glycolysis. The flavour was never only in the genome — and an extinct animal can only ever be cultivated. You cannot get the farmed column back.
![]() turducken |
![]() beef Wellington |
![]() cassoulet |
![]() duck à l'orange |
![]() prosciutto e melone |
Turducken first. Chicken inside duck inside turkey — the most elaborate
composite dish anyone actually eats, three species in one object, and the model
scores it 1.000. A pure physical blend, so evolutionary distance costs
nothing at all. Nothing genetic comes anywhere near that easy.
The other four are pairings, each prepared twice.
| dish | plated | fused | lost |
|---|---|---|---|
| lamb-and-beef kofta | 6.5 | 2.7 | −3.8 |
| beef Wellington | 6.8 | 3.2 | −3.6 |
| cassoulet | 6.2 | 2.7 | −3.5 |
| duck à l'orange | 5.4 | 2.9 | −2.5 |
| pork with apple | 4.8 | 2.7 | −2.1 |
| prosciutto e melone (raw) | 3.4 | 2.7 | −0.7 |
Every cooked dish loses its roast, including the ones with no fruit in them.
The last row is the point. Prosciutto e melone is the control: it is served raw. If fusing simply carried a flat penalty, it would pay the same tax. It loses 0.7 where the cooked dishes lose 2.1 to 3.8 — because what fusing actually costs you is the cooking. A fused product has to be grown, and a bioreactor has no Maillard chemistry to lose in the first place. That is the difference between a mechanism and an artefact, and a test enforces it.
The kofta is worth a second look too. Sheep carrying beef myoglobin is the same shape as sheep carrying mammoth myoglobin, and it loses "mutton, sheepy" the same way. So the meatball result is about cultivation, not about mammoths.
| product | cultivated cells | myoglobin |
|---|---|---|
| farmed beef | 100% | 8.0 |
| Aleph Thin-Cut Steak (2026) | 15% | 1.20 |
| Meatly pet food (2025) | 4% | 0.32 |
| GOOD Meat 3 (2024) | 3% | 0.24 |
Myoglobin is what makes meat read as meat, and in a blend it scales with mass fraction — so a 3% product carries 3% of beef's. That is arithmetic and holds whatever the rest is made of. Every cultivated product ever sold sits in the flat part of that curve.
Same trap, different dish. What if you fused an apple and a pig?
| stewed together | fused (apple ester genes in pig cells) | |
|---|---|---|
| esters (fruity) | 2.8 | 6.4 |
| Maillard (roast) | 4.8 | 2.7 |
| reads as | roast, savoury, soft fat | fruity, apple, soft fat |
The fruit arrives and the roast leaves with it, because a fused product has to be grown rather than slaughtered. You cannot fuse your way to the dish.
The uncomfortable part of a flavour model is that its predictions are mostly uncheckable — the animals are gone. Except that some of them were eaten by people who wrote it down.
Say "fish crossed with a bird" and everyone pictures roughly the same creature.
|
What people picture |
What the model predicts |
Transfer every gill gene a fish has into a bird and the gill axis barely moves. Amniotes kept the pharyngeal arches and most of the patterning genes, and they still have no gills — because what was lost is the downstream competence, not the instruction. The dashed outlines are what the transfer doesn't produce.
This isn't a hunch. It's the best-documented case in the field:
The same four enamel genes close 41% of the distance to the donor in a mouse and 7% in a chicken. Restore the competence first and the chicken jumps to 23% — from two genes that build no enamel whatsoever.
The one that worked. Harris et al. 2006 got archosaurian teeth in
a chicken — with no tooth gene supplied and no fish involved. A mutation
restored competence the lineage had switched off, and the programme still
ran, ~70 million years after birds last used it. The embryos don't hatch.
A chimera generator that grants every requested trait would be worthless. The value is in the refusals.
There's also a natural controlled experiment sitting in the data — two extinct birds from the same family that differ in essentially one thing:
Left in on purpose. A repo that only shows its wins is telling you less than it looks like — and in two of these five, the mistake is what produced the result.
1. Ambiguity codes counted as differences. Seven of Steller's sea cow
haemoglobin's twenty-four "substitutions" were the letter X. Scoring those as
differences credits an extinct animal with information nobody has. Caught by
sanity-checking an outlier that looked too good.
2. Rate-limiting silently destroyed a dataset. A throttled UniProt run
overwrote a 67-pair index with 21 pairs, without an error. Now: retry with
backoff, a distinct exception for transport failure, and the writer refuses
to shrink the dataset without --force.
3. Compartment classification was wrong in both directions at once. It used
gene-symbol prefixes. ATP7 is a nuclear copper transporter that the ATP
prefix called mitochondrial; NADH5 and NADH6 are mitochondrial ND5 and
ND6 that don't start with ND, so they were counted as nuclear. The errors
cancelled each other, which is how they survived. Fixing them moved the
headline numbers by 2–3% — and took the nuclear external correlation from
+0.276 to +0.794, because one misfiled gene had been dragging the whole trend
apart. Nobody went looking for that; it fell out of listing gene symbols for
something else.
4. I overstated the FGF5 claim. With only one pairwise comparison it looked as though the mammoth carried a phylogenetically diagnostic state — which would have proved the sequence was genuinely read rather than imputed off an elephant. Adding the fourth sequence killed that argument: mammoth carries the majority allele, which diagnoses nothing. The failed argument is preserved in the data file rather than deleted, and a test asserts it's still there.
5. The cross operator missed its own calibration point by 3×. Its anchor
said "halving at 4 Ma puts the mule at the midpoint" — but horse and donkey are
11.1 Ma apart, so the mule came out at 0.146 instead of 0.5. The model was
calling a registered commercial breed implausible. It survived because every
test I had written checked the model against itself; nothing checked it
against an animal you could go and look at. The fix is in
data/feasibility.yaml with a
correction: field next to the number, because the number is what a reader
sees.
- No unsourced predictions. Every claim carries an evidence chain with weakest-link confidence. Speculative output is withheld by default.
- Calibration lives in YAML, not code, next to the precedent it's derived from. Disagree with a result, find the assumption in one file.
- Negative controls that can actually fail. The testimony validator has tests proving it returns INCONSISTENT when it should. A check that cannot fail proves nothing.
- Circularity gets flagged, not buried.
- When a modelling choice can't be settled, both options get reported — and the default is the conservative one, the one that weakens this project's own claim.
git clone https://github.com/koriyoshi2041/anistrang.git
cd anistrang
pip install pydantic pyyaml biopython matplotlib numpy pytest
for p in chimaera walghvogel tzeentch; do
(cd projects/$p && PYTHONPATH=.:../chimaera python3 -m pytest -q)
done
# recompute the headline number from UniProt
cd projects/chimaera
python3 scripts/fetch_sequences.py # UniProt → local cache
python3 scripts/analyse_provenance.py # align and decompose
python3 scripts/make_figures.py # all nine figuresanistrang/
├── de-extinction-and-cultivated-meat-2026.md the research report
├── docs/reference-repos.md guide to 8 cloned open-source projects
├── scripts/clone-reference-repos.sh fetch those 8 (gitignored, ~213 MB)
└── projects/
├── chimaera/ composition engine · provenance · saturation
├── walghvogel/ flavour channel
└── tzeentch/ morphology channel
Each package has its own README with the full method, the caveats, and the places its conclusions don't hold: chimaera · walghvogel · tzeentch
The pick of the reference repos is a GFI-funded notebook that replicates Humbird's techno-economic analysis — the most-cited sceptical paper in cultivated meat, reproduced with money from the field's main advocacy group. You can re-run it with your own assumptions.
| licence | |
|---|---|
| source code | MIT |
| data, figures, illustrations, prose | CC BY 4.0 — attribution required |
assets/photos/ |
each file under its own Wikimedia Commons terms, see CREDITS.yaml |


































