Of all of the projects I have built in my house, none has generated more questions, comments, and laughs than Gossipman.
Gossipman is a script that has evolved quite a bit over the years. It started originally as a Perl script that tied into my Mister House installation. I wanted an announcement system that would also occasionally crack wise.
Back then (probably circa 2006 or so), I mostly used it to notify the kids of bedtime/naptimes, tell jokes, or remind about trash pickup days. The script would fire based on a schedule, and feed the output to TTS. The TTS engine would output a wav file which I then streamed to each room. (At the time I had a 3com Ergo Audrey on a wall in most rooms which served as a stream target and speaker - these would later be updated to Android Tablets). The TTS of the day wasn't great, but it was intelligible enough. I used an application called Lannouncer to send the dialogue to the Android devices, who would then render it in whichever voice was installed on them.
When we moved, I rethought a lot of the automations around the house, including this one. By this time, I had Android and Chromecast Audio devices deployed in most rooms, giving me lots of handy streaming targets. I also had two kids in grade school that hadn't yet grown sick of my automation antics, and had recently found success with Sonicman. I had an idea. This is how Paul and the Witch were born.
Paul and the Witch are two characters I created for our house. I forked the Sonicman script, removed the sound effect and music library, and began writing dialogue. A lot of dialogue. Paul and the Witch became passive sources of information for the goings on in the house. If someone was lurking outside, Paul would let you know. Leave the door open? Paul would admonish you for it. The Witch would always let us know if it had begun (or ceased) to snow or rain. I also took our family Quote Book and divided up the things our family had said over the years, and had my characters reference them.
The personalities were informed by the TTS voices available at the time. I used a posh British sounding voice for Paul, and that is where he got his name. Similarly, the Witch was a halloween gag voice that was surprising intelligible for what it was. I tweaked them both a bit from defaults to make them unique, and they are actually both still in service today. Paul took on the personality of an older English valet, and the Witch was, well, a witch. I added more and more dialogue that reinforced these personalities.
The voices would announce dinner, crack jokes, greet you in the morning, make obscure references to Stars gate, wars, or trek. They would announce the arrival of each family member when they returned home. They would make fun of my son's friend, who was habitually late to arrive. If one of us stopped at the grocery store, they would announce the fact to anyone at home, in case something was needed. If someone arrived outside, or if any of the exterior doors opened, Gossipman would let anyone in the bathrooms or bedrooms know, so they weren't caught off guard. Similarly, if the kids were up and about around the house after bedtime, Gossipman would let us know. We wouldn't usually take any action, (kids need to be able explore, after all), but it was good to keep aware of what was going on. They would also make bad puns.
I added new voices as time went on, Noseplugs in the Bathroom, who would comment on the music playing a the time in the bathroom (yes, I wrote multiple dialogs for each of hundreds of different music tracks), she would also make derisive comments about the business you were doing in there (because we all need that, right?). Yoda would speak to us from the bedroom. I even wrote a few hundred lines of dialogue for our goldfish, who for some reason ended up being a hillbilly.
When we were making dinner each night, the voices would chatter on about what was cooking, suggest ingredients, deride our dietary choices, and make more bad puns. (I am a Dad, after all). When the Squirrel Scrubber triggered, the voices would shout out, "Squirrel!" in reference to the dog from Up.
Eventually I added more quotes from film, television, and video games. I coded in the ability for the quotes to become dynamic, using a markov chain generator. When my kids got a bit older, I added a function called Sailor Mode which would inject cursing and swear words randomly into the quotes. I also added a mode my son Jacob dubbed "black hole mode" where the entire quote would be programmatically generated, using the entirety of everything Gossipman had said previously as input. (This got out of hand quickly. Within weeks, all of the tablets in my house were cursing at each other non-stop and I had to disable it).
I added room greetings to the bedrooms, so you would be greeted when "returning to base". Each bedroom's dialogue was written to appeal to the denizen of said room. My extrovert son would be praised, or have his name chanted, or just be greeted cheerfully. My introvert son put up with this for about 2 days before asking me to comment out the code.
The voices were sensitive to the activities in the house. If we were in the kitchen making food, they talked about food, eating, cooking, etc. If we were playing Magic or other table games, they would talk about gaming and make game references, instead. They were mute while watching movies or tv outside of important announcements.
Gossipman as an Appdaemon script is retired, but I have rolled much of the functionality into Home Assistant proper, using jinja templating, automations, and the same TTS engines I used previously. Since my kids got older (and eventually moved out), I've had less of an interested audience for these sorts of antics, but I still make updates to the system from time to time. I recently added support for the Piper TTS engine, which gives me a lot more voices, accents, and speakers to work with. I have also been developing a local smart home assistant (who named herself, 'Meg'), that can chat back and forth with you using LLM tech.
Building on this, I used an LLM role playing frontend called Silly Tavern to build character files for Paul and the Witch, feeding in a good amount of their dialogue as context to the LLM. This allowed us to chat in real time with the characters using our voices, which was a surreal experience. I even had them chatting with each other (they mostly bonded over both about being trapped on a wall).
I am sure I will be pushing this tech forward as LLMs develop more. I'll update this when I have something more substantial to add.
Member discussion: