|
5508
|
My awesome macropad! by @randomcoder | Stardance
|
randomcoder
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @randomcoder | Star Title: My awesome macropad! by @randomcoder | Stardance...
|
1792713101.122037
|
1793317901.122037
|
|
5137
|
Double Jointed Arm by @Sxilver | Stardance
|
Sxilver
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Double Jointed Arm by @Sxilver | Stardance
|
1792713100.2875154
|
1793317900.2875154
|
|
5942
|
Untitled project by @kyoii | Stardance
|
kyoii
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @kyoii | Stardance
|
1792713099.4081452
|
1793317899.4081452
|
|
27580
|
Tamagotchi by @Plum | Stardance
|
Plum
|
0
|
1.28
|
0
|
[]
|
[{"post_id": 27900, "ts": "202 [{"post_id": 27900, "ts": "2026-07-13T20:29:42Z", "hours": 1.2833, "text": "Devlog 1, building a Tamagotchi! Planning a prototype: Today, I started my project by searching for components for the project. I needed a screen, a power source, a microcontroller and some buttons. Yeah, like a basic Tamagotchi, y’know? So I took some time and searched through Ali and also did a drawing of what I plan the Tamagotchi to look like. Also, I plan on designing my own PCB for it, if everything works out as soon as my parts arrive :> Thats it for today :D"}]...
|
Title: Tamagotchi by @Plum | Stardance
Devlogs:
D Title: Tamagotchi by @Plum | Stardance
Devlogs:
Devlog 1, building a Tamagotchi! Planning a prototype: Today, I started my project by searching for components for the project. I needed a screen, a power source, a microcontroller and some buttons. Yeah, like a basic Tamagotchi, y’know? So I took some time and searched through Ali and also did a drawing of what I plan the Tamagotchi to look like. Also, I plan on designing my own PCB for it, if everything works out as soon as my parts arrive :> Thats it for today :D...
|
1792713098.5702643
|
1793317898.5702643
|
|
18270
|
CosmoCare by @nandika_nandan | Stardance
|
nandika_nandan
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: CosmoCare by @nandika_nandan | Stardance
|
1792713097.7002969
|
1793317897.7002969
|
|
19404
|
AI Recycling Assistant by @Mario_Freiha | Stardanc AI Recycling Assistant by @Mario_Freiha | Stardance...
|
Mario_Freiha
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: AI Recycling Assistant by @Mario_Freiha | S Title: AI Recycling Assistant by @Mario_Freiha | Stardance...
|
1792713096.8689876
|
1793317896.8689876
|
|
17398
|
Untitled project by @Lucas6 | Stardance
|
Lucas6
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @Lucas6 | Stardance
|
1792713096.0267963
|
1793317896.0267963
|
|
25753
|
Applecore by @HBCC1999 | Stardance
|
HBCC1999
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Applecore by @HBCC1999 | Stardance
|
1792713095.1942666
|
1793317895.1942666
|
|
1876
|
rocket and satellite simulator by @masterahill | S rocket and satellite simulator by @masterahill | Stardance...
|
masterahill
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: rocket and satellite simulator by @masterah Title: rocket and satellite simulator by @masterahill | Stardance...
|
1792713094.3517385
|
1793317894.3517385
|
|
1032
|
OpenRecode by @xarber | Stardance
|
xarber
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: OpenRecode by @xarber | Stardance
|
1792713093.5155916
|
1793317893.5155916
|
|
33389
|
Puzzle platfomer by @Dysonsphere | Stardance
|
Dysonsphere
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Puzzle platfomer by @Dysonsphere | Stardanc Title: Puzzle platfomer by @Dysonsphere | Stardance...
|
1792713092.6690032
|
1793317892.6690032
|
|
21403
|
My very own WebOS by @Thiviyan | Stardance
|
Thiviyan
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @Thiviyan | Stardance
|
1792713091.833118
|
1793317891.833118
|
|
18051
|
CosmicOS WebOS by @ujwaltr | Stardance
|
ujwaltr
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: CosmicOS WebOS by @ujwaltr | Stardance
|
1792713090.9870524
|
1793317890.9870524
|
|
26700
|
The Eclipse Lamp by @vrunchil7 | Stardance
|
vrunchil7
|
0
|
22.4
|
0
|
[]
|
[{"post_id": 24399, "ts": "202 [{"post_id": 24399, "ts": "2026-07-07T22:39:36Z", "hours": 1.8203, "text": "Eclipse Lamp Devlog #11 - Finishing the Bottom Lamp Case print and assembling the Servo and Pi to it. Also Finishing the B.O.M. Today was pretty fun since I got to work mostly on the hardware. I started my print at 8 AM (the earliest I’ve woken up this summer) and let the 6-hour print run. I came back at 2:13 to see the final product. Since this was the bottom shell, I needed to print it in a dark color so light wouldn’t shine through. I was itching to use my new red-and-black silk PLA, so I loaded it into my extruder and got started. Next, I was ready to hot glue the servo into the walls I designed, but first I needed to make sure the servo shaft was centered. I grabbed a 150 × 150 mm plate and used a compass and ruler to find the midpoint (shoutout to my geometry teacher). I found that the servo shaft was only 2 mm off-center, which I was totally fine with. After that, I tried fitting the Raspberry Pi into its spot but realized I had made a CAD mistake. When I aligned it with the screw holes, the audio jack stuck out because I hadn’t designed an opening for it. Instead of reprinting the whole part, I grabbed my hot glue gun and burned a hole through the side. It worked perfectly, and the Pi fit right in. I originally wanted to screw the Pi in place, but I didn’t have the right size hardware. I needed 3.5 mm screws and only had 3 mm and 4 mm, so I ended up hot gluing it in instead, and it held perfectly. I also hot glued the camera into its enclosure so it became part of the iris mechanism. After finishing the hardware, I started and finished the BOM and posted it to my GitHub. The next step is printing the top case."}, {"post_id": 23297, "ts": "2026-07-06T05:12:10Z", "hours": 2.3781, "text": "Eclipse Lamp Devlog #10 - Finishing the YOLO and AI Person Detection, starting and finishing the Telegram Push Notification system, and assembling the printed Iris-Camera frame shutter system YOOOOOOOOOOOO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Today was actually the most productive session ever. First, before I started my recording I finished the iris-camera frame attachment that attaches the camera to the back of the iris mechanism. My main motive for today was getting the Telegram notification setup, but I did so much more. First I decided on using Telegram, downloading the app on my phone and computer for notifications. Then I created a bot through BotFather, got my bot token and chat ID, and went into terminal so the Pi could send messages directly to my Telegram. Within minutes I was getting notifications on both my phone and computer simultaneously — that part was actually easy and satisfying to get done fast. After that I said “third time’s the charm for AI” and it really was. I decided to finally fix the YOLO detection once and for all, and if successful, tie it together with Telegram. I copied everything over to Claude — no more ChatGPT ragebait. I was so desperate I started glazing Claude talking about how ChatGPT is terrible. Honestly though it was the right call. What followed was probably the most painful dependency debugging session of this entire project. The Pi threw everything at me — numpy version conflicts between picamera2 and opencv, OpenCV itself crashing with “Illegal instruction” because pip installed an x86 build on an ARM chip, then PyTorch doing the exact same thing because it installed a CUDA build completely incompatible with the Pi. I had to hunt down and manually delete broken opencv and numpy installs from multiple locations across the filesystem, increase the Pi’s swap space from 512MB to 1024MB so torch wouldn’t get killed mid-download, reinstall PyTorch from the official CPU ARM wheel, and finally export the YOLOv8n model from PyTorch format to ONNX format so it could run through ONNX Runtime instead — which is dramatically more efficient on ARM hardware. Every single fix revealed another problem underneath it, but step by step it all got resolved. The final detect.py runs three fully independent threads — one capturing camera frames at full speed, one running YOLO inference every 2 seconds without ever blocking the stream, and one serving the live feed to the browser via Flask. YOLO only detects people (class 0 out of 80) which makes it faster, and Telegram alerts fire with a 60 second cooldown so it doesn’t spam. The moment it all worked and a notification hit my phone while the bounding box showed up in the browser was genuinely insane. By the end of today I have a fully working computer vision + notification pipeline running on the Pi — live browser stream, YOLO person detection, and real-time Telegram alerts to my phone and computer. The core software of the Eclipse Lamp is done, but this wasn’t it for today. Sometime in the middle of my recording my print finished and I had the frame and extension. The sad part was the extension wasn’t properly designed, the camera was supposed to look through it but I forgot the hole, lol, but it’s okay because its a small and fast part to reprint. The camera fit inside its case perfectly(Which never happens to me) and I wanted to start screwing. All I did was take the screws that came with all of my servos (5) and aligned them with the holes in the iris. I was so proud of myself when the camera was facing the right way and I got the screw alignment correct. The annoying part was it took me 20 fricking minutes to get 5 screws in and my chubby little finger just couldn’t, not to mention my screwdriver was trash as well. IN the end it worked perfectly and I am SOOOOOO happy for today"}, {"post_id": 22643, "ts": "2026-07-05T06:06:10Z", "hours": 3.0853, "text": "Eclipse Lamp Devlog #9 - Posting all the CAD models on my Github and spicing up my ReadMe. Today I probably worked more on my Github than I ever had before. I also learnt some cool new helpful stuff since I’m pretty much a noob to Github. Today I found out that if i press the period button on my computer it will take me to VS code on my computer or the dev version. With this I was able to minimize my commits by a lot and it was really cool to use it for the first time. Later I realized I had to add markdown files for my iris to camera frame CAD and my Iris Face Extension CAD models. While I was doing this I updated my Custom Created CAD models file. After typing everything out on that, I wanted to work on my ReadMe because it was looking pretty sad and boring. First to please my OCD I set my badges in color coded order, added a table for core components and a quick start guide. The biggest and coolest thing I learnt today were ASCII Diagrams. With these I had Claude Generate them for my repo and I was able to change them around a bit. I first had one created of my whole repo layout with files, folders, and everything else. I then had some others created for power consumption, signal and data flow, and the Detection/Alert pipeline with push notifications. In the end I added my resources and credits for the thing I used in this project. Some of these things may not be correct though because I am not fully done with this project. I also want to thank my friend rishith for helping me organize my github, and learning from his ReadMe organization to make my own. Go check him out, he’s working on Prometheus right now, a fire drone: ( @rishithc )."}, {"post_id": 21997, "ts": "2026-07-04T07:05:13Z", "hours": 2.8014, "text": "Eclipse Lamp Devlog #8 - Setting up my CAD models to print and working on my Github Today I lowkey realized I was in sore need of updating my Github, and I also decided to check printing time on some CAD Models. FIrst I took the top shell and put it into my slicer. The time nearly gave me heart attack as it was 9 hours and 56 minutes. After that I decided to do literally anything possible to get the time under 6 hours. I first took the quality from 0.2-0.28mm layer height, then I set the infill at 0%, and increased speed from 90 to 115 mm/s, and wall speed from 57.5 to 80 mm/s. The final thing I did was probably the most important, I turned on Spiralized Outer Contour, or as some call it “Vase Mode” (ty youtube shorts for teaching me this 2 years ago for some reason 🙏). The next thing I did after fixing the printing time was work on my Github as I had not been paying much attention to it lately. I added folders for the first time(I’m a noob) and organized my code and hardware files. I even added a security file for the camera footage and added badges/shields to my readme for the things I used. I also created some new files like the Top Lamp Construction.md file from Devlog #7 and Custom Created Cad Models.md to paste the onshape and tinkercad files I used. The next thing to do is add a B.O.M to it and finally print out the CAD Models."}, {"post_id": 21349, "ts": "2026-07-03T07:30:14Z", "hours": 2.1142, "text": "Eclipse Lamp Devlog #7 - Creating the CAD model for the Top Shell of the Lamp and working on the Mechanical Iris Frame attachment Today was pretty chill in terms of work as I was focused on making the CAD model for the top shell of the Lamp housing. This housing would hold the iris mechanism and the Lamp module. I first built the large hollow frame after researching the thickness I needed to print my walls at. I’m not sure how strong it is going to be because I set it at 2 walls or 0.8mm. For the wires going from the raspberry pi to camera, the raspberry pi to the servo, and the raspberry pi to the lamp I cut 6 long slots into the bottom of the shell. I also cut a hole for the servo gear(I will use a servo attached to a gear and the gear will attach to the shell because the shaft of the servo is too small) for the pan rotation. I then cut another hole for the Iris mechanism to fit. I needed to place the hole strategically because since the Raspberry pi was in the bottom shell, and the camera is in the top, I would have to keep the distance between them short so the ribbon cable could twist and turn. This wasn’t my proudest moment but to be honest I felt sleep-deprived and didn’t care. It still worked as long as I kept It close enough so I just turned the iris mechanism upside down so the camera was closer and that worked. I created a lid for the lamp later but i might not even use it and let the light shine through. Then I created a frame for the camera to attach behind the iris so it could stay in one piece. I will screw it in or hot glue it physically as it should fit to the back of it and align with its 5 holes(the iris mechanism). The next thing I might do is print the small pieces in here or the bottom shell from Devlog #6, i wanna wait a bit before printing the big lamp shell, not sure how that’ll hold up."}, {"post_id": 20546, "ts": "2026-07-02T05:02:11Z", "hours": 2.0503, "text": "Eclipse Lamp Devlog #6 - Creating the CAD model for the Bottom Shell of the Lamp with the Raspberry Pi and Pan Servo Today was an AMAZING break from all the software I’ve done so far. I was focused on making the CAD model for the bottom shell of the Lamp housing. This housing would hold the Raspberry Pi and the Pan servo responsible for rotating the top Lamp shell around. This model was pretty straightforward to make as I used the premade model I had from onshape I made in Devlog #5. It was a bit rocky though because when I got my Raspberry Pi case imported from printables, It didn’t fit properly in the compartment and didn’t leave room for the servo to center. I first when with 100mm x 100mm which I made beforehand, then 120mm x 120mm which still didn’t fit the servo in the center (It was very close), and after that I was extremely fed up so I just said “screw it” and went to 150mm x 150mm. This size gave me a considerate amount of space for everything to place in. Then I reverted to Tinkercad as it was faster for me and after placing the raspberry pi case, I placed wall holders for the servo to glue onto physically (The servo was centered this time). Sadly this model got even more complicated because when I went to slice it to get a gist of the time consumed, it started at 8 hours and 46 minutes, then i removed the back wall to set it at 6 hours and 52 minutes. After that I wanted it faster so I kept removing the unnecessary walls from the raspberry pi case and I was able to get the time down to 6 hours and 4 minutes, which I was very happy with."}, {"post_id": 19727, "ts": "2026-07-01T03:43:30Z", "hours": 2.2361, "text": "Eclipse Lamp Devlog #5 - Developing KiCad Schematics and starting CAD design for the Lamp Shell I was lowkey in need for some asmr after ChatGPT kept rage-baiting me in terminal, so today I worked on a KiCad schematic for my components and I started the CAD design for the Bottom shell of the lamp. My main goal in creating the complete KiCad schematic for all of the project’s components was so I would have a clear wiring guide during construction, even though I won’t be manufacturing a PCB from it. I ran into a dumb few challenges finding symbols for parts like the Raspberry Pi Camera and the lamp, so I created a custom camera symbol in the KiCad Symbol Editor and represented the lamp using an LED and resistor. I literally wasted like 20 minutes trying to find a nonexistent symbol so I just had to make my own. The remaining components, including the servos, power connections, and a USB-A connector for the lamp, were much less of a headache to add. After finishing the schematic earlier than expected, I used the remaining time to begin designing the lamp enclosure in CAD. I was also surprised because my computer froze for maybe 20 minutes during the recording. I pretty much had a heart-attack because I thought I lost the recording working on this when my computer restarted. I started with the bottom section, which will house the Raspberry Pi and the first servo for the pan-tilt mechanism. While the design is still incomplete, I’m pretty happy with how features like the fillets and the extrusions turned out. My next step will likely be finishing the bottom shell, unless I decide to focus on completing more of the AI system first."}, {"post_id": 19051, "ts": "2026-06-30T07:12:01Z", "hours": 1.9814, "text": "Eclipse Lamp Devlog #4 - Finally getting the Person Detection AI to run properly on my Raspberry Pi Camera Today went EXTREMELY WELL in terms of progress. Finally, after what started back in Devlog 1 and Devlog 3, everything has come together and actually worked end-to-end in a way that feels complete. What began as a messy setup with camera errors, broken environments, and YOLO not even running correctly slowly turned into a full Raspberry Pi computer vision system with a working Picamera2 pipeline, a Flask web server streaming live footage to a browser, and YOLO detection successfully running on real-time frames. Along the way, there were a lot of setbacks—camera being “busy,” venv issues breaking imports, OpenCV display problems, dependency conflicts, and even moments where the system felt completely stuck—but step by step those were fixed until the full pipeline finally ran without crashing. By the end, I actually got YOLO detection working properly on live camera input, with bounding boxes showing up and the whole system functioning as intended. The main issue left now is performance: the system works, but it’s still slower than I want, with noticeable lag and lower frame rate than ideal. I went back and rebuilt parts of it trying to make it faster, but I didn’t fully finish optimizing it yet. That final tuning—improving FPS, reducing delay, and making the stream smoother—is something I’ll come back to later. Still, today was a complete success because the full system is alive, functional, and running exactly as planned, and now it’s just a matter of refinement rather than building from scratch."}, {"post_id": 18171, "ts": "2026-06-29T06:27:16Z", "hours": 1.6517, "text": "Eclipse Lamp Devlog #3 - Testing Mechanical Iris Code post 3D-printing and trying to finish Person Detection AI software for Raspberry Pi _________________________________________________________________________ Today I made somewhat strong progress in two areas but as always i sold on the software side lol. First, on the mechanical side, I tested the mechanical iris with an SG90 servo by wiring it to an Elegoo Uno to validate the Arduino code, which successfully controlled the opening and closing after uploading an existing sketch. I then translated the code to Python, wired it to a Raspberry Pi, installed the required libraries, and confirmed the iris worked the same way, completing the mechanical system. Luckily this made me failing on my AI seem easier to deal with. Working on this I genuinely insane and started raging on ChatGPT after making me do the same thing 20 times. I continued the person detection AI setup on the Raspberry Pi camera by confirming libcamera and Picamera2 were working, building a Flask live video stream that displayed real-time footage in the browser, and testing YOLO (Ultralytics), but I kept running into environment and dependency issues like missing modules, virtual environment conflicts, and broken installs that stopped full AI detection from running, and ChatGPT was just so bad at helping, so the next step is fixing the Python environment and system dependencies to properly run YOLO on the live camera feed."}, {"post_id": 18001, "ts": "2026-06-28T23:35:09Z", "hours": 0.6689, "text": "Eclipse Lamp Devlog #2 - Preparing to Code and 3D-Print my Mechanical Iris Design Today gave me a little more hope in actually getting this project done well because i was able to get the perfect Mechanical iris model that could shield my camera. It was much better working with actual hardware and arduino that dealing with terminal commands taking over 30 years. It took me some time to find the right model that was small enough but still extremely functional and versatile, but after some time I found the perfect SG90 Mechanical Iris on thingiverse.com by Lore09. After finding the files I set them up in my slicer to arrange them for 3D-printing later on. The time estimates to be about 3 hours so in the meantime i thought of writing code for the servo motor to test the iris. I also have no idea why my copy and paste wasn’t working but it is kind of expected because my computer is as slow as a snail. For this I used Arduino IDE to write the servo code, here were the comments i made to explain this code better: //This code is too check the physical limits of the SG90 servo when it is used in the iris construction //It will use the range of 0-63 degrees(as previously tested before as the physical constraint angles) angle it will //start at 0 degrees and go to 63, then loop back to get the iris adjustable central opening fully closed and fully opened //Note: My copy does not work today for some reason so i will have to type my arduino code manually resourcing it from claude. //I will test this code in another devlog once the iris is done 3d printing and I have the servo attached. The next thing to do is complete stage 2 and assemble the parts after printing and test the servo code for functionality and I hope like some other times, it does not heat-up and automatically break after my first code upload."}, {"post_id": 17448, "ts": "2026-06-28T07:13:05Z", "hours": 1.6125, "text": "Eclipse Lamp Devlog #1 - Installing Person Detection AI on my Camera Today was the start of this project and I already know this is going to be really annoying later on. It didn’t go totally as planned, but I still made some progress with my AI camera setup on the Raspberry Pi. This was my first attempt at trying to add the AI person detection software on my Raspberry Pi V2 noIR Camera connected to my Raspberry Pi model B. I spent most of the time coding in terminal and also python scripts to implement computer vision. I got the camera V2 working and tested live video output using rpicam, and started building the software side with Flask and OpenCV to eventually stream footage in a browser. I tried to take it further by installing YOLO (ultralytics) for human detection, but I ran into a bunch of errors during setup and the module wouldn’t import properly afterward. Also ChatGPT kept making me download and delete files over and over again. Even though I couldn’t finish the full AI detection today, I’m planning to come back later and switch to a simpler detection model so I can get real-time bounding boxes and continue building the Eclipse Lamp system."}]...
|
Title: The Eclipse Lamp by @vrunchil7 | Stardance
Title: The Eclipse Lamp by @vrunchil7 | Stardance
Devlogs:
Eclipse Lamp Devlog #1 - Installing Person Detection AI on my Camera Today was the start of this project and I already know this is going to be really annoying later on. It didn’t go totally as planned, but I still made some progress with my AI camera setup on the Raspberry Pi. This was my first attempt at trying to add the AI person detection software on my Raspberry Pi V2 noIR Camera connected to my Raspberry Pi model B. I spent most of the time coding in terminal and also python scripts to implement computer vision. I got the camera V2 working and tested live video output using rpicam, and started building the software side with Flask and OpenCV to eventually stream footage in a browser. I tried to take it further by installing YOLO (ultralytics) for human detection, but I ran into a bunch of errors during setup and the module wouldn’t import properly afterward. Also ChatGPT kept making me download and delete files over and over again. Even though I couldn’t finish the full AI detection today, I’m planning to come back later and switch to a simpler detection model so I can get real-time bounding boxes and continue building the Eclipse Lamp system.
Eclipse Lamp Devlog #2 - Preparing to Code and 3D-Print my Mechanical Iris Design Today gave me a little more hope in actually getting this project done well because i was able to get the perfect Mechanical iris model that could shield my camera. It was much better working with actual hardware and arduino that dealing with terminal commands taking over 30 years. It took me some time to find the right model that was small enough but still extremely functional and versatile, but after some time I found the perfect SG90 Mechanical Iris on thingiverse.com by Lore09. After finding the files I set them up in my slicer to arrange them for 3D-printing later on. The time estimates to be about 3 hours so in the meantime i thought of writing code for the servo motor to test the iris. I also have no idea why my copy and paste wasn’t working but it is kind of expected because my computer is as slow as a snail. For this I used Arduino IDE to write the servo code, here were the comments i made to explain this code better: //This code is too check the physical limits of the SG90 servo when it is used in the iris construction //It will use the range of 0-63 degrees(as previously tested before as the physical constraint angles) angle it will //start at 0 degrees and go to 63, then loop back to get the iris adjustable central opening fully closed and fully opened //Note: My copy does not work today for some reason so i will have to type my arduino code manually resourcing it from claude. //I will test this code in another devlog once the iris is done 3d printing and I have the servo attached. The next thing to do is complete stage 2 and assemble the parts after printing and test the servo code for functionality and I hope like some other times, it does not heat-up and automatically break after my first code upload.
Eclipse Lamp Devlog #3 - Testing Mechanical Iris Code post 3D-printing and trying to finish Person Detection AI software for Raspberry Pi _________________________________________________________________________ Today I made somewhat strong progress in two areas but as always i sold on the software side lol. First, on the mechanical side, I tested the mechanical iris with an SG90 servo by wiring it to an Elegoo Uno to validate the Arduino code, which successfully controlled the opening and closing after uploading an existing sketch. I then translated the code to Python, wired it to a Raspberry Pi, installed the required libraries, and confirmed the iris worked the same way, completing the mechanical system. Luckily this made me failing on my AI seem easier to deal with. Working on this I genuinely insane and started raging on ChatGPT after making me do the same thing 20 times. I continued the person detection AI setup on the Raspberry Pi camera by confirming libcamera and Picamera2 were working, building a Flask live video stream that displayed real-time footage in the browser, and testing YOLO (Ultralytics), but I kept running into environment and dependency issues like missing modules, virtual environment conflicts, and broken installs that stopped full AI detection from running, and ChatGPT was just so bad at helping, so the next step is fixing the Python environment and system dependencies to properly run YOLO on the live camera feed.
Eclipse Lamp Devlog #4 - Finally getting the Person Detection AI to run properly on my Raspberry Pi Camera Today went EXTREMELY WELL in terms of progress. Finally, after what started back in Devlog 1 and Devlog 3, everything has come together and actually worked end-to-end in a way that feels complete. What began as a messy setup with camera errors, broken environments, and YOLO not even running correctly slowly turned into a full Raspberry Pi computer vision system with a working Picamera2 pipeline, a Flask web server streaming live footage to a browser, and YOLO detection successfully running on real-time frames. Along the way, there were a lot of setbacks—camera being “busy,” venv issues breaking imports, OpenCV display problems, dependency conflicts, and even moments where the system felt completely stuck—but step by step those were fixed until the full pipeline finally ran without crashing. By the end, I actually got YOLO detection working properly on live camera input, with bounding boxes showing up and the whole system functioning as intended. The main issue left now is performance: the system works, but it’s still slower than I want, with noticeable lag and lower frame rate than ideal. I went back and rebuilt parts of it trying to make it faster, but I didn’t fully finish optimizing it yet. That final tuning—improving FPS, reducing delay, and making the stream smoother—is something I’ll come back to later. Still, today was a complete success because the full system is alive, functional, and running exactly as planned, and now it’s just a matter of refinement rather than building from scratch.
Eclipse Lamp Devlog #5 - Developing KiCad Schematics and starting CAD design for the Lamp Shell I was lowkey in need for some asmr after ChatGPT kept rage-baiting me in terminal, so today I worked on a KiCad schematic for my components and I started the CAD design for the Bottom shell of the lamp. My main goal in creating the complete KiCad schematic for all of the project’s components was so I would have a clear wiring guide during construction, even though I won’t be manufacturing a PCB from it. I ran into a dumb few challenges finding symbols for parts like the Raspberry Pi Camera and the lamp, so I created a custom camera symbol in the KiCad Symbol Editor and represented the lamp using an LED and resistor. I literally wasted like 20 minutes trying to find a nonexistent symbol so I just had to make my own. The remaining components, including the servos, power connections, and a USB-A connector for the lamp, were much less of a headache to add. After finishing the schematic earlier than expected, I used the remaining time to begin designing the lamp enclosure in CAD. I was also surprised because my computer froze for maybe 20 minutes during the recording. I pretty much had a heart-attack because I thought I lost the recording working on this when my computer restarted. I started with the bottom section, which will house the Raspberry Pi and the first servo for the pan-tilt mechanism. While the design is still incomplete, I’m pretty happy with how features like the fillets and the extrusions turned out. My next step will likely be finishing the bottom shell, unless I decide to focus on completing more of the AI system first.
Eclipse Lamp Devlog #6 - Creating the CAD model for the Bottom Shell of the Lamp with the Raspberry Pi and Pan Servo Today was an AMAZING break from all the software I’ve done so far. I was focused on making the CAD model for the bottom shell of the Lamp housing. This housing would hold the Raspberry Pi and the Pan servo responsible for rotating the top Lamp shell around. This model was pretty straightforward to make as I used the premade model I had from onshape I made in Devlog #5. It was a bit rocky though because when I got my Raspberry Pi case imported from printables, It didn’t fit properly in the compartment and didn’t leave room for the servo to center. I first when with 100mm x 100mm which I made beforehand, then 120mm x 120mm which still didn’t fit the servo in the center (It was very close), and after that I was extremely fed up so I just said “screw it” and went to 150mm x 150mm. This size gave me a considerate amount of space for everything to place in. Then I reverted to Tinkercad as it was faster for me and after placing the raspberry pi case, I placed wall holders for the servo to glue onto physically (The servo was centered this time). Sadly this model got even more complicated because when I went to slice it to get a gist of the time consumed, it started at 8 hours and 46 minutes, then i removed the back wall to set it at 6 hours and 52 minutes. After that I wanted it faster so I kept removing the unnecessary walls from the raspberry pi case and I was able to get the time down to 6 hours and 4 minutes, which I was very happy with.
Eclipse Lamp Devlog #7 - Creating the CAD model for the Top Shell of the Lamp and working on the Mechanical Iris Frame attachment Today was pretty chill in terms of work as I was focused on making the CAD model for the top shell of the Lamp housing. This housing would hold the iris mechanism and the Lamp module. I first built the large hollow frame after researching the thickness I needed to print my walls at. I’m not sure how strong it is going to be because I set it at 2 walls or 0.8mm. For the wires going from the raspberry pi to camera, the raspberry pi to the servo, and the raspberry pi to the lamp I cut 6 long slots into the bottom of the shell. I also cut a hole for the servo gear(I will use a servo attached to a gear and the gear will attach to the shell because the shaft of the servo is too small) for the pan rotation. I then cut another hole for the Iris mechanism to fit. I needed to place the hole strategically because since the Raspberry pi was in the bottom shell, and the camera is in the top, I would have to keep the distance between them short so the ribbon cable could twist and turn. This wasn’t my proudest moment but to be honest I felt sleep-deprived and didn’t care. It still worked as long as I kept It close enough so I just turned the iris mechanism upside down so the camera was closer and that worked. I created a lid for the lamp later but i might not even use it and let the light shine through. Then I created a frame for the camera to attach behind the iris so it could stay in one piece. I will screw it in or hot glue it physically as it should fit to the back of it and align with its 5 holes(the iris mechanism). The next thing I might do is print the small pieces in here or the bottom shell from Devlog #6, i wanna wait a bit before printing the big lamp shell, not sure how that’ll hold up.
Eclipse Lamp Devlog #8 - Setting up my CAD models to print and working on my Github Today I lowkey realized I was in sore need of updating my Github, and I also decided to check printing time on some CAD Models. FIrst I took the top shell and put it into my slicer. The time nearly gave me heart attack as it was 9 hours and 56 minutes. After that I decided to do literally anything possible to get the time under 6 hours. I first took the quality from 0.2-0.28mm layer height, then I set the infill at 0%, and increased speed from 90 to 115 mm/s, and wall speed from 57.5 to 80 mm/s. The final thing I did was probably the most important, I turned on Spiralized Outer Contour, or as some call it “Vase Mode” (ty youtube shorts for teaching me this 2 years ago for some reason 🙏). The next thing I did after fixing the printing time was work on my Github as I had not been paying much attention to it lately. I added folders for the first time(I’m a noob) and organized my code and hardware files. I even added a security file for the camera footage and added badges/shields to my readme for the things I used. I also created some new files like the Top Lamp Construction.md file from Devlog #7 and Custom Created Cad Models.md to paste the onshape and tinkercad files I used. The next thing to do is add a B.O.M to it and finally print out the CAD Models.
Eclipse Lamp Devlog #9 - Posting all the CAD models on my Github and spicing up my ReadMe. Today I probably worked more on my Github than I ever had before. I also learnt some cool new helpful stuff since I’m pretty much a noob to Github. Today I found out that if i press the period button on my computer it will take me to VS code on my computer or the dev version. With this I was able to minimize my commits by a lot and it was really cool to use it for the first time. Later I realized I had to add markdown files for my iris to camera frame CAD and my Iris Face Extension CAD models. While I was doing this I updated my Custom Created CAD models file. After typing everything out on that, I wanted to work on my ReadMe because it was looking pretty sad and boring. First to please my OCD I set my badges in color coded order, added a table for core components and a quick start guide. The biggest and coolest thing I learnt today were ASCII Diagrams. With these I had Claude Generate them for my repo and I was able to change them around a bit. I first had one created of my whole repo layout with files, folders, and everything else. I then had some others created for power consumption, signal and data flow, and the Detection/Alert pipeline with push notifications. In the end I added my resources and credits for the thing I used in this project. Some of these things may not be correct though because I am not fully done with this project. I also want to thank my friend rishith for helping me organize my github, and learning from his ReadMe organization to make my own. Go check him out, he’s working on Prometheus right now, a fire drone: ( @rishithc ).
Eclipse Lamp Devlog #10 - Finishing the YOLO and AI Person Detection, starting and finishing the Telegram Push Notification system, and assembling the printed Iris-Camera frame shutter system YOOOOOOOOOOOO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Today was actually the most productive session ever. First, before I started my recording I finished the iris-camera frame attachment that attaches the camera to the back of the iris mechanism. My main motive for today was getting the Telegram notification setup, but I did so much more. First I decided on using Telegram, downloading the app on my phone and computer for notifications. Then I created a bot through BotFather, got my bot token and chat ID, and went into terminal so the Pi could send messages directly to my Telegram. Within minutes I was getting notifications on both my phone and computer simultaneously — that part was actually easy and satisfying to get done fast. After that I said “third time’s the charm for AI” and it really was. I decided to finally fix the YOLO detection once and for all, and if successful, tie it together with Telegram. I copied everything over to Claude — no more ChatGPT ragebait. I was so desperate I started glazing Claude talking about how ChatGPT is terrible. Honestly though it was the right call. What followed was probably the most painful dependency debugging session of this entire project. The Pi threw everything at me — numpy version conflicts between picamera2 and opencv, OpenCV itself crashing with “Illegal instruction” because pip installed an x86 build on an ARM chip, then PyTorch doing the exact same thing because it installed a CUDA build completely incompatible with the Pi. I had to hunt down and manually delete broken opencv and numpy installs from multiple locations across the filesystem, increase the Pi’s swap space from 512MB to 1024MB so torch wouldn’t get killed mid-download, reinstall PyTorch from the official CPU ARM wheel, and finally export the YOLOv8n model from PyTorch format to ONNX format so it could run through ONNX Runtime instead — which is dramatically more efficient on ARM hardware. Every single fix revealed another problem underneath it, but step by step it all got resolved. The final detect.py runs three fully independent threads — one capturing camera frames at full speed, one running YOLO inference every 2 seconds without ever blocking the stream, and one serving the live feed to the browser via Flask. YOLO only detects people (class 0 out of 80) which makes it faster, and Telegram alerts fire with a 60 second cooldown so it doesn’t spam. The moment it all worked and a notification hit my phone while the bounding box showed up in the browser was genuinely insane. By the end of today I have a fully working computer vision + notification pipeline running on the Pi — live browser stream, YOLO person detection, and real-time Telegram alerts to my phone and computer. The core software of the Eclipse Lamp is done, but this wasn’t it for today. Sometime in the middle of my recording my print finished and I had the frame and extension. The sad part was the extension wasn’t properly designed, the camera was supposed to look through it but I forgot the hole, lol, but it’s okay because its a small and fast part to reprint. The camera fit inside its case perfectly(Which never happens to me) and I wanted to start screwing. All I did was take the screws that came with all of my servos (5) and aligned them with the holes in the iris. I was so proud of myself when the camera was facing the right way and I got the screw alignment correct. The annoying part was it took me 20 fricking minutes to get 5 screws in and my chubby little finger just couldn’t, not to mention my screwdriver was trash as well. IN the end it worked perfectly and I am SOOOOOO happy for today
Eclipse Lamp Devlog #11 - Finishing the Bottom Lamp Case print and assembling the Servo and Pi to it. Also Finishing the B.O.M. Today was pretty fun since I got to work mostly on the hardware. I started my print at 8 AM (the earliest I’ve woken up this summer) and let the 6-hour print run. I came back at 2:13 to see the final product. Since this was the bottom shell, I needed to print it in a dark color so light wouldn’t shine through. I was itching to use my new red-and-black silk PLA, so I loaded it into my extruder and got started. Next, I was ready to hot glue the servo into the walls I designed, but first I needed to make sure the servo shaft was centered. I grabbed a 150 × 150 mm plate and used a compass and ruler to find the midpoint (shoutout to my geometry teacher). I found that the servo shaft was only 2 mm off-center, which I was totally fine with. After that, I tried fitting the Raspberry Pi into its spot but realized I had made a CAD mistake. When I aligned it with the screw holes, the audio jack stuck out because I hadn’t designed an opening for it. Instead of reprinting the whole part, I grabbed my hot glue gun and burned a hole through the side. It worked perfectly, and the Pi fit right in. I originally wanted to screw the Pi in place, but I didn’t have the right size hardware. I needed 3.5 mm screws and only had 3 mm and 4 mm, so I ended up hot gluing it in instead, and it held perfectly. I also hot glued the camera into its enclosure so it became part of the iris mechanism. After finishing the hardware, I started and finished the BOM and posted it to my GitHub. The next step is printing the top case....
|
1792713089.836152
|
1793317889.836152
|
|
3867
|
My awesome macropad! by @karthikchim784 | Stardanc My awesome macropad! by @karthikchim784 | Stardance...
|
karthikchim784
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @karthikchim784 | S Title: My awesome macropad! by @karthikchim784 | Stardance...
|
1792713088.9953485
|
1793317888.9953485
|
|
21252
|
BusyBee by @Anvi | Stardance
|
Anvi
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: BusyBee by @Anvi | Stardance
|
1792713088.1569366
|
1793317888.1569366
|
|
4227
|
Untitled by @WilliamTreu | Stardance
|
WilliamTreu
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @WilliamTreu | Stardance
|
1792713087.3222988
|
1793317887.3222988
|
|
8417
|
My awesome macropad! by @nonbrainkid | Stardance
|
nonbrainkid
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @nonbrainkid | Star Title: My awesome macropad! by @nonbrainkid | Stardance...
|
1792713086.4767756
|
1793317886.4767756
|
|
31390
|
WarioWare Game by @icebreaker4327 | Stardance
|
icebreaker4327
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: WarioWare Game by @icebreaker4327 | Stardan Title: WarioWare Game by @icebreaker4327 | Stardance...
|
1792713085.6061838
|
1793317885.6061838
|
|
6427
|
My awesome macropad! by @yukteshwarrajrah | Starda My awesome macropad! by @yukteshwarrajrah | Stardance...
|
yukteshwarrajrah
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @yukteshwarrajrah | Title: My awesome macropad! by @yukteshwarrajrah | Stardance...
|
1792713084.5961561
|
1793317884.5961561
|
|
34910
|
My first slack bot! by @xman | Stardance
|
xman
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @xman | Stardance
|
1792713080.8950417
|
1793317880.8950417
|
|
5863
|
ASTRA by @Tinkerbella | Stardance
|
Tinkerbella
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: ASTRA by @Tinkerbella | Stardance
|
1792713079.9105551
|
1793317879.9105551
|
|
17492
|
SlackingOfBot by @chezburger | Stardance
|
chezburger
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: SlackingOfBot by @chezburger | Stardance
|
1792713079.0680766
|
1793317879.0680766
|
|
23182
|
My very own WebOS by @coconot | Stardance
|
coconot
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @coconot | Stardance
|
1792713078.1908157
|
1793317878.1908157
|
|
2365
|
badass macropad! by @devansmell | Stardance
|
devansmell
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: badass macropad! by @devansmell | Stardance
|
1792713077.3618782
|
1793317877.3618782
|
|
19000
|
My first slack bot! by @mionaise | Stardance
|
mionaise
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @mionaise | Stardanc Title: My first slack bot! by @mionaise | Stardance...
|
1792713076.4968941
|
1793317876.4968941
|
|
19249
|
My awesome macropad! by @Chronix | Stardance
|
Chronix
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @Chronix | Stardanc Title: My awesome macropad! by @Chronix | Stardance...
|
1792713075.6496391
|
1793317875.6496391
|
|
36516
|
My own site! by @TheCosmicEclipse | Stardance
|
TheCosmicEclipse
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My own site! by @TheCosmicEclipse | Stardan Title: My own site! by @TheCosmicEclipse | Stardance...
|
1792713074.823557
|
1793317874.823557
|
|
9773
|
Virtual Fitting Room by @Isha7390 | Stardance
|
Isha7390
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Virtual Fitting Room by @Isha7390 | Stardan Title: Virtual Fitting Room by @Isha7390 | Stardance...
|
1792713074.0010383
|
1793317874.0010383
|
|
14048
|
My awesome macropad! by @roro | Stardance
|
roro
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @roro | Stardance
|
1792713073.1535416
|
1793317873.1535416
|
|
35779
|
Hand Control by @niamakesthings | Stardance
|
niamakesthings
|
0
|
18.76
|
0
|
[]
|
[{"post_id": 35640, "ts": "202 [{"post_id": 35640, "ts": "2026-07-27T06:40:01Z", "hours": 5.18, "text": "So it’s been a while. In short: making the program recognize the difference between several single-finger motions and one multi-finger motion turned out to be quite difficult. My code originally discarded a finger’s action history once it triggered an action, which worked when the fingers were being tested separately, but when tested together ended up making the program count the fingers one-by-one, triggering their actions, before discarding the history so they couldn’t be analyzed for whether or not all the gestures were actually together. I solved this by adding another gesture queue that opens the first time something is detected, stays open for a processing window, then closes after no further inputs are received. I also implemented a hand preference feature so the program can only use one hand rather than looking for both. It does work, however it still trips up when the wrong hand enters frame first, and the right hand right after it. I also implemented a proximity checker to try and make the code only work when a finger is pointed towards the camera, but it worked poorly and I will likely not use it for the ship. I also tried to make a new processing mode where instead of the motions of all fingers being recorded individually and then aggregated and turned into a direction later, only the index finger motion would be checked initially, then fingers were categorized based on whether they moved relative to the index finger or not. Those that didn’t were assumed to be part of the gesture, and therefore counted. I thought this would make the program more reliable since it would only require the index finger to be tracked well and the settings could be fine tuned to perform best for just that finger, but it ended up being kinda annoying. The processing window had to be really large in order for it to actually capture relative motion, the relative positions were tricky since the program couldn’t differentiate well whether one finger was covering another, and overall it just performed a lot worse. I might try and edit it in the future, but for now the regular mode works just fine as long as there’s a good amount of light. So far 1, 2, and 3 finger gestures work as separate triggers, and I will likely work on clicking in some way. On my setup, 3 fingers changes the window, 2 fingers scroll, and 1 finger moves the mouse. It would be nice to make it continuous instead of moving a set amount every trigger, but it does work."}, {"post_id": 34427, "ts": "2026-07-25T03:56:21Z", "hours": 0.685, "text": "No complete update yet (working on giving the program a grace period when the hand landmarker model fails to process a frame or two), but I just wanted to share this gem of a debug log. I think I messed something up somewhere because…"}, {"post_id": 34393, "ts": "2026-07-25T02:30:09Z", "hours": 1.2342, "text": "ydotool integration now works! I’ll admit it’s a little choppy at the moment and there’s a lot of optimizations to be made, but it isn’t throwing any explicit errors which is an improvement. One issue I will have to deal with is it being incredibly slow, especially considering that it has a very similar function definition as the terminal command option. I think this is because it is compiling the config.json string into numerical identifiers every single time it triggers rather than doing it once in the setup stage as overhead and just referencing the numerical values as variables. I didn’t foresee this being an issue since there’s a maximum of 4 triggers (and therefore 4 compilations) per second, but I will continue to work on that. Another thing that I definitely HAVE to work on is hand choosing. I originally tried to record my computer through my phone instead of screen recording so my actual hand would be captured (ergo, there would be proof I was actually controlling this with my hand) but the program kept locking onto the hand holding my phone and ignoring my other hand. Therefore, I’ll probably also be working on adding a config option to force the program to only recognize either the left or right hand."}, {"post_id": 34253, "ts": "2026-07-24T19:55:23Z", "hours": 2.3181, "text": "Finished an installation script that downloads the necessary packages via pip if the user doesn’t already have them. It shouldn’t be too necessary because the packages will already be bundled in since I plan to use pyinstaller when I ship it, but it’s nice to have if some users prefer to run the code themselves or make their own modifications. There is a bit of a bug though: since this program needs both opencv-python and mediapipe, which itself needs opencv-contrib-python, there are two packages that share the ‘cv2’ namespace. This isn’t an issue if you have both, but if the user only has one of the two packages the program will fail because it expected both to be functional, but won’t catch why it failed because all it sees is that it was able to import cv2. Not sure how I’m going to fix that, but for 90% of people who use this it shouldn’t be of much concern. Also the reason you can’t see my camera this time is because I’ve turned off the show feed flag, it kept getting in my way for testing. However, you can see via the “camera is active” notification that it did turn on."}, {"post_id": 33380, "ts": "2026-07-23T08:32:05Z", "hours": 3.0639, "text": "Goodness gracious it is 3am… I’ve made some more good progress on the script, including (amongst tidying up as well, of course), implementing a function that creates a new config file if it can’t locate one, a function that automatically downloads the correct hand landmarker model so it doesn’t need to be bundled into the directory by default, a better json loader function, support for absolute paths (which will become incredibly important when I ship this because relative paths can be hit or miss), an improved automatic selection tool to choose what framework should be used, and more. I also changed how constants work: instead of being loaded one-by-one right before they’re needed within their functions, they’re all loaded in the setup phase as soon as the config file is resolved, and declared as global variables. This helped reduce a lot of redundancy in assigning variables. In terms of bugfixes, I fixed a loading order error in which the program attempted to access config values before they were assigned to constants, a couple import errors (these were my fault somehow I managed to put import statements within an if statement), added a new error exception for when the config file is malformed, fixed a small read-write permissions error, and solved an initial issue I had with ydotool (whenever I would send a keystroke it would close the “shell” it was running in before the unpress command went through, and the keys would be permanently stuck with no way to reopen the shell to undo it. The only shortcut this affects now is closing a window intentionally, though I don’t think that’ll be a problem when it’s running minimized.)"}, {"post_id": 33313, "ts": "2026-07-23T03:40:32Z", "hours": 3.0536, "text": "So, funny story, I did not in fact fix it tomorrow,” I decided to take a break for the day and when I came back I made a series of poor system management decisions that ended in me wrecking systemctl and having to restore from a snapshot. HOWEVER, I have gotten quite a bit done. Non-exhaustively: I completed the 5-finger tracking system so the program keeps track of all 5 fingers, including the wrist; I made it so that the program recognized ANY finger to trigger an execution rather than just the index finger; I implemented a debug flag in the config.json to show specific debug values (I will work on making it pretty later); I implemented a show view flag so the user can decide whether they want a camera frame active or not; and (perhaps the largest change) I am working on setup tool that can configure the program on the first run. The reason I’m working on the setup tool now instead of saving it until the end is that, due to my last devlog where I decided to pivot to using keyboard shortcuts instead of just terminal commands, I’ve had to look for packages that can help trigger certain keystrokes. I’ve landed on pyautogui for the main package – it’s easy to use, supports windows, mac, and linux on x11, and isn’t too large. However (and this really annoyed me), Linux users on Wayland (aka me) need a completely different tool (ydotool) since wayland blocks pyautogui and pretty much every other python script from executing. Therefore, instead of building the entire thing around ydotool and having to retrofit pyautogui support for the majority of people to be able to use my script, I’ve decided to develop both at the same time using a VM when I need to. It’s definitely taking longer than it would otherwise, but I hope the result will be much better."}, {"post_id": 31426, "ts": "2026-07-19T19:46:04Z", "hours": 0.4128, "text": "Alright, so this devlog (of a whopping 20 minutes) isn’t really to highlight progress, but to highlight a decision I’ve made: up until now, I’ve having my script trigger a terminal command in order to execute actions. However, this is very setup-dependent, not cross platform, and a little overkill if we’re being honest. Instead of that, I’ve decided that it would be best to pivot to having movements trigger keyboard shortcuts, which means the program should (in theory) work across different operating systems without user hassle. I plan to use pyautogui for this, though I may also use pynput if it ends up being more efficient. Secondly, I have also decided to add an option to force the program to require that a finger be extended towards the camera in order to consider its motion, which may make multi-finger combinations easier to execute with less accidental triggers."}, {"post_id": 31064, "ts": "2026-07-19T04:52:04Z", "hours": 1.17, "text": "Good news and bad news: The good news is that I’ve been able to drastically clean up my code, make a few performance optimizations, and make the camera viewport respect config.json preferences. I’ve also been able to port 90% of my code over to using dictionaries and keys instead of just variables, which now allows it to store data about the position and movement of every finger instead of just one(although the index is still the only one being used right now). The bad news is that I am truly losing my marbles trying to devise a system that would be able to wait until all fingers have been processed to evaluate whether or not a gesture was a one, two, or three finger one while still being in the normal execution loop, and not interfering with the next frame’s processing. Hopefully I’ll be able to come up with a solution tomorrow."}, {"post_id": 31004, "ts": "2026-07-19T01:38:10Z", "hours": 1.1622, "text": "YESSSSSSS it works!!! It is incredibly janky, hypersensitive, and only responds to the index finger right now (not to mention that it doesn’t respect the config.json, that’s a later me problem), but hey, it exists! Next steps are to clean up the code and add tracking for every finger and the wrist."}, {"post_id": 30713, "ts": "2026-07-18T14:56:55Z", "hours": 0.4761, "text": "Just posting a devlog for an initial update. Unfortunately I borked my hackatime config so it didn’t track the work I did initially but it’s fine because right now all I have is the json loader and most of the camera feel handling. The json took me an embarrasing amout of time because I’ve never touched json in Python code before."}]...
|
Title: Hand Control by @niamakesthings | Stardance Title: Hand Control by @niamakesthings | Stardance
Devlogs:
Just posting a devlog for an initial update. Unfortunately I borked my hackatime config so it didn’t track the work I did initially but it’s fine because right now all I have is the json loader and most of the camera feel handling. The json took me an embarrasing amout of time because I’ve never touched json in Python code before.
YESSSSSSS it works!!! It is incredibly janky, hypersensitive, and only responds to the index finger right now (not to mention that it doesn’t respect the config.json, that’s a later me problem), but hey, it exists! Next steps are to clean up the code and add tracking for every finger and the wrist.
Good news and bad news: The good news is that I’ve been able to drastically clean up my code, make a few performance optimizations, and make the camera viewport respect config.json preferences. I’ve also been able to port 90% of my code over to using dictionaries and keys instead of just variables, which now allows it to store data about the position and movement of every finger instead of just one(although the index is still the only one being used right now). The bad news is that I am truly losing my marbles trying to devise a system that would be able to wait until all fingers have been processed to evaluate whether or not a gesture was a one, two, or three finger one while still being in the normal execution loop, and not interfering with the next frame’s processing. Hopefully I’ll be able to come up with a solution tomorrow.
Alright, so this devlog (of a whopping 20 minutes) isn’t really to highlight progress, but to highlight a decision I’ve made: up until now, I’ve having my script trigger a terminal command in order to execute actions. However, this is very setup-dependent, not cross platform, and a little overkill if we’re being honest. Instead of that, I’ve decided that it would be best to pivot to having movements trigger keyboard shortcuts, which means the program should (in theory) work across different operating systems without user hassle. I plan to use pyautogui for this, though I may also use pynput if it ends up being more efficient. Secondly, I have also decided to add an option to force the program to require that a finger be extended towards the camera in order to consider its motion, which may make multi-finger combinations easier to execute with less accidental triggers.
So, funny story, I did not in fact fix it tomorrow,” I decided to take a break for the day and when I came back I made a series of poor system management decisions that ended in me wrecking systemctl and having to restore from a snapshot. HOWEVER, I have gotten quite a bit done. Non-exhaustively: I completed the 5-finger tracking system so the program keeps track of all 5 fingers, including the wrist; I made it so that the program recognized ANY finger to trigger an execution rather than just the index finger; I implemented a debug flag in the config.json to show specific debug values (I will work on making it pretty later); I implemented a show view flag so the user can decide whether they want a camera frame active or not; and (perhaps the largest change) I am working on setup tool that can configure the program on the first run. The reason I’m working on the setup tool now instead of saving it until the end is that, due to my last devlog where I decided to pivot to using keyboard shortcuts instead of just terminal commands, I’ve had to look for packages that can help trigger certain keystrokes. I’ve landed on pyautogui for the main package – it’s easy to use, supports windows, mac, and linux on x11, and isn’t too large. However (and this really annoyed me), Linux users on Wayland (aka me) need a completely different tool (ydotool) since wayland blocks pyautogui and pretty much every other python script from executing. Therefore, instead of building the entire thing around ydotool and having to retrofit pyautogui support for the majority of people to be able to use my script, I’ve decided to develop both at the same time using a VM when I need to. It’s definitely taking longer than it would otherwise, but I hope the result will be much better.
Goodness gracious it is 3am… I’ve made some more good progress on the script, including (amongst tidying up as well, of course), implementing a function that creates a new config file if it can’t locate one, a function that automatically downloads the correct hand landmarker model so it doesn’t need to be bundled into the directory by default, a better json loader function, support for absolute paths (which will become incredibly important when I ship this because relative paths can be hit or miss), an improved automatic selection tool to choose what framework should be used, and more. I also changed how constants work: instead of being loaded one-by-one right before they’re needed within their functions, they’re all loaded in the setup phase as soon as the config file is resolved, and declared as global variables. This helped reduce a lot of redundancy in assigning variables. In terms of bugfixes, I fixed a loading order error in which the program attempted to access config values before they were assigned to constants, a couple import errors (these were my fault somehow I managed to put import statements within an if statement), added a new error exception for when the config file is malformed, fixed a small read-write permissions error, and solved an initial issue I had with ydotool (whenever I would send a keystroke it would close the “shell” it was running in before the unpress command went through, and the keys would be permanently stuck with no way to reopen the shell to undo it. The only shortcut this affects now is closing a window intentionally, though I don’t think that’ll be a problem when it’s running minimized.)
Finished an installation script that downloads the necessary packages via pip if the user doesn’t already have them. It shouldn’t be too necessary because the packages will already be bundled in since I plan to use pyinstaller when I ship it, but it’s nice to have if some users prefer to run the code themselves or make their own modifications. There is a bit of a bug though: since this program needs both opencv-python and mediapipe, which itself needs opencv-contrib-python, there are two packages that share the ‘cv2’ namespace. This isn’t an issue if you have both, but if the user only has one of the two packages the program will fail because it expected both to be functional, but won’t catch why it failed because all it sees is that it was able to import cv2. Not sure how I’m going to fix that, but for 90% of people who use this it shouldn’t be of much concern. Also the reason you can’t see my camera this time is because I’ve turned off the show feed flag, it kept getting in my way for testing. However, you can see via the “camera is active” notification that it did turn on.
ydotool integration now works! I’ll admit it’s a little choppy at the moment and there’s a lot of optimizations to be made, but it isn’t throwing any explicit errors which is an improvement. One issue I will have to deal with is it being incredibly slow, especially considering that it has a very similar function definition as the terminal command option. I think this is because it is compiling the config.json string into numerical identifiers every single time it triggers rather than doing it once in the setup stage as overhead and just referencing the numerical values as variables. I didn’t foresee this being an issue since there’s a maximum of 4 triggers (and therefore 4 compilations) per second, but I will continue to work on that. Another thing that I definitely HAVE to work on is hand choosing. I originally tried to record my computer through my phone instead of screen recording so my actual hand would be captured (ergo, there would be proof I was actually controlling this with my hand) but the program kept locking onto the hand holding my phone and ignoring my other hand. Therefore, I’ll probably also be working on adding a config option to force the program to only recognize either the left or right hand.
No complete update yet (working on giving the program a grace period when the hand landmarker model fails to process a frame or two), but I just wanted to share this gem of a debug log. I think I messed something up somewhere because…
So it’s been a while. In short: making the program recognize the difference between several single-finger motions and one multi-finger motion turned out to be quite difficult. My code originally discarded a finger’s action history once it triggered an action, which worked when the fingers were being tested separately, but when tested together ended up making the program count the fingers one-by-one, triggering their actions, before discarding the history so they couldn’t be analyzed for whether or not all the gestures were actually together. I solved this by adding another gesture queue that opens the first time something is detected, stays open for a processing window, then closes after no further inputs are received. I also implemented a hand preference feature so the program can only use one hand rather than looking for both. It does work, however it still trips up when the wrong hand enters frame first, and the right hand right after it. I also implemented a proximity checker to try and make the code only work when a finger is pointed towards the camera, but it worked poorly and I will likely not use it for the ship. I also tried to make a new processing mode where instead of the motions of all fingers being recorded individually and then aggregated and turned into a direction later, only the index finger motion would be checked initially, then fingers were categorized based on whether they moved relative to the index finger or not. Those that didn’t were assumed to be part of the gesture, and therefore counted. I thought this would make the program more reliable since it would only require the index finger to be tracked well and the settings could be fine tuned to perform best for just that finger, but it ended up being kinda annoying. The processing window had to be really large in order for it to actually capture relative motion, the relative positions were tricky since the program couldn’t differentiate well whether one finger was covering another, and overall it just performed a lot worse. I might try and edit it in the future, but for now the regular mode works just fine as long as there’s a good amount of light. So far 1, 2, and 3 finger gestures work as separate triggers, and I will likely work on clicking in some way. On my setup, 3 fingers changes the window, 2 fingers scroll, and 1 finger moves the mouse. It would be nice to make it continuous instead of moving a set amount every trigger, but it does work....
|
1792713072.0165443
|
1793317872.0165443
|
|
26643
|
Jetson Chessboard by @richard1 | Stardance
|
richard1
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Jetson Chessboard by @richard1 | Stardance
|
1792713071.1715333
|
1793317871.1715333
|
|
13973
|
My first slack bot! by @har8hit | Stardance
|
har8hit
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @har8hit | Stardance
|
1792713070.3187551
|
1793317870.3187551
|
|
15386
|
sleepy runner by @uzunemir778 | Stardance
|
uzunemir778
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: sleepy runner by @uzunemir778 | Stardance
|
1792713069.4810622
|
1793317869.4810622
|
|
34675
|
Untitled by @NovaFlame | Stardance
|
NovaFlame
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @NovaFlame | Stardance
|
1792713068.6386478
|
1793317868.6386478
|
|
8716
|
My awesome macropad! by @lilspyjr | Stardance
|
lilspyjr
|
0
|
1.08
|
0
|
[]
|
[{"post_id": 6597, "ts": "2026 [{"post_id": 6597, "ts": "2026-06-11T02:25:51Z", "hours": 1.0814, "text": "Macropad I sadly don’t have a microcontroller so this is all I can do for now."}]...
|
Title: My awesome macropad! by @lilspyjr | Stardan Title: My awesome macropad! by @lilspyjr | Stardance
Devlogs:
Macropad I sadly don’t have a microcontroller so this is all I can do for now....
|
1792713067.7604592
|
1793317867.7604592
|
|
35848
|
Untitled project by @Shivsky | Stardance
|
Shivsky
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @Shivsky | Stardance
|
1792713066.9185114
|
1793317866.9185114
|
|
28415
|
My awesome macropad! by @teleon | Stardance
|
teleon
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @teleon | Stardance
|
1792713066.0668902
|
1793317866.0668902
|
|
12287
|
Untitled by @alexseekingalpha | Stardance
|
alexseekingalpha
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled by @alexseekingalpha | Stardance
|
1792713065.0413744
|
1793317865.0413744
|
|
39279
|
Greetings!!! by @Mari26 | Stardance
|
Mari26
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Greetings!!! by @Mari26 | Stardance
|
1792713064.1280673
|
1793317864.1280673
|
|
25012
|
My very own WebOS by @StarDustShineBright | Starda My very own WebOS by @StarDustShineBright | Stardance...
|
StarDustShineBright
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @StarDustShineBright | Title: My very own WebOS by @StarDustShineBright | Stardance...
|
1792713062.803228
|
1793317862.803228
|
|
36266
|
My own site! by @rsvdd3108 | Stardance
|
rsvdd3108
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My own site! by @rsvdd3108 | Stardance
|
1792713061.950206
|
1793317861.950206
|
|
28338
|
Drought System by @Kevin_M | Stardance
|
Kevin_M
|
0
|
0.46
|
0
|
[]
|
[{"post_id": 18834, "ts": "202 [{"post_id": 18834, "ts": "2026-06-30T01:11:53Z", "hours": 0.4628, "text": "14 days ago I started working on a project that would use a NASA API to get drought Data. Sadly I switched for Open-Meteo in order to fix delays/bugs. I built the aircraft from scratch and the overall concept. I spent a week pulling all-nighters back to back as this is my last summer before the last year of high school! I will continue to post dev-logs. Claude AI was used. This is an expected project to go along with the Congressional App Challenge hosted by my Californian friends @ Roblox! I also asked Roblox engineers/employees for feedback and they mentioned they liked it. I’m open for feedback. :)"}]...
|
Title: Drought System by @Kevin_M | Stardance
Dev Title: Drought System by @Kevin_M | Stardance
Devlogs:
14 days ago I started working on a project that would use a NASA API to get drought Data. Sadly I switched for Open-Meteo in order to fix delays/bugs. I built the aircraft from scratch and the overall concept. I spent a week pulling all-nighters back to back as this is my last summer before the last year of high school! I will continue to post dev-logs. Claude AI was used. This is an expected project to go along with the Congressional App Challenge hosted by my Californian friends @ Roblox! I also asked Roblox engineers/employees for feedback and they mentioned they liked it. I’m open for feedback. :)...
|
1792713061.094072
|
1793317861.094072
|
|
37544
|
my APOD site by @myra | Stardance
|
myra
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: my APOD site by @myra | Stardance
|
1792713060.2498827
|
1793317860.2498827
|
|
14340
|
My very own WebOS by @byashas0528 | Stardance
|
byashas0528
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @byashas0528 | Stardan Title: My very own WebOS by @byashas0528 | Stardance...
|
1792713059.3869843
|
1793317859.3869843
|
|
15457
|
My first slack bot! by @Leo_Zhang | Stardance
|
Leo_Zhang
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @Leo_Zhang | Stardan Title: My first slack bot! by @Leo_Zhang | Stardance...
|
1792713058.5380487
|
1793317858.5380487
|
|
33387
|
Untitled project by @Augustin | Stardance
|
Augustin
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @Augustin | Stardance
|
1792713057.6914768
|
1793317857.6914768
|
|
35764
|
My first slack bot! by @Vick | Stardance
|
Vick
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @Vick | Stardance
|
1792713056.8329606
|
1793317856.8329606
|
|
1403
|
Untitled project by @Cheng_Hang | Stardance
|
Cheng_Hang
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Untitled project by @Cheng_Hang | Stardance
|
1792713056.0043647
|
1793317856.0043647
|
|
26651
|
A collection system by @Tomasw | Stardance
|
Tomasw
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: A collection system by @Tomasw | Stardance
|
1792713055.167245
|
1793317855.167245
|