Showing posts with label software dev. Show all posts
Showing posts with label software dev. Show all posts

Wednesday, September 2, 2026

Parents action figures

Welp... Now he has 3d printed versions of his parents...

Hopefully he goes easy on us lol.



Thursday, August 27, 2026

3D scanned action figure head

 I was testing some new AI models, and put together some tools that let me create 3d models from photos. This is "less accurate" than photogrammetry, but more realistic... basically it "fudges the details" in typical ai-slot fashion.

I'm using ReconViaGen Pixal3D and TRELLIS.2-4B along with Qwen3.8-27B as an agent with hermes-agent



Before we even had our son, I told my wife that I had one requirement before we had a kid... That before he was old enough to appreciate it, we had to get a 3d printer...

There are many reasons, but the biggest for me, was that I wanted to print custom action figures for "future child".

Being able to 3d scan his face, add compatible sockets to make it compatible with the other action figures I print for him so  I could make a "personalized action figure" the same scale as all his other Fortnite action figures... is amazing...

Can you imagine having an action figure of yourself to play and fight with all your other favorite super heroes and villains?

I can't wait for when he's old enough to understand how insane this is... lol for now its just normal, and that's how it should be, IMO.

Friday, October 31, 2025

Springtrap DIY Halloween costume


My Son wanted to make this own costume this year. He wanted to be springtrap from fnaf. So we bought some foam, let him pick the outside fabric, and I started "vibe-crafting" with no real plan.

Here is the reference material:


And here is what we ended up with:



Last minute (literally the night before Halloween) I threw together some Led glasses (I knew he wouldn't be able to wear the mask at school, they don't let you cover your face, so the glasses would let him have SOMETHING on his face)




The suit is held together with random wires I ripped out of electronics I salvaged, and everything velcros in the back so he was able to put this on himself at school.

All in all, Im pretty happy with how it turned out.

Thursday, February 29, 2024

Hacking a 3ds to add parental controls


 

The 3ds is an amazing piece of hardware. Especially if you hack it to add homebrew/emulators.

My son has been enjoying a bit of "free time" before bed, and playing with a generic "mini arcade" game system. The games are all generic knock offs, and I figured he'd love to play with my hacked 3ds which has thousands of high quality games...

The problem is, the 3ds doesn't have "screen time" controls to encourage him to put it down after X minutes so he gets some sleep. So I decided to download the source for the custom firmware I was using (https://github.com/LumaTeam/Luma3DS) and add the controls myself.

Because I wanted the parental controls to pause the game, and allow "sleep" to save his game, I had to add my code to the firmware itself. This lets me spawn a thread that is running in the background, even when a game is running to keep track of time, and screen time limits. I added the ability to call out to my website with the current game he's playing (so in the future if we want to have certain educational games count for less time, we can)

The basic logic is this: Every few seconds it sends the current game he's playing to my sever, which responds with the screen time limit. In order for this to work "offline" if we are not at home/near internet, it has a built in "default" time of 15 minutes. It then writes to a local file every second to keep track of actual screen time usage. Then if the current screen time usage is over the screen time limit, it pauses the OS, and pops up a screen telling him that his screen time is up.

It also has a hint on how to add more screen time (he's learning to read, so if he figures this out on his own, he deserves the bonus screen time) This is also a way for us to add more time if we need locally. We can add screen time via my server as well.

So far its working great, and just about ready for "prime time" (had some issues with the 3ds getting stuck in sleep mode, but I'm just about done with that.

Once I am finished with the code, I'll upload it all to GitHub so other parents can enjoy :)

Code is gross, but functional. I'll be adding more features as I need them. 
https://github.com/spiffomatic64/Luma3DS


Wednesday, December 13, 2023

Tonie Weather

 So my son loves his tonie so much for listening to his favorite shows: blog post about that project here


I thought it would be cool to make one of his tonies tell him the weather for the day. So I threw this script together to generate a "text to speech" weather forecast for the day, and clothing recommendations for him to dress himself.

It runs every day to get the current weather, and uses the hourly high/lows and precipitation data to recommend what to wear. He wakes up in the morning, puts the yeti tonie on the box, and then knows exactly what to wear for the day.

He loves it.




Here is the code: https://github.com/spiffomatic64/tonie_sync/blob/master/tonie_weather.py


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
from noaa_sdk import NOAA
import json
from gtts import gTTS
import shutil
from pprint import pprint
from datetime import datetime, timedelta


def get_temp(temp, low):
    temps = {100: "Very hot, Wear a Tshirt and shorts",
             85: "Hot, Wear a Tshirt and shorts",
             75: "Warm, Wear a Tshirt and shorts",
             65: "Nice, Wear a Tshirt and shorts",
             50: "Cool, Wear a Tshirt and pants",
             40: "Cold, Wear a Long Sleeves shirt and pants",
             30: "Very Cold, Wear a Long Sleeves shirt and pants"}

    for t in temps:
        if temp > t:
            if low < 65:
                temp_data = temps[t].replace("shorts","pants")
            return temp_data


def get_forcast(forecast_data, hourly_data):
    json_formatted_str = json.dumps(forecast_data, indent=2)
    print(json_formatted_str)

    tomorrow = datetime.now() + timedelta(1)
    tomorrow_string = tomorrow.strftime("%Y-%m-%d")
    # print(tomorrow_string)
    max = 0
    min = 100
    for hour_data in hourly_data:
        if hour_data['startTime'][:10] == tomorrow_string:
            hour = int(hour_data['startTime'][11:13])

            if hour > 6 and hour < 17:
                # print(hour)
                if hour_data['temperature'] > max:
                    max = hour_data['temperature']
                if hour_data['temperature'] < min:
                    min = hour_data['temperature']

    print(f"High: {max} Low: {min}")
    temp = get_temp(forecast_data['temperature'], min)
    forcast_string = (f"{forecast_data['name']} will be {temp}. " +
                      f"The forecast is {forecast_data['detailedForecast']} " +
                      f"The Low will be {min}")
    return forcast_string


n = NOAA()
res = n.get_forecasts('19067', 'US', type="forecast")
res2 = n.get_forecasts('19067', 'US', type="forecastHourly")
forecast = get_forcast(res[2], res2)
print(forecast)

myobj = gTTS(text=forecast, lang="en", slow=True)

# Saving the converted audio in a mp3 file named
# welcome
path = "I:\\audio\\weather"
filename = "weather"
ext = "mp3"

myobj.save(f"{path}\\{filename}0.{ext}")
for num in range(1, 3):
    shutil.copy(f"{path}\\{filename}0.{ext}", f"{path}\\{filename}{num}.{ext}")

Tuesday, October 31, 2023

Halloween 2023

I love making these interactive "games" for kids on Halloween. 


This year I used the "skibidi" battle from the game I just made and slapped a kinect plugin onto it. Kids LOVED it.



Friday, October 27, 2023

Plunger Game

 A little while ago, I went to a party for a 2 year old, and an older kid noticed my zelda tshirt. We started talking about games, and I mentioned that I like to make games for kids to practice using the Unreal Engine.

I asked if he could make any game in the world, what would he make. He said he'd make a plunger shooter.

This kid had no idea what type of game design I could do, so I figured I'd have fun a pull the rug out from him a few times. The first level is a simple looking cartoon 2d side scroller game, when you get to the end, you "fall through the world" into a Playstation 1 style 3rd person plunger shooter. When you get to the end of this level, you fall through again (this is a reference to the next level, which is inspired from a very popular "meme" video for kids his age named "the backrooms")

The last level is a first person plunger shooter with monkey's that throw poop at you. If you wander around, and follow the arrows on the walls, you find the boss, which is another popular meme for kids his age "skibidi toilet".

Here is the Plunger Game. (All of the assets/art are from other gamedevs, I just quick kitbashed this together in a couple days to make a kids idea reality.



Thursday, January 26, 2023

Tonie randomizer

 So recently my son has been asking for new audio on his TonieBox. Most of the time he falls asleep before the 2nd/3rd/4th chapter/audio play, so I decided to make an automated tonie-shuffle script.

A toniebox is basically an mp3 player, that lets you pick what audio you want by using little action figures (it uses rfid similar to amiibo like the switch). You can also upload your own audio with special creative tonies. I use these tonies to upload audio from his favorite tv shows.

This batch script rips the audio from "totally legally" obtained tv shows.


If there is interest (comment or contact me irl/elsewhere) I could hack together a easier to use web-version, maybe even make it take youtube videos/playlists/spotify/etc)


1
for /r %%i in (*.mkv) do ffmpeg -y -err_detect ignore_err -i "%%i" -map 0:a:0 -c copy -c:a aac "%%~ni.m4a" 


This python script gets all the tonies, wipes them, and associates each creative tonie with a specific folder. Then gets all the audio files in that folder, shuffles them, and keeps adding them until the tonie is full.

Simple script, but should provide a bunch of fresh bedtime "stories" for him to fall asleep with.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import os
import logging
import random
import ffmpeg
from tonie_api import TonieAPI

//dictionary of toniename, to sub-folder to associate specific tonies with specific shows
my_tonies = {'Blue': 'sonic prime',
             'Blue Hero': 'ultimate spiderman',
             'Gray': 'octonauts',
             'Green': 'teen titans go',
             'Pink': 'miraculous',
             'Pink Hero': 'spectacular spiderman',
             'Pirate': 'tmnt',
             'Vampire': 'marvels spiderman'
             }

path = "folder containing audio"

dry_run = True


def get_all(path):
    files = []
    count = 0

    for (dirpath, dirnames, filenames) in os.walk(path):
        for filename in filenames:
            full_path = os.path.join(dirpath, filename)
            files.append(full_path)
    print("")
    return files


# set up detailed logging
logging.basicConfig()
logging.getLogger().setLevel(logging.INFO)

api = TonieAPI('your@email.com, 'password')

# update all housholds, returns IDs of households
households = api.households_update()
for household in households:
    if households[household] == 'HOUSEHOLD NAME':
        our_household = household

print(f"Our HousedholdID: {our_household}")

# update all creative tonies, returns IDs of creative tonies
tonies = api.households[our_household].creativetonies_update()
print(tonies)

for tonie in tonies:
    print(f"\nTonie Id: {tonie} Name: {tonies[tonie]} Audio: {my_tonies[tonies[tonie]]}")
    audio_folder = f"{path}\\{my_tonies[tonies[tonie]]}"
    time_left = 5400

    if os.path.exists(audio_folder):
        if not dry_run:
            api.households[our_household].creativetonies[tonie].remove_all_chapters()
        print(f"Cleared tonie: {tonie}")
        files = get_all(audio_folder)
        random.shuffle(files)
        for file in files:
            info = ffmpeg.probe(file)
            duration = float(info['format']['duration'])
            if duration < time_left:
                time_left = time_left - duration
                filename = os.path.split(file)[1]
                print(f"Uploading: {filename} duration:{duration} left: {time_left}")
                if not dry_run:
                    api.households[our_household].creativetonies[tonie].upload(file, filename)
    else:
        print("Skipping...")

Wednesday, August 10, 2022

HotDog Game

 We had friends come over with their kids a couple of days ago, so obviously I asked the kids for their "dream game" idea.

This was their pitch:
A hot dog eating contest, where its a guy vs a robot, and every so often a gold hotdog shows up, and if they eat it, they throw up on the robot.

Can do





Saturday, October 31, 2020

Vault of Candy

Made a fun interactive "game" for trick-or-treaters. (Based on a raid from destiny called "Vault of Glass".

 It requires kids to stand in certain spots (detected using a kinect v2) and if they stand there long enough, the lasers charge up, and make a big blast over to the right (where there is candy in a coffin/chest thing)




Saturday, September 12, 2020

Minecraft Music

My neice has been really into minecraft, so I decided to make some cool stuff for her in a shared world that we could play together with.

This is her favorite song "old town road" being played on music notes.




Saturday, September 5, 2020

Iron Man Game

 He's still in love with super heros, so I made a simple top down "tap to move" iron man game...

The enemy ai is from: https://www.raywenderlich.com/238-unreal-engine-4-tutorial-artificial-intelligence

If you tap close to iron man he does a blast.






Tuesday, June 30, 2020

Spiderman Game

He loves super heros, so I found a working POC spiderman template in unreal, and cleaned it up/optmized it to run on ue4 mobile (running on android).


Made it an infinite runner with a simple touch interface for him to play with.




Friday, March 27, 2020

Teaching during Covid

 Found a website through a friend that let people volunteer to sign up and teach courses, so I signed up to teach a few classes.


Video game development (intro and hands on)

Hacking 101

Electronics Hacking (modifying existing electronics)


Unfortunately I can't share these videos as they contain kids faces/voices and don't want to violate their privacy, so here is an intro video I made to show off how good the engine can look.


In this demo, there's a powerpoint which is getting its data live from a google spreadsheet, then when the spreadsheet is done, the screen dissolves showing the "powerpoint" was in the unreal engine the whole time.




Tuesday, October 1, 2019

Firetruck mod

Not quite done yet, but a (mostly done) quick status of my fire truck project.




Finished project:





Inspired by a project my dad made for me as a kid.



Features: 6 buttons that play different sounds from a usb powered speaker

8 leds in the top that go in a "circular" pattern

5 leds in the ceiling

7 leds on the dashboard

real ignition key that actually turns it on (plays engine start-up noise when its turned on)



Todo: fix dashboard leds

clean up wires

add door to the back for "fixing" access

add charging usb port into the gas tank port

fix issue where "too loud" sounds cause a voltage drop and reboot the esp







Sunday, September 15, 2019

Thursday, September 5, 2019

Baby video picker

He really likes watching videos on the big tv, so I made a simple web app that sends the youtube videos he picked to the tv (running on a rasbperry pi)

to make it easier to click/harder to scroll, I also added swipe gestures.

code: https://github.com/spiffomatic64/baby_video_picker


Monday, December 31, 2018

All the music

I wanted to expose my son to as many different types of music as possible, so I decided to make a playlist that was normalized to genre, not popularity.

I used data from http://everynoise.com, and spotify to generate a playlist (filtering out songs with explicit lyrics), and (because we use google music, not spotify), generates a  google music playlist.

We listen to this every morning, and I've actually found some music I would have never listened to myself.

code: https://github.com/spiffomatic64/SpotifyToGmusic

Here is the current playlist it generated: https://play.google.com/music/playlist/AMaBXylr_pjfqWa596EANTmajgBOAkoJi1r1rHjGBjFP6yMGpHMZGPoRMOd7YVG5gPKjdkn_Et1YT7s0pU3pJuB8hpIgyNw6yg%3D%3D


Tuesday, October 30, 2018

Thursday, September 27, 2018

Zebra light toy

I bought a zebra stuffed animal, ripped it apart and threw some electronics in it to make a new toy.
Code: https://github.com/spiffomatic64/ZebraBabyToy

The toy changes color based on XYZ rotation values. It can be programmed to wirelessly and has a microphone/speaker for future features.

Action figure vehicles

At this point I've printed a ton of custom/stock action figures. I figured they needed some vehicles. Happy kid for scale. Motorcycle Je...