When people say “Gallifreyan,” they usually mean Sherman’s Circular Gallifreyan (the fan system). This one:
And buckle up mothafuckas since I'm about to dive into mathematical modelling of this beautiful bastard.
I thought about the possible word encodings and calculating info density. So, I considered symbol set sizes, entropy, error correction (checksums), redundancy, and how these relate to things like compression. I started by setting up a basic model suitable for things like Circular Gallifreyan, which might have 24 to 26 letters. I adjusted for this and worked out examples carefully.
For a word-circle with n letters, each letter occupies M angular slots, and repeated letters are allowed. The formula for capacity in bits per letter is log2(options per glyph). With 26 possible letters, each encodes as 4.7 bits. Adding features like angle or stroke variants increases options, but many are redundant and could be used for steganography. In sentences, the circle's arrangement and spacing hold extra hidden info, like covert channels.
For steganography, I considered using angle quantization by dividing the circle into bins, each hiding bits. At 1000x1000 px, the smallest discernible angle is about 1 degree, so we get around 360 bins, though realistically around 60. For letters, the angular slots would be about 3.6 bits per letter, which could support covert channels via slight jitter. I modelled literal encoding with 26 letters, yielding roughly 4.7 bits per letter.
For a word of length n, it's n * 4.7 bits without considering language redundancy. But English lets us compress further, so for large text, each character carries 1 to 1.5 bits of information. The Gallifreyan system adds redundancy for aesthetics, not cryptographic compression. I also considered a parametric system where rotations per letter increase covert capacity. For example, with 12 rotation angles, 4 dot options, and 2 thickness levels, 5 letters would give 32.9 bits of covert information.
When thinking about channel capacity under noise, I needed to consider the quantization step and potential drawing errors. To reliably transmit r bins, the bin width must be much greater than six times the standard deviation of angular error. I could also compare this to the Pigpen cipher.
Treat the script as two layers:
Literal layer (decoding-visible): a monoalphabetic substitution that maps the 26 English letters to circle+arc+dot shapes placed around a word-circle in clockwise order.
Parametric layer (reader-ignored): geometric degrees of freedom (start angle, inter-letter spacing, stroke thickness, dot count variants, radial offsets, etc.) that don’t change the decoded text but can carry extra bits (steganography).
I quantified both for Whovian's entertainment :D
1) baseline information content (literal channel)
You’re still just writing English letters in a fancy coat.
Alphabet size ≈ 26 → per-letter info = log₂(26) ≈ 4.7004 bits/char.
A word of length n: ~4.7004·n bits (before English redundancy).
Real English has ~1.0–1.5 bits/char entropy at scale, so Gallifreyan doesn’t magically compress; it just reformats.
2) where the fun starts: parametric (covert) channels
These are degrees of freedom a standard reader won’t (or isn’t supposed to) use for decoding. You can quantize them to smuggle extra bits.
Start angle of the word-circle (where the first letter sits). If you quantize to r positions (e.g., “clock hours” → r=12), capacity = log₂(r) bits/word.
Per-letter angular jitter (micro-rotation of each letter glyph relative to its nominal slot). If you allow rℓ resolvable bins per letter: log₂(rℓ) bits/letter.
Dot-count variants that the reader ignores (e.g., choose among D options that still decode the same letter): log₂(D) bits/letter.
Stroke weight choices (t thickness levels distinguishable on the medium): log₂(t) bits/letter.
Radial offset of each word inside the sentence ring (q resolvable tracks): log₂(q) bits/word.
Inter-word angular spacing (s bins for the gap size while keeping order): log₂(s) bits/gap (≈ per word, practically).
Below are the example capacities I calculated because I was bored.
Per-letter covert mix: rℓ=12 bins of micro-angle + D=4 dot options + t=2 thickness levels
→ per letter options = 12·4·2=96 → log₂(96) ≈ 6.585 bits/letter.
A 5-letter word using that mix → 5·6.585 ≈ 32.9 covert bits plus 3.585 bits from word start angle ≈ 36.5 covert bits per 5-letter word.
Sentence ring with w words and q=8 radial tracks → extra w·log₂(8) = 3w bits.
You can stack these as long as your drawing/printing medium supports the resolution reliably (more on that below).
3) design-space size (how many distinct encodings exist)
For a single word of length n:
Visible text choices (the actual word): 26ⁿ possibilities.
Covert geometry choices (example above):
per-letter 96 options · per-word start-angle 12 → 12·96ⁿ variants for the same visible word.
Total design-space for content+covert per word: 26ⁿ · 12 · 96ⁿ = 12 · (26·96)ⁿ = 12 · (2496)ⁿ encodings.
Nobody’s brute-forcing that by eyeballing a tattoo. (They don’t need to though since they’ll just read the plaintext like a normal substitution and miss the covert bits. And that’s the whole point.)
4) error model & reliable bin counts (how many bins can you actually use)
All covert capacity hinges on distinguishability under noise.
Let σθ be the standard deviation of angular placement noise (human drawing, scanning, camera skew).
For robust decoding, target bin width Δθ ≳ 6σθ (rule-of-thumb for low error).
Angular bins available on a circle: r ≈ 2π / Δθ.
If σθ ≈ 0.5° on a decent print/scan, Δθ ≈ 3°, r ≈ 360/3 = 120 bins → log₂(120) ≈ 6.91 bits for an angular parameter (per use).
Hand-drawn on skin? Maybe σθ ≈ 1.5–2°, so r ≈ 360/12 ≈ 30 bins → log₂(30) ≈ 4.91 bits. Be conservative.
Linear parameters (radial tracks, line thickness) have analogous limits: minimum resolvable step ≈ 6σ of that metric.
5) layout grammar (formal-ish view)
You can sketch a grammar to reason about degrees of freedom like so:
Total covert capacity for a sentence with w words and word lengths
Plug in the earlier example (r_word=12, rℓ=12, D=4, t=2, q=8, r_sent=12) to get concrete bit counts.
6) cryptanalysis implications
Breaking the visible text is trivial if the analyst recognizes the system (monoalphabetic substitution; frequency analysis works with enough text).
Missing the covert channel is very likely to happen. Unless an analyst hypothesizes that angles/thickness/spacing are intentional and quantized, they’ll decode the plaintext and stop. That’s covert security, not cryptographic security.
If you want actual security, layer a real cipher underneath like so:
Encrypt plaintext with Vigenère/OTP/AES → map ciphertext letters to Gallifreyan glyphs → use covert channels for MAC/check bits or extra payload.
For example, you can allocate 2–3 covert bits/letter to a parity or CRC; decoder can auto-detect tampering from hand-drawn noise.
7) practical encoding recipes
A. “clock-quantized” low-effort covert channel
Word start angle r=12 (bits/word ≈ 3.585).
Per-letter dot variant D=4 (bits/letter = 2).
Per-letter micro-angle rℓ=8 (bits/letter = 3).
Total ≈ 5 bits/letter + 3.6 bits/word.
Very robust on paper; tolerable in tattoos if you keep dots and slot angles clean.
B. “dense but fragile”
rℓ=60 (bits/letter ≈ 5.907), D=4 (2 bits), t=2 (1 bit) → ~8.9 bits/letter.
Needs print-level precision. For scans/photos, include error-correcting codes (e.g., BCH/RS) across letters.
8) steganographic throughput in images (quick sanity check)
Say you render a 1000×1000 PNG. If your minimum reliable angle step is ~1°:
r≈360 bins → 8.49 bits per angular parameter.
If you use one angular parameter per letter for a 20-letter sentence, ~170 bits hidden, plus start angles/tracks so ~200+ bits total.
That’s modest compared to LSB image stego, but here the carrier is the content itself, not the pixel noise so it is much harder to flag by generic detectors.
9) “why it works” (cognitive cheat codes)
Humans tag symmetry as art, not text so obviously there's going to be fewer attempts to decrypt. Its nonlinearity also breaks the “this is writing” heuristic, blocking casual frequency intuition. The system’s pretty geometry gives you natural side channels for hidden bits, which typical readers ignore.
dunno that I ever talked about it here, but in the spirit of beginning as you mean to go on, I finished that first warp and cut it free from the loom just before the move.
11m of cotton warp and a whole bunch of twill sampling in mostly cotton, some rug wool, and one textured sparkly acrylic bit.
it's hemstitched at the beginning and end of every single piece and I think I want to cut it apart before the gentle cycle in the washing machine, and probably separate the wool rugs from the cotton fabric for lint's sake if nothing else. I have seen arguments for both cutting them apart and not...any one have thoughts?
glamour shots of unbathed beauty off the loom below the cut (worth clicking through on mobile, they are much better focused than the scrolling display).
Dear fic author: While knitting secret information into scarves is a classic and clever trope, you really don't want to use dropped stitches as part of the code. At all.
"Okay," Ron sighed. "I'm just going to say it. I'm not convinced about Percy."
"Convinced?" Bill asked. "What the fuck does that mean?"
"He shows up at the 11th hour saying he knows Aberforth— "
"He was in danger," Charlie cut in. "They were arresting dissenters, and he didn't have anywhere to go, what did you want him to do?"
"Saying he knows Aberforth," Ron continues. "Mum let him bring Oliver Wood back to the burrow with him for some reason, and now they've been holed up together since the end of the battle. I didn't even realize they knew each other."
Hermione opens her mouth to speak, but Bill raises a hand to cut her off. "No. We're not going to do this. The war is over. We're not digging out spies and detractors any more. Percy is back now. None of of us know what he's been through, he was there when Fred," Bill stumbles over his brother's name and the temperature around the table drops several degrees. He clears his throat. "He was there when Fred died. People grieve in their own ways and shit like this- Ronald- is not making easier for him to be with us instead of 'holed up with Oliver,'" Bill huffed. "Besides, according to Oliver, Percy has been working against the ministry for years. Oliver says he saved a ton of people and he knows where all the bodies are buried "
"When did you even get a chance to talk to Oliver? When did you get him away from Percy? What are they always doing up there?" Ron jabs his finger toward the house, encompassing the window to the twins old room, where Percy and Oliver have spent the majority of the last few days, only surfacing to sit silently through meals or walk out to the old paddock in the evenings and come back red eyed and loose limbed.
"I think they are just boyfriends," Fleur says with a shrug. Everyone around the table stills so much they may have turned to stone. She looks around at all of them, then to Bill. "Is this not the word? Ills sont les petit amis, non? Les copains?" She looks around at the assembled Weasley's, Hermione and Harry. "Lovers. What did I say? What does 'boyfriends' mean?"
"Lovers?" Ginny repeats, horrified.
Charlie and Bill exchange a look. Charlie shakes his head. "Oliver can't be… surely. He's a professional Quidditch player."
"Oui," Fleur insists. "Bill, when you were attacked- Percy came to see you after Dumbly-dorrs funeral. You were not awake, of course. We talked a little, and I left him to sit with you. 'e was so sad, I thought I would bring him something, a tea. When I came back, Oliver was there, and they were in a…" She looks up at the sunset kissed sky, around the table, then back to Bill "ils se tenaient l'un l'autre. Romantique."
"I understood romantic," Harry said. "What did she say?"
"She said they were holding each other."
"And you're just bringing this up now?" Ginny demands.
Fleur straightened. "I 'ave barely spoken to Percy! I do not know Oliver! I am supposed to know this is a surprise?"
The back door creaks open and they all freeze again as Percy and Oliver step out into the garden. Hermione lets out a peel of fake laughter, realizes its the first laugh there has been in the house since the battle and turns it into a cough. Percy and Oliver exchange a look and walk self consciously toward the table. Percy executes an awkward wave. Oliver seems to be hiding something behind his back.
"Hey,' Percy says. "Everyone. What's up out here?"
"Just a nice night," Bill says. "Hard to be in the house, and…"
"You're welcome to join us," Charlie says. "If you weren't… doing something else."
Oliver looks at Percy and shrugs. "Uh, no. We were just going to get some fresh air and uh," he pulls a bottle of wine from behind his back. "Alcohol. But… we can.." He looks at Percy again and sets the bottle on the table "Break out the old refillable charm and split it, uh. Nine ways."
"Ginny's underage," Charlie says.
"No I'm not," Ginny argues.
"Yeah. Yes," Bill says, standing and pulling his wand out. "Stay. Come talk with us." He waves his wand and everyone is so busy watching him conjure a chair that they miss the back door opening again.
"What's everyone up to out here?"
In a night of stops and starts, they have still not frozen like this. Slowly, they all turn to George.
He swallows deeply, looks back at all of them, and lets a slow, hesitant smile roll over his face. "You all look like you've seen a ghost."
No one laughs. No one moves.
George nods. He leans over, grabs the wine bottle off the table. "Percy, can we talk?"
"Uh… of course. Yes." Percy says. George nods again and starts to walk away. Percy rocks strangely on the spot, as though cutting off a movement, touches Oliver's back, and scurries after George.
Oliver watches them go, then settles himself down into one of the vacant chairs.
They stare at each other in silence for a moment.
"I will go get some more alcohol," Charlie volunteers.
Malware Hidden in Plain Sight Inside Browser Icons
A rogue Firefox extension used image steganography to smuggle malware past security reviews, quietly infecting users who trusted the browser’s extension store.