Progress Report - February 17, 2026 (Patreon)
Content
Hello, everyone!
I stated last week that I wouldn't expect this Progress Report, nor the next few to follow, to be too terribly interesting. That has indeed largely panned out for this past week.
Most of my time this past week was spent further researching the Animation Layer system, and the associated infrastructure for upgrading Overbreed Episode 1 to it for my own sanity; as well as building a Transcript Processor, for all the future transcript-related work I will have to do for Overbreed.
There's also been some movement on Love and Degeneracy. So let's talk about all that.
Animation Layer System
In regards to the Animation Layer system, I'm not sure if I ever actually showed it off over here on Patreon. I've made a few high-level bleets about it, but I don't recall if they carried over here. I generally have so many little things to discuss each week that something always ends up on the cutting room floor.
Put simply, the Animation Layer system is something that allows me to additively stack multiple animations together. I have found that, in practice, four layers of animation fits my current workflow well (though the number of layers can be trivially increased by changing a single number in the script):
Layer 1 - The core animation layer. This is the meat and potatoes of the action, on which everything else is built. This is the loop that would be posted if it were still 2013 and posting 6-second looping GIFs were still in vogue.
Layer 2 - The bulk deviation layer. This is where the high-level position changes from line to line of dialogue. This is things like characters looking over their shoulders to talk to their partner, or closing their eyes and tilting their heads up to moan, or pulling their partner's hair down or wrapping a hand around their throat for some breathplay. Alterations to the core animation loop that are themselves course and measured across spans of multiple seconds.
Layer 3 - The emphasis layer. This is where characters move their heads, bodies, and hands as they talk, which is a signature style to my animation that I am sure is quite divisive. Regardless of how you may individually feel about it, I find it is very important to my animations, and helps them feel more emotive and alive. It is the difference between the left and the right in the below GIF, taken from the previously-linked bleet:
Layer 4 - The jitter layer. Finally, on top of everything else, I apply multiple different frequencies of noise to the rotation of bodies and heads, and to the position of free-floating hands. This is a subtle effect, which is used to break up any remaining uniformity in the motion and make it all feel a bit more natural and organic.
Without Animation Layers, all of this work is applied destructively to the core animation. Which means that I can't easily go back and change any aspect of the animation after the fact - I have to either commit to the final appearance, or else roll back and undo all of the work done. Neither situation is ideal.
Over the past few months, I have been experimenting with a prototype one-layer system, which is what Love and Degeneracy was built on, and is why I was able to show off these layers. One layer is extremely useful, but I found in practice while finalizing Love and Degeneracy for release that it is still pretty limiting and destructive. That is where the idea for four layers came from.
Overbreed Episode 1, by contrast, has no animation layers to speak of. I don't even have the one layer of abstraction that Love and Degeneracy has, as limited as it is. And given how complex Overbreed Episode 1 can get, with its elaborate and dynamic dialogue and power exchanges, I really don't want to build all of Episode 1 destructively.
And so, I've spent the last week researching ways out of that sinkhole.
The most ideal solution would be a seamless in-place swap, just magically having the additional layers appear onto the existing animations, without anything needing to be done on my end or anything getting mucked up. Unfortunately, given the way the Animation Layer system works (by abusing the absolute fuck out of constraints), that isn't tenable. It would require me removing and reapplying the existing constraints, which so far as I know, is not exposed to the SFM Python API.
While I can't remove constraints programmatically, I can remove them manually in SFM, though. In fact, I can go a step further than that - SFM has a native mechanism available in the editor to completely detach an IK rig from a model, which removes all of the constraints and bakes down the animation. That last part is a bit of a problem though, because it also loses the keyframe data (which if you think about, it has to, since you're removing the IK handles the keyframes were attached to).
So I ended up spending more time than I care to admit exploring how I could retain the keyframe animation. Since both the existing IK rig and the new Animation-Layers IK rig uses the same names for handles, I should be able to copy the animations from the existing IK, remove it, and then paste them onto the new IK. I can do this manually, but I'd rather a programmatic solution. It took me a while, but I finally figured out the proper invocation for doing this, and it actually works beautifully.
The only problem is removing the existing IK rig locks SFM up for a solid 7 seconds, per character, per shot. And seeing how, as reported by my Transcript Processor, Overbreed Episode 1 has 567 shots in it, and assuming 2 characters per shot, that comes out to 567 x 2 x 7 = 7938 seconds, or over two hours of just removing IK rigs. Which isn't exactly viable.
And so the solution I am currently gravitating toward is complete model-swapping: For every shot, create copies of the characters I want to upgrade to the Animation Layer system, and then programmatically copy the original characters' animations onto the new characters. This will require me to extend the animation-copy system I currently have implemented, to have it copy and preserve locks, as well as properly attach and bodygroup outfit pieces as necessary. But in theory, that's nothing I haven't done before with other tools, like my Lock Transposer and the Outfit Loader, so it's just a matter of bringing all of the code together into a single operation.
Next week will see me further exploring that avenue.
Transcript Processor
By comparison, the Transcript Processor has a lot less to say about it. It's a bit overengineered for my imminent use-case, but that is a matter of me preparing for the future.
The core purpose of the Processor is to convert the transcript data files that I use for generating the subtitles in the WIP videos into a human-readable format, reminiscent of my historically hand-written screenplay.
In practice, the largest component of that is taking the 14 separate transcript files that Overbreed Episode 1 is spread across, and combine them into a single monolith screenplay. The second largest component of that is automatically sorting out the lines per-character, since part of my voice-recording process is that I will send each voice actress two copies of the screenplay: a master screenplay with everything, for full context; and a special version of the screenplay that only has their character's dialogue in it, so that they can focus just on their own lines.
Extracting out the characters from the raw transcripts was relatively straightforward, minus the special case where cues (the italic lines with asterisk in the preview image) often but not always start with a character name. Exporting out the individual characters to their own transcripts was... Well, let's just say I came to regret my data structure decisions. I got it done, but I am not proud of the things I had to do in order to get it done. The Hague would probably have a few choice words about the code I wrote for that functionality.
The final function that the Transcript Processor needs is the ability to edit lines. Specifically, you may notice how there is a blank box for "direction" along the bottom of the screenshot. That is because I do not write voice direction in the transcripts that get converted to video subtitles (I find them bulky and distracting when the video is playing back), but I have learned experimentally over the past three Micros (the Marie/Honoka prototype, the Pharmmetra Micro Chapter, and Love and Degeneracy Chapter 1) that I really do need those directions, for the sake of the voice talent.
I thought I could get away without direction, relying just on the context of the animation to get across my intentions. I learned the hard way that is not the case. And so, here we are, with me explicitly writing my intentions down to make sure the voice talent, who amazing are not mind readers, are on the same page as I am, and don't have to guess as to what I am looking for.
At this point, the Transcript Processor is mostly done. I need to add a save/load feature, since adding direction for 567 shots all in one sitting is probably a bit too ambitious of an ask, even for me. But, importantly, it's done enough for the next stage in production, which is getting everything proofread.
Specifically, as I've mentioned before, I want to get Mercy's Swiss-German and Sombra's Mexican Spanish proofread and naturalized. It was also brought up to my by a Patron who gave some feedback on Sequence B over the past week that some of the medical jargon in Sequence C is off, so I'd like to get that proofread as well.
Love and Degeneracy
And then as a final note, there has been a little bit of rather abrupt motion on Love and Degeneracy.
I mentioned last week how my sound designer had disappeared on me, and how I gave him an ultimatum that, if I don't hear from him by the time I write this Progress Report, I'm going to have to find someone else to pick the project up.
I was quite literally in the middle of reaching out to PornSFX about picking up the project, when my sound designer emerged from the shadows and messaged me. Apparently he'd been without Internet for the past two weeks, and finally gave up waiting for Spectrum to fix the issue, and so he ended up just buying a wifi range extender and is using that rather than his home Internet connection. Which is all kinds of fucked up, but that's Spectrum for you.
I won't lie when I say that I still have my reservations, twice burned and whatnot, but as it is right now we have a hard date and time of him sharing his work for Episode 1 to me at 6PM Seattle time tomorrow. So we'll see what comes of it.
I am hopeful that things work out, because PornSFX (who did a fantastic job on the Batcat video) is actually knee-deep in two other large projects right now, to the point that I was considering doing the sound design for Episode 1 for myself and then having him pick up and do-over the rest once he's free.
So yeah. After the project sitting still for the past week and change, it suddenly started moving all at once earlier tonight. We'll see how things pan out from here.
At any rate, that's all for now. I'm not exactly sure what fruit next week will bear, but whatever it may be, I will be sure to share the bounty with you all when it arrives.
Until next week, everyone!