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...")

Friday, December 30, 2022

More 3d printing stuffs

A buddy of mine recommended that I try printing this candy dispenser, its definitely a hit.






Thursday, December 22, 2022

xmas light sculpture 2, electric boogaloo

  This year my son is into mermaids... so we're turning this into a tradition...









Next year Im thinking of using ws2815's and making it animate :)


Friday, November 25, 2022

Personalized action figure

 Im still learning how to make "real" action figure joints (ball/swivel/hinge/etc) But in the meantime, Ive had "make an action figure that looks like my son" on my bucket list for a while.

I used the iphone X face scanner and em3d to scan his face, then put it on a "flexi" robot model https://cults3d.com/en/3d-model/art/flexi-print-in-place-fokobot-2-0


Heres the result:


I used blender, and its built in "3d print" module to make the scan manifold, and joined the models.

Friday, August 12, 2022

Knex

 My son has gotten into knex recently, and likes making robots out of them... So I figured I'd stoke/seed his creativity a bit by making custom knex pieces that have robot kitbash components on them (random panels/weapons/etc)

This is an example of the type of kitbashes I used:


I took the knex set here: https://www.printables.com/model/143840-knex-parts-customizable and added some of the kitbash pieces to male/female connectors.

And here is an example of something my son made tonight:



He REALLY likes them, I think I'm gonna make the kitbash parts a bit bigger, but the "prototype" idea phase has definitely gone well.

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





Tuesday, January 25, 2022

The Reward System

I had 3dprinted a piggy bank, but realized they do a poor job of showing progress, so I considered an electronic one, but decided to go simpler.

I repurposed a clear pvc pipe I had from another project and found small tiles he got for Christmas that fit perfectly on top of each other and show very clear vertical progress.

He gets a ticket for doing chores/sharing/trying new things/complimenting people/etc.

He picks what the reward is, and we'll move a rubber band that acts as a goal marker based on how many tickets we think that reward "costs".



More custom action figures

 When your son wants an action figure that doesn't exist... You 3d print it! Here is what it looks like in the game. And here is what I ...