Neural narratives in Python #8

I recommend you to check out the previous parts if you don’t know what this “neural narratives” thing is about. In short, I wrote in Python a system to have multi-character conversations with large language models (like Llama 3.1), in which the characters are isolated in terms of memories and bios, so no leakage to other participants like in Mantella. Here’s the GitHub repo.

The last entry ended when I had managed to add a hole-in-the-wall to the ongoing story. Let’s enter it and allow the player character to describe it.

Every time you enter a new location, the app checks if there is a list of character generation guidelines already created for this combination of places, and if there isn’t, it generates that list. After a short while, the app produced the following:

That one about a brilliant university student sounds like a great contrast to the existing characters. I pressed the button that generates a new character, and at the end of that process, the app presented me with the following portrait:

That looks real good. Great job on the fingers, AI. However, the large language model named this character Elara Thorn, the exact name that was generated for a character in another one of my trial-run stories with this system. Perhaps at some point I’ll need to program a way of reading names from a gigantic list, then presenting the AI with about twenty random ones to choose from.

Anyway, let’s have a multi-char convo.

After such a tense conversation, I figured that the player character would reflect on it, as well as his general circumstances. I happened to have implemented a system for self-reflection: the large language model looks at the character’s memories, then writes a sort of journal entry from the first-person perspective. It gets saved along with the rest of the memories. That helps color the dialogue and in general make the character sound more intelligent. Of course, now I generate audio files of those self-reflections as well.

My hardened player character returned home. I’ll let him describe his living arrangements.

I can imagine the player character returning to work the following day, only to be introduced to some troubled citizen who will present him with a case. However, I have also programmed a way of generating story concepts, interesting situations, interesting dilemmas, and interesting goals, in case the user isn’t too sure how to continue. Let’s generate a few.

Here are a few intriguing concepts the app has generated. When crafting any of these notions, the large language model is presented with the player’s information and that of his followers, and also all the available information about his location (world, region, area, and possibly location).

I should probably turn those post-its into something else, like papers or something, because such long texts look funky in a vertical format. That’s a minor issue in any case.

Investigating a series of gruesome murders connected to the otherworldly horrors sounds good for a story, and even more if the encounter with the arrogant student earlier does hint at a larger plot involving a secret society of reckless scholars. I also like the notion of a neighbor calling on his door to ask for his help because the person’s daughter has gone missing. Also, the sort of post-apocalyptic story of the grizzled detective leading a ragtag group as they fight against the pouring eldritch horrors sounds pretty fucking dope.

How about general goals?

Some of those are interesting. The disappeared scholar could easily be the aforementioned college girl, so how would the detectives feel about investigating her disappearance? The goal about infiltrating a cult makes me think that I would need a way of altering a character’s description so they can pass undercover, because other characters are fed the participants’ description during a conversation. And again, someone is requesting the detective’s help to find their missing child.

Neural narratives in Python #7

I recommend you to check out the previous parts if you don’t know what this “neural narratives” thing is about. In short, I wrote in Python a system to have multi-character conversations with large language models (like Llama 3.1), in which the characters are isolated in terms of memories and bios, so no leakage to other participants like in Mantella. Here’s the GitHub repo.

Last time, I managed to nail creating voice lines for the dialogues of my app, relying on a RunPod server dedicated to generating audio. Now I want to go on a serious test run of app to see what it lacks.

Starting from scratch, I created a new world, a new region of that world, a new area of that region, and a new location of that area. I won’t detail the specifics, because the app itself should do it like a story would do, so if in the course of testing the system I feel that something must be implemented to cover for the shortcomings, I will do so.

The process of creating a new playthrough requires you to provide some notion of the character you want to play as. I ended up with a good depiction of the guy.

I have the initial setting and the player character (including his automatically assigned voice model). A story needs other characters, so I went to the section that shows the character creation guidelines that have been generated for this combination of places.

I turned them into post-its. Anyway, my protagonist is a police detective, so he could do with a partner. I grabbed the second guideline and made her a woman.

The app doesn’t allow you to access most of the specific data of a character except in very paricular circumstances, so in general, you have to glean the specifics of a character from their looks and the conversations you have with them.

In a story, you need some sense of where you are. There’s a system in place for the LLM to generate a description from the first-person perspective of the player character, and at this point it’s trivial to generate a voice line for it:

Let’s interact with the sole other character around (for now). As I was running a conversation with the protagonist’s partner, I ran across the first issue: when the app had to generate a voice line for a bit of ambient text, the server (the RunPod pod) returned a 404. I guess that even if a pod is technically running, it could intermittently produce 404 errors for whatever reason. I guess I’ll need to program in some retry system to cover these cases.

I did do that. Let’s continue.

The “stop your a coffee” was my blunder. Old, stupid fingers.

The couple of grizzled detectives exited the police station, back to the grim city surrounding it.

Now I want my characters to move to the mentioned location, some bar. Even though I didn’t create any other locations for this run other than the police station, there is a lingering issue with the interface: when plenty of possible locations exist, if you press the button “Search for location,” it may link locations you don’t want (like a cave, a hospital, etc.). Now that I was looking specifically for a bar, I figured that I may as well fix this issue.

It took quite a while, but now the user can only search locations by a type. In fact, if no locations are available, because they have already been used or they don’t match the area’s categories (you don’t want a fantasy bar in a cosmic horror story), the select and the button will be disabled.

Well, that was all for today. I expected to do more, but reworking that interface was arduous.

Neural narratives in Python #6

I recommend you to check out the previous parts if you don’t know what this “neural narratives” thing is about. In short, I wrote in Python a system to have multi-character conversations with large language models (like Llama 3.1), in which the characters are isolated in terms of memories and bios, so no leakage to other participants like in Mantella. Here’s the GitHub repo.

In the previous entry, I came up with the notion of producing audio voice lines for the conversations. Mantella had spoiled me in that regard: hearing those fictional characters answering you in reasonably good voices while you stared at them did wonders for immersion. And it was a bad idea to shove that possibility into my mind, because it prevented me from sleeping last night. Instead, I moved to my desk at three in the morning and started implementing it. Now, every generated character gets assigned a voice model according to their peculiarities, and each speech turn produces voice lines that the user can play through clicking the speech bubbles. It works perfectly.

I learned that it’s a terrible idea to play audio server-side, because it crashes the server. Flask, the web framework that my app is programmed in, or maybe it happens in all web systems, also doesn’t allow the client to access any file in the server, so I had to move all the audio-playing logic to Javascript.

Given this example chat I had with a new character, who had been assigned a matching voice automatically among the relatively few I’ve introduced into the system so far:

The short convo produced this audio exchange:

Like in the original Mantella system, the quality of voice models varies greatly; sometimes they sound like theater students reading a script, recorded on a home mic. Also, the process of generating the clips sometimes shears the very end of their final sentence. Still, I can hardly complain. Listening to the characters adds so much life to the conversations you can have through this app that I see myself enjoying it for a long time to come (and not only for smut).

I’m amazed that I got this running. So, how did it happen?

In the beginning, I thought that setting up my own, local XTTS server (XTTS being a model for generating voice lines) was a good idea. I struggled through every step of the way for a few hours, fighting against obscure documentation, until I finally managed to generate a sample voice line, only to find out that it sounded like ass. Why, I have no idea. So I discarded that notion and instead I looked into Mantella’s codebase, which is up at GitHub, to see how they connected to the RunPod pods to request voice generation. RunPod is a sort of online renting system of computer and server time: you can set up a pre-configured little server that all it does is generate voice lines, and as long as you can connect to it, you’re set. Only costs seventeen cents an hour, too. Once I managed to query the list of available voice models from the RunPod pod, I knew I was going to get through this thing.

So, I had a list of all possible voice models I could rely on, and it turned out to be about five hundred fifty. They are trained from game voices, so there’s a whole breadth of possible voices one can use. How to classify them? Should I create a page on my site with a simple select box, letting the user (meaning me) scroll through a list that long?

ChatGPT, even its latest Orion preview version, clarified that it knows of no online service that could classify the more than five hundred voice samples I had produced from those voice models. I would have to do it manually, but in the beginning it would be enough with having introduced twenty or so models into the system. What tags can be applied to a voice? I relied on ChatGPT to figure that out. Now that I have that list, classifying each voice model is as easy, but time consuming, as listening to that sample on a loop while adding appropriate tags. I have ended up, so far, with the following JSON file of voice models:

{
  "npcmmel": [
    "MALE",
    "ADULT",
    "CONFIDENT",
    "STEADY",
    "SMOOTH",
    "CLEAR",
    "FORMAL",
    "CHARMING",
    "NO SPECIAL EFFECTS"
  ],
  "npcmlucasmiller": [
    "MALE",
    "ADULT",
    "CALM",
    "FAST-PACED",
    "SMOOTH",
    "CASUAL",
    "KIND",
    "NO SPECIAL EFFECTS"
  ],
  "robotmsnanny": [
    "FEMALE",
    "YOUNG ADULT",
    "STEADY",
    "WARM",
    "CASUAL",
    "MELODIC",
    "YOUTHFUL",
    "NO SPECIAL EFFECTS"
  ],
  "npcma951": [
    "MALE",
    "ADULT",
    "ANXIOUS",
    "SLOW",
    "AIRY",
    "SKEPTICAL",
    "NO SPECIAL EFFECTS"
  ],
  "npcfphyllisdaily": [
    "FEMALE",
    "ADULT",
    "STOIC",
    "SLOW",
    "MONOTONE",
    "INSTRUCTIONAL",
    "CALCULATING",
    "NO SPECIAL EFFECTS"
  ],
  "femalechild": [
    "FEMALE",
    "CHILDLIKE",
    "PLAYFUL",
    "STEADY",
    "AIRY",
    "MELODIC",
    "INNOCENT",
    "NO SPECIAL EFFECTS"
  ],
  "femaleyoungeager": [
    "FEMALE",
    "YOUNG ADULT",
    "HOPEFUL",
    "FAST-PACED",
    "CLEAR",
    "INTENSE",
    "OPTIMISTIC",
    "NO SPECIAL EFFECTS"
  ],
  "femalevampire": [
    "FEMALE",
    "MIDDLE-AGED",
    "ARROGANT",
    "STEADY",
    "SMOOTH",
    "AUTHORITATIVE",
    "CYNICAL",
    "NO SPECIAL EFFECTS"
  ],
  "femalekhajiit": [
    "FEMALE",
    "ADULT",
    "CALM",
    "STEADY",
    "GRAVELLY",
    "CASUAL",
    "PHILOSOPHICAL",
    "NO SPECIAL EFFECTS"
  ],
  "femaleuniqueghost": [
    "FEMALE",
    "YOUNG ADULT",
    "RESIGNED",
    "STEADY",
    "ETHEREAL",
    "MELODIC",
    "INNOCENT",
    "GHOSTLY"
  ],
  "femaleghoul": [
    "FEMALE",
    "ADULT",
    "MENACING",
    "STEADY",
    "RASPY",
    "INTENSE",
    "ENERGETIC",
    "NO SPECIAL EFFECTS"
  ],
  "femaleboston": [
    "FEMALE",
    "ADULT",
    "CALM",
    "DRAWLING",
    "SOFT-SPOKEN",
    "WARM",
    "FLIRTATIOUS",
    "SULTRY",
    "NO SPECIAL EFFECTS"
  ]
}

I wrote a function that narrows down the list of possible categories of tags: gender, age, emotion, tempo, volume, texture, style, personality, and special effects. If at some point there’s no matching voice models, it returns a random one from the previous filtering. I’ll probably program in the characters section of the site a simple button that redoes the process for any existing character, in case any other random fitting voice may work better.

That’s all, I guess. When I first got the idea about programming this conversation system with characters controlled by large language models, I knew that programming the multi-char convos would be the most difficult thing. The second most difficult thing that I pictured was actually making them talk out loud. No idea what big thing could be coming next. Anyway, back to the brothel.

EDIT: here’s a multi-char convo in audiobook form.

Neural narratives in Python #5

I recommend you to check out the previous parts if you don’t know what this “neural narratives” thing is about. In short, I wrote in Python a system to have multi-character conversations with large language models (like Llama 3.1), in which the characters are isolated in terms of memories and bios, so no leakage to other participants like in Mantella. Here’s the GitHub repo.

Today I’ve been busy fully redesigning my web app, now that it includes plenty of interesting features.

Index page:

What it allows you to do is pretty self-explanatory, which is good. The relationship between the places is World > Region > Area > Location, and each of them have specific behavior in-game.

Story hub:

This one requires some explanation: at any point, the user can demand the system to generate story concepts, interesting situations, and interesting dilemmas. The large language model (the AI) will take into account all the info about the character, his or her followers, and their memories, to generate concepts, interesting situations and dilemmas that may fit what’s been going on.

Here are some examples of the interesting dilemmas the system can generate. Each “post-it” can be removed by just clicking on it. And now that I think about it, maybe I should make them yellow too.

Characters hub:

The player character front and center. The character images are generated by courtesy of an OpenAI model, that is provided a special prompt crafted from the character’s information.

Character generation:

Originally I told the AI to generate whatever characters it pleased based on the world, region, area and possibly location, but it ended up creating very similar characters: for example, in a police station, it would create a succession of serious detectives. So I programmed an intermediate step in which the AI creates character generation guidelines focused on coming up with a breadth of possible characters for that place. Of course, it also respects genre.

Character memories:

After each chat (and some other activities), a summary is created of what just took place, and is stored in the memories of all the participants. Those memories are loaded in most activities, and they color the characters’ dialogues and decisions. You can also generate self-reflections: the character, according to their personality, meditates upon their experiences, and writes a sort of journal entry about it, that goes into their memories to color their behavior and dialogue further. And of course, they can self-reflect about their self-reflections.

Location hub:

Lots of stuff to do on this page: generate a description of the place, find a new location among the existing ones matching the genre, visit found locations, and travel to other areas. You can also pick up followers here, or dismiss them.

The page for goal resolution is relatively simple so far, and I developed it just this morning, but it does something quite interesting: given a goal, you ask the large language model to write a narrative of the attempt to fulfill that goal, to decide whether or not the goal was achieved, and then a paragraph or two of the resolution, which gets saved as a memory.

This came about when the owner of a brothel, a succubus, suggested that I should travel to some nearby caves in search of treasure. That sounded interesting, but I would have needed to roleplay the entire thing through dialogues, including the possible obstacles found along the way. So I programmed in a system that figures it out by itself. In the future, I will probably program in a system to resolve explicit confrontations between characters or some opponent, like a bunch of wolves or something.

Now for the meat of this stuff, the chat system:

At any place, the user can choose to chat with any combination of characters present at the location, from those loitering around to the player’s followers. Multi-char convos is the first thing I made sure to program properly.

Chat:

All the NPCs speak in character, according to their personal info, their memories, and the ongoing conversation. There’s no leakage of information from other characters, because personal memories aren’t shared. If it weren’t because the calls to the LLM can be slow according to the whims of those servers, I would call the current system perfect.

So, what’s in the future? I plan on programming a system to generate goals, like it generates concepts, interesting dilemmas and interesting situations. Those goals will be loaded in a page, in case you want to attempt at resolving them. I also want to program in a way of swapping player characters easily. To deepen the simulation, I also want to include the notion of character health, and some way of altering the characters’ equipment and health after the actions have been resolved. At some point, I may rely on some local audio-generation server like XTTS to generate voices for each NPC utterance. That would be cool.

This whole thing has been a lot of fun. If I didn’t gravitate so much toward using it to engage in smut, I would have probably posted plenty of the stuff I’ve produced through the system.

EDIT: I fed this post to the Deep Dive pair, and they produced the following podcast (AI-generated):

We’re Fucked, Pt. 127 (Fiction)

After an hiatus of nine months, mostly so I could tell the story of a motocross legend, my ongoing story, as long as a trilogy of novels, has returned. I wouldn’t blame if you if you’ve forgotten all about it. You can read any of its chapters on here, or listen to the existing audiochapters on here. I won’t continue producing audiochapters, though, because I have my fingers in too many pies. Anyway, let’s get rolling.


In the tomblike blackness, as if I were descending into the bowels of the earth, I keep inhaling oxygen to sustain the biological machinery of my aging body, even though every breath fills my throat and lungs with the stench of ammonia and rotten meat, a stink so overwhelming that it could knock out a woolly mammoth.

A click of a switch, followed by a whirring and the faint whooshing of air. With a buzz, fluorescent bulbs flare to life, bathing the subterranean lair in a bright glow.

“Here’s why I’m constantly up to my neck in bills,” my boss says.

At the center of the square-shaped room sits a hulking mass of metal: a shiny aluminum cylinder. No, not a cylinder, because a person-wide opening curves into the device, a path blocked now by an orange gate barrier that may have been pilfered from the streets. From the top of the machine grows a cluster of industrial piping, electrical wiring, and conduits resembling the ruptured guts of a mechanical beast.

A vibration disturbs the air like a low-frequency hum. From the opening of the spiral, through the gate barrier, danger leaks as a tangible yet invisible force; I sense the glare of a cosmic intelligence beyond my understanding.

The sight of Ramsés’ face, this swine in the guise of a man, with his middle-aged features, unkempt mustache, receding hairline, and lack of resemblance to Jacqueline or anyone I’d like to stare at, would have made me want to push him down a flight of stairs. Now, though, I’m glad he was born: he has led me to the one thing I couldn’t be arsed to search for properly.

“Hell yeah,” I say, and rub my palms. “I hate to admit it, boss, but you’ve done a great service for the universe.”

I grasp at the slippery reins of my sanity like a drowning woman clawing at pieces of driftwood. Alright, how can I destroy this reality-shattering device? The engraving of a skull and crossbones flashes in my mind: my trusty revolver, now stored in my work desk. I feel a pang of longing for its wood and steel to remind me of the glory days when I was still the main character and not the slave of others’ whims. Hey, Spike, my deformed, castrated pal, apart from wanting your own head blown into inhuman sludge, is this why you brought your revolver along? But I lack enough bullets to blast this spirally cylinder into nothing. Besides, I can’t forget the feeling of my hand being torn off that one time I relied on gunfire to defeat my foes, back when Alberto oozed from the wall in all his blobby, seething depravity to ruin my evening with apocalyptic tidings.

The stench is burning holes into my sinuses, and the hostility emanating from the machine thrums through my bones, but I approach the silvery-white shell, which reflects my blurry likeness like a liquid mirror. After rubbing my chin, I kick the device to gauge its solidity. Clang.

I was thinking of asking my boss if he had a chainsaw at the ready, when his hand, thick and beefy, wraps around my biceps, gripping tightly. He pulls me backward. Once I wriggle free, I’m tempted to punch Ramsés’ jaw with the force of my pent-up frustration and despair, which would atomize his teeth and ignite the meat of his face and pop his eyes. However, the fiend’s scraggly face, a map of the terrain of the damned, has contorted into a scowl, like a gorilla’s after I punted one of his relatives.

“Leire, what the hell are you doing?! You see an object you don’t understand, and the first thought you have is to break it?! Are you a chimpanzee?!”

My hand clenches around the ballpoint pen as if it were a dagger. The notion of impaling one of Ramsés’ eyeballs seems like a beautiful dream.

“Nah, I wasn’t planning on wrecking your stupid pipe thing, I just wanted to, you know, tap on it? Maybe I detected a kink that would be fixed by a whack on the side. Now seriously: I’ve finally found the cause of my misfortunes, the culprit to this whole ‘shredding reality’ business, and it’s been in the basement of my workplace all along! I should have known, given how this place has sucked up my soul ever since I foolishly allowed myself to be employed here. Anyway, once I find a way to obliterate this heinous contraption, this spiraling gate into insanity, the universe will be safe. Well, relatively safe, until the next asshole erects their own death machine. So let’s figure out how to acquire nitroglycerine.”

“Fuck’s sake, Leire, what are you blathering about?”

I sigh.

“Listen, boss, I can tell you haven’t grown so weary of life that you’ve been fiddling with, perhaps even fondling, an interdimensional end-of-the-world machine fully aware of the lethal stakes. You simply haven’t been notified by otherworldly monstrosities that tolerating this thing’s existence would lead to the irreversible and terminal cancerization of our fucking shithole of a world. Still, I must lay some blame on you, sir, as an accessory to this shitfest, whether through incompetence, naivete, or willful ignorance, if not sheer fucking stupidity, as long as you feel the machine’s malevolent aura attempting to smother our minds with its diabolical power. I shan’t have my newfound family squashed by a collapsing space-time continuum, so I must prevent the end of the universe, the death of everything, the grand finale of reality!”

Ramsés’ brow furrows as his jaw clenches, and I expect a torrent of insults and threats to gush from his mouth. Instead, he strokes the edge of his graying moustache, that unsanitary ornament made out of curly, coarse fibers that I wish to rip off strand by strand. His nostrils flare as he sucks in a breath to speak.

“I should have known you’re so demented that you wouldn’t think twice before assaulting delicate, irreplaceable hardware. Leire, I’m going to tell you a little story.”

“Oh my, is it story time? Can’t we skip it?”

“No, damn it. I need you to understand something about the machine.”

“Isn’t this chimpanzee too dumb to learn?”

My boss scrunches his greasy, perverted mug in annoyance. He pats his jacket, fishes out a cigarette, clamps it between his teeth, and lights it up. Then he takes a drag so deep that the tip glows red.

“Shut your trap and listen. This story starts back in the eighties or early nineties, when the internet was still a network of text terminals for academics. I was a kid then, if you can picture that. We used to visit relatives on my mother’s side, traveling out of province. In that family’s foyer hung a painting that terrified me even before I heard the adults talk about it. As soon as I stepped through the doorway, a malicious glare coming from the painting stabbed me through as if saying, ‘What the fuck are you doing in my house? Get out!’ I only dared to glance at the picture once, but in that brief look, I burned it into my memory.” My boss exhales smoke, then continues. “The painting depicted an elderly, bearded fisherman garbed in a canary-yellow raincoat. He faced the viewer, standing in a wooden dinghy surrounded by choppy seas and a stormy sky. The image seemed hyperrealistic, as if I could reach out and touch that rough water. The family that had chosen such an unsettling painting as the centerpiece of their foyer spoke of strange occurrences attached to it: a stench of rotten fish coming from the entrance, footsteps pacing up and down the hallway at night. I didn’t enjoy staying over. Anyway, one evening, as my brother and I were playing on the SNES in our cousins’ bedroom, the lights shut off. Far faster than it would have been possible, the stench of rotten fish swarmed the room. I heard the adults hurrying to the entrance, where they flipped the circuit breaker. I don’t recall how the rest of the evening transpired, but from that day on, I knew the painting was haunted.”

“Wow. This turned out to be an intriguing tale.”

“Sure. But as I grew older, I learned that the smell of rotten fish can be caused by circuit failure, as can a sudden power outage. Some heat-resistant chemical coatings release such stink before burning up. And strong electromagnetic fields mess with people’s brains, make them feel as if they’re being watched. You see what I’m getting at?”

“That you gaslit yourself into believing that you didn’t experience a paranormal event, just because you couldn’t handle the truth? Maybe the painting was haunted. Have you thought of that?”

Ramsés’ frown deepens.

“I told you I did.”

“It could have been both electricity and a ghost. Poltergeists love fucking with electrical systems. Anyway, I see far weirder stuff on the daily. Cultures across all ages have spoken of ghosts, and depicted them in similar ways. Doesn’t that count as evidence?”

“That may be the case, but it’s irrelevant to my point.”

“What did your tale have to do with this spiraling death machine, then?”

My boss throws his hands up.

“Oh, who knows!”

“Sure, we can waste time with anecdotes. After all, there’s no hurry to destroy that thing, not when the universe is about to be torn apart. Why don’t we find the painting, burn it with gasoline, then piss on its ashes? Not that we’d need to bother, because the world will be ending soon.”

Ramsés flicks his cigarette, sending a clump of ash to the floor.

“I suppose I must spell it out for you: the machine’s electromagnetic field messes with your already screwed-up head. You’re hypersensitive to it. Don’t bother me with this nonsense about the end of the world. Take a seat and calm down.”



Author’s note: today’s songs are “Closer” by Nine Inch Nails, and “Paranoid Android” by Radiohead. I keep a playlist with the myriad songs I’ve mentioned throughout this series. Check it out.

I’ve missed you, Leire, you fucking nutcase. I hope I can get back in the groove of this story soon.

By the way, Ramsés’ story is straight out of my childhood. The original experience is even wilder when it comes to what my relatives told about how the painting changed.

Speaking of spirals, the anime adaptation of Junji Ito’s masterpiece about obsession and spirals premieres tomorrow. Check out the clip below:

I’ve fed this chapter to the Google AI thing that generates podcasts out of any material. Check out the result:

AI podcast about Alma: a Successful Case Study

Back in 2021 I wrote this short story about a therapist and his troubled patient named Alma. Man, 2021 was one prolific year. Anyway, I’ve presented this tale to the Google AI thing that generates podcasts out of your source material so the pair of hosts would do a review. Check it out.

You can read the entirety of this story on here:

Alma: a Successful Case Study, Pt. 1
Alma: a Successful Case Study, Pt. 2

Ongoing manga: Rebuild World, by Nahuse

Four-and-a-half stars.

For once, this isn’t an isekai: the story is set long in the future, after some apocalypse about which the survivors are still trying to figure out the specifics. Apparently their predecessors had become so advanced that they were mixing biological engineering with super-AI or some shit, until their industries went haywire and started mass-producing mutated monsters that overwhelmed the world. Those facilities seem to be still active somewhere, pumping out enhanced monstrosities. Seemingly the sole remains of humanity live in a megacity. More accurately, the wealthy live in the megacity. The rest of humanity (or just Japan?) endure in the surrounding slums. Among the unwashed masses, the local badasses are known as hunters, the only ones daring to venture into the wasteland to make their living. Killing monsters is profitable if they’re threatening the city or other hunters, but their main source of income are the relics of the old world: any random underground mall from the pre-apocalyptic world suddenly found attracts most hunters around, that won’t hesitate to murder each other for the loot if necessary.

Meet Akira. It’s a post-apocalyptic Japanese story set in the future, so someone named Akira had to be involved. We are introduced to him as a traumatized teenager who constantly gets robbed and generally bullied by local shitheads. During a monster attack, the guy has enough, and decides to defend himself with a gun against a group who are bound to kill him. Suddenly, a naked female spirit appears, and hovers casually toward him. Akira freaks out until she, who calls herself Alpha, explains that she’s an AI remnant of the pre-apocalypse, and that he’s the only one who can see her because his brain is attuned to the old-world networks still in place, so she can show herself to him as augmented reality. She’s not just a curiosity, though: she can offer Akira superhuman support, analyzing his environment, pointing out enemies, guiding his shots. After she manages to save him from explosions and monsters by telling him to stay put or move at times, he realizes that she’s trustworthy, and that this sexy ghost of the past is his ticket to a better life.

Alpha, as we piece together early on, isn’t that trustworthy. Apparently, for many cycles, she has been finding humans to support. All of those cycles have ended with the subject dying. In the latest one, the subject came close to succeeding in beating some final dungeon that Alpha wants her subjects to clear out, only for some information to have been revealed that made the subject turn against Alpha, who promptly took the subject out. What’s Alpha after, then? Is she on the side of the pre-apocalyptic humanity, who may only want to resurrect the old world no matter how many modern eggs need to be cracked? Is Alpha part of the same AI that mass-produces monstrosities? We still don’t know. Throughout the story, the friendship between Akira and Alpha is heartwarming, but as Akira becomes more and more dependent on her, in the back of your mind you know that she’s going to screw him over in the end. It remains to be seen, though, whether or not Akira would go along with whatever Alpha’s true objective is.

Akira is emotionally stunted. He was orphaned so young that he has no memory of his parents, and all he has known of people growing up is the need to protect himself from sentient wild beasts. As the story advances, he meets people who like him, and would even want to tear his clothes apart and mount him, but the part of his brain that ought to connect to people doesn’t work to any significant extent. Plenty of other compentent hunters see him as an uncaring loner who, despite his competence, is someone to be wary of. The exceptions are a few women in his life to whom he proved himself, and who are eager to take him under their wing and show him their delectable parts to get a rise out of him.

The gals in this story are delicious. Props to the author and the visual artist. From the teenage gang leader Sheryl to the redheaded murderess whose name I don’t remember but who was a super cyborg or something, you want to stare in awe and horniness. Thank you Japan for being you.

This is yet another one of those Japanese stories in which you follow the lives of the characters as they change and grow. Although some personalities clash, they have reasons for doing so. Some chapters are just about having a good time and hanging out with interesting characters that get along, and that’s something I think has been lost in Western stories, that are full of forced conflict and people acting like bastards to each other. As far as I’m concerned, you can rely entirely on the tension born from the story world and concept, as well as from some characters that are genuine bastards, and just have the rest of the crew navigating that while relying on each other.

I’m loving this story. I wish I could keep experiencing it, but I’ve run out of chapters. If you’re into Japanese stories with great action, careful worldbuilding, human stakes, and total babes, this is one of the greats as far as I’m concerned.

Also, why not, here’s an AI-generated short podcast about this review:

Post-mortem for Motocross Legend, Love of My Life

You probably shouldn’t read this post unless you’ve gone through my novella Motocross Legend, Love of My Life, that you can start reading here.

Back in January of this year (2024), I was happily writing away at the last stretch of my hella-long novel We’re Fucked, when, for no discernible reason, I chose to rummage through my rarely-touched drawers and came across an external hard drive. Hoping that it contained albums I hadn’t heard in years, I checked its contents. I discovered the album Sweet Heart Sweet Light by Spiritualized. I had recently used one of their songs for We’re Fucked, and I didn’t recall ever listening to this other album, so I put it on. As the second song, titled “Hey Jane,” played, my subconscious stirred. Vivid images kept bubbling up, far stronger than usual daydreams. One image in particular lodged itself in my brain: a brown-eyed teenage girl leaning on her motorbike’s handlebars at night, smiling warmly at the person who was approaching her. I immediately recognized the strength of this feeling. My subconscious had gifted me such epiphany-level impressions only a few times throughout my life. If I’m lucky, it will do so a few more times in the future. I had been granted a story seed.

The rest of that day, and the following few, were taken over by the obscure workings of my subconscious as it wove together, almost entirely by itself, the tale of this stranger: who she was, why she seemed so comfortable on a bike, who was she smiling at so warmly, etc. I don’t recall how the narrative evolved into one about an aspiring motocross rider with a recklessness streak bordering on tragic flaw. However, it soon became clear that this tale wouldn’t be about love, but grief.

I suppose I have to mention, as I often do, that I’m quite fucked in the head. Was born with so-called high-functioning autism, and either developed after, or got as a side-effect of the abnormal neurological development, some level of OCD that fucks me up with intrusive thoughts, obsessions on top of autism’s own obsessions, and such. Like many on the fringes of typical human behavior, I’m fascinated by outsiders and edge experiences: UFOs, hidden history, weird artifacts, long-extinct animals… Regarding humans, which I rarely care about, I was drawn to the serial-killing kind. While some people, mainly certain types of women, obsess over such monsters and view them as heroes, even attempt to date them, I obsessed over their victims. I wanted to learn everything about who they were before they crossed paths with the man who ended up murdering them. I dreamed about the killings, and imagined myself intervening in those troublesome encounters to save the victims. Even when I didn’t dream about such events, I daydreamed about them. I wrote a couple of stories, of the ones I remember clearly now, of a jaded time-traveler that returned solely to prevent such killings.

With the widespread use of the internet, I came across blogs belonging to relatives of murdered people. One of them that impacted me significantly belonged to the mother of a poor teenager who was killed returning from a concert back in 2008 or so. She got in the car of the wrong person, who raped and murdered her. The mother never got over it (I certainly wouldn’t be able to), and her posts were a window into unending grief, the kind that shoves the person away from the mass of humanity into the fringes.

I know quite a bit about standing in the fringes of humanity. I’m 52% disabled according to the Spanish goverment. During my twenties, that were mainly wasted in long stints as a hikikomori (the pee-in-bottles, befriend-spiders kind), I visited centers for extremely disabled people, and got to interact with the types of human beings you simply do not come across in your daily life: otherwise normal-looking women who were unable to string a sentence together, very intellectually challenged people who casually walked over to groups and ripped loud farts nonchalantly, people so hideous it hurt to look at them, the twitching-and-shouting-insults kinds, the dangerously deluded, some who most weeks presented fresh tales about shitting themselves while “straight-jacketed,” etc. Parents of low-functioning children would often look on with horror at institutionalized low-functioning autistic adults as they were herded around while they twitched and groaned. “It this all I can hope for?” Many human wrecks out there are kept out of view from the public at large lest they disturb the delusion of a just and ordered world.

Whatever neurological configuration drives people to seek out face-to-face interactions has never quite worked for me: human beings in general feel like wild animals, and not the cuddly kind. I’m always wary of people and keep them at arm’s length, partly due to the anxiety I feel in social situations, partly because I lack the innate ability to read their intentions. Over the years, I’ve been tricked and manipulated. I’ve had people tell me, “Why do you keep talking so casually with those individuals? They clearly hate you,” and I didn’t have a clue. In general, people bring more trouble than they’re worth, and my experience with intimate relationships convinced me that such connections lead to mutual pain. Therefore, I’m bound to a life of solitude.

Anyway, what I meant to convey is that my subconscious compelled me to create a tale about someone dealing with unending grief, the kind that isolates him from the rest of humanity. Had I loved someone like Izar Lizarraga, I would have ended up like the narrator, if I hadn’t killed myself to begin with. This is the extent of my justification for why I write what I do. In truth, I simply write to fulfill the demands of my subconscious, hoping to satisfy it. Rational thought plays no part. In fact, I’m extremely suspicious of what’s generally considered intelligence.

I didn’t choose consciously the details of Izar as a character, as well as her relationship with the narrator, but my subconscious was clearly inspired in many cases by my past relationships. The closest in spirit to Izar was a sixteen-year-old basketball player named Leire whom I met online (she was a friend of a dude I used to hang out with), and who later on pursued me romantically. She was reckless, perhaps a bit touched in the head, given that she was interested in a lanky, pimply, clearly deranged teenage me. Anyway, we lay under the stars and had a romantic conversation full of idealism, the details of which I have completely forgotten. Some other day, she invited me to her home, where we made out. We ended up cutting that date short because her parents returned from a trip early.

After that day, I ghosted her. Why would I abandon such a sweet girl without a word? Because right then I understood something: that relationship would end in ruins, like they all would, and liking her as much as I did, like I never had before and never have since, meant that the end of that relationship would obliterate me. Even now, as a thirty-nine-year-old man, I consider that ending it before it truly began was the right choice, given my inability to sustain intimate relationships. However, I regret ghosting her. I regret having lost the opportunity to know her better. Due to my prosopagnosia (an autism-related inability to retain and process people’s faces), I don’t know if I ever saw her again. I can’t even stalk her online, because I forgot her last name. She didn’t deserve to be treated that way. Wherever life took you, Leire, I hope you’re happy.

Fellow autist and writer Patricia Highsmith famously told of a woman she briefly met while working as a toy saleswoman: a sophisticated, mommy-type blond to whom Patricia sold a doll, and with whom Patricia fell in love at first sight. They never saw each other again, but Pat, in her usual manner (she’s the author of Strangers on a Train, The Talented Mr. Ripley series, etc.), proceeded to stalk the woman’s home to get some modicum of understanding of who she was. In later years, Patricia referred to that woman as the love of her life. In a similar sense, Leire is very much the love of my life: the most fascinating girl I have ever met, with whom I would have enjoyed lovely adventures if I weren’t such a piece of rotten shit.

Deeper than that, and I suspect this revelation may disappoint some, Izar Lizarraga of this story’s fame is partly my subconscious itself. Maybe other people can identify with their subconscious as if it were an integrated part of themselves, but for me it’s this mysterious, intelligent being who presents me strange visions, who urges me to work on stuff that pleases her, and to whom I can show some part of a work of art I’m working on, from writing to music, and get a wordless response of the kind “this sucks” or “I love it.”

This subconscious of mine, a creature that feels female, is someone I’d rather interact with instead of any flesh-and-bone person, and who has guided me along in many adventures that I wouldn’t have experienced otherwise. I have never felt truly alone because my subconscious has always been there to bring me interesting dreams (I wouldn’t say beautiful, because plenty of them were horrifying). Back when I thought I could sustain normal human relationships, I regularly ached to return to my subconscious’ side, a more interesting and reliable person than pretty much anybody. I adore you, subconscious. I wish I could make love to you. If you had a butt, I’m sure it would be real nice.

I think that’s all the context I wanted to add to this story. Barely anybody read it, but those of you who followed the tale of Izar Lizarraga and the man she ruined, I hope you got something valuable out of it. And if you didn’t, hey, the one I intended to satisfy is pleased.

Motocross Legend, Love of My Life, Pt. 20 (Poetry)

You can read this novella from the beginning through this link.


On the afternoon of your death anniversary,
Hand in hand with my daughter,
My other hand holding a bouquet of red roses,
We arrived at the spot on the wooded lane
Where a grooved-bark, mature oak
Watched over your memorial stone,
Nestled in moss, twigs, and clover.
Mottled, watery sunlight bathed the stone
As if illuminating a sacred site.

The limestone or sandstone looked rough,
And had weathered over all these years.
Beneath the relief of a motocross rider,
A marble plaque bore the inscription,
“Izar Lizarraga Oyarbide (1981-1999).
She lived fast and died young,
But her light will shine forever.”
My childhood sweetheart,
My restless wildfire.

I crouched in front of the stone
To deposit the bouquet at its base.
I pulled out a pack of wet wipes
And wiped away the dust and grime.
I scrubbed off a white splatter of bird droppings.

The murmur of families filtered through the trees.
A flock of sheep baahed from the nearby hill.
In the stone’s relief, your helmeted figure
Clutched the bike’s handlebars,
Head tilted forward in intense focus.
Every time I laid my eyes on this figure,
My breath caught, my throat clenched,
And I struggled to loosen the knot
Twisted inside my chest.

“How long ago was nineteen ninety-nine?”
My daughter’s innocent voice asked.
After a pause, I said, “A long time ago.”
“Was she a friend of yours?”
“Yes, the best one.”

My daughter shifted her weight from foot to foot
As her attention drifted further down the lane.
I held her little hand tightly in mine,
And we stepped onto the sun-dappled sidewalk.
A familiar warmth built up behind my eyes:
Tears burning their way out.
The vision of a bumblebee weaving its waltz
Across clumps of yellow and white wildflowers
Became a watercolor blur.

Grief had ambushed me once again:
A monstrous hand reaching out of the deep
To grab me by the chest and drag me down.
I know it will remain my constant companion
For the rest of my days.

That week, I pondered why
I had brought my daughter to visit you.
I was terrified that, after my death,
Nobody who came across your name
Or gazed upon the memorial stone
Would understand what had been lost,
What you still mean to me.
I needed my child to be haunted by you,
To carry your spirit in her heart,
But I feared no amount of talk
Could transmit the depths of pain and love.
So, the memories of you would disappear,
Forgotten even by the spiders
That had built their webs within me.

One day, maybe not long from now,
After the kids we dragged into this world
Have freed themselves from their miserable parents
And claimed a home of their own,
I will lie in my deathbed alone,
Connected to beeping machines.
By then, you will feel like a sunken ship
Deep at the bottom of the sea.
Suddenly, I will breathe in a pungent odor of rust,
And from the center of my consciousness,
A sinkhole will open, a growing black hole.
As the edges of my self crumble and collapse,
Into that darkness, I will reach for your hand.

I doubt the value of words:
Pictures and music capture emotions better.
Yet, this old boy can only play with words,
And I’ve engaged in the game of pretending
That they can bridge the chasms between us.

For decades, a barbed pain has grown its tendrils
From the core of my heart throughout my body,
Creeping into every tissue and organ,
Embedding hooks deep in my bones,
As the pain reached the farthest ends of me.
My wish: that the right combination of words
Could sever a scion of this piercing truth
And graft it onto someone else’s heart.

So thank you, stranger,
For reading thousands of words
Of the only tale I care to tell,
My elegy for Izar Lizarraga,
Motocross legend,
Love of my life,
Who blazed through this world,
And burned away.

* * *

The night of April 27, 1999,
You parked in front of the candy shop.
Drenched under the torrential barrage,
We clambered off and removed our helmets.
The taste of rain mingled with your saliva
While the Aprilia’s idling engine rattled
Like a hiker hopping from foot to foot,
Eager to move on.

We wished each other good night.
Thunder growled as you straddled
Your gleaming yellow-and-white bike.
You pulled on your helmet,
Gripped the handlebars,
And lifted the side stand with a kick,
When I shouted, burning my throat,
“Wait!”

Startled, you straightened up,
One foot planted on the sidewalk,
And turned the reflective visor toward me.
I ran to you and hugged you,
Pressing my cheek against the cold helmet.
“You don’t intend to return home, do you?
Who would be so stupid to believe
That you’d go back to your father so soon?
I can’t let you leave, Izar;
If I do, I’ll regret it for the rest of my life.
Stay with me tonight.”

I held your gloved hand
As you stumbled off the Aprilia.
You lifted the visor of your helmet,
Revealing large chocolate eyes
That reflected a shimmer of amber light.
Your brows were furrowed in concern.
From one nostril hung a bead of watery mucus.
“I’d much rather do that,” you said,
“But your mother forbade me from coming back.”
“I’ve taken enough shit from her.
She can suck it up.”
You shook with silent laughter.

I opened the front door to the sight of my parents.
My mother scowled, deepening the lines of her face.
Beside the woman, two steps back, stood my father,
A bald, stooped, hesitant non-entity.

Upon noticing Izar, my mother’s eyes widened.
She opened her mouth to scold me,
But I cut her off.
“Look at what her father has done.”
I brushed away the damp strands of caramel hair
Clinging to the cheek that sported a bruise,
The mottled imprint of your father’s hand.
“Izar can’t go home tonight. It’s not safe.
She’ll stay with me, no matter what you say.”

A glance at the bruise loosened my mother’s brow.
You bowed your head.
“Sorry for bothering you.
I didn’t intend to cause trouble.”
My mother narrowed her eyes.
“You rode here through this downpour?
Girl, you don’t have any common sense!”
“Sorry.”
She tsked, then threw her hands up.
“You pair of idiots. Go take a warm shower.
No, take off your jackets and shoes first.
You’re going to leave puddles all over the house.
My goodness, look at how soaked you are!
Do you want to catch pneumonia?”

As you and I padded hand in hand to the bathroom,
My mother turned to my father, seeking support,
But he shrugged and said,
“Let them be. They’re in love.”

Locked inside the bathroom,
We peeled each other’s soaked clothes,
Then chucked them on the ceramic tiles,
Where they lay like beached jellyfish.

When you untied your ponytail,
The cascading hair stuck to your shoulders.
You rubbed your pruney fingertips.
“We might get sick for real,” you said,
Then sniffled some leaking mucus back in.

I embraced you firmly,
Pressing your stiff nipples against my chest.
You shuddered once, then continued to tremble.
I whispered in your ear,
“My love, in case you have any doubts,
I’ll run away with you.”
You sighed, your breath warm on my neck,
And slid your hands down my back.
“Thank you.”

As we melted into each other,
I caressed the contours of your skin,
The myriad details unique to you
That before you were born,
Hadn’t existed in the universe,
And after you died, never would again.

Yes, Izar, I would accompany you,
Riding pillion, clinging to your waist,
Through the rush of wind and rain,
To witness the sights you longed to see,
To experience what it meant to live.
We would create a shared language,
Speak words that others would find insane,
And build our own space far away.
Nobody could compete with you,
The sole real person in the world.
As long as you were with me,
I was home.

THE END


Author’s note: the last song is “Just Like Heaven” by The Cure.