Smart vs Magic Poi – current situation explained

There seems to be a bit of confusion about the current status and difference between the SmartPoi and Magic Poi projects – so I thought I would break it down here.

SmartPoi

  • a 10 year+ old project of mine – originally conceived of as trying to make a cheaper version of “Pixel Poi” by “Feeding the Fish*”. At the time they were extremely expensive to buy. See “history of SmartPoi” page.
  • The latest STABLE version is the one I own – using a D1 mini and WS2812 LED strip (I also successfully used D1 Mini with APA102 strip) which is the one in the tutorial on my website. Programmed via Arduino IDE.
  • There is an older version for ESP-01 and APA102 strip – not supported anymore, even Espressif don’t support the ESP-01 anymore!
  • There is a newer version, using PlatformIO and ESP32 which I haven’t had a chance to fully test yet (except on a breadboard) – mentioned here. It is on a branch of the firmware GitHub – all of the control software for the D1 mini version works with this also.
  • SmartPoi is basically finished – apart from updating the ESP32 version for stability.
  • SmartPoi project has made me extremely happy, I lost count of how many people used my ideas to make their own poi – some sharing ideas back which helped me improve my design..
  • If you live in Brasil you can actually buy a commercial version of SmartPoi, really well made (better than mine!) – as well as the most amazing LED Hula Hoops. Send them a message, hook it up!

*I actually met those guys in Brighton once – nice friendly, super talented people. I still hated them though – with envy of course.

Magic Poi

  • New project built from scratch using all of the experience and ideas I got while building the SmartPoi project
  • Difference is that Magic Poi has an Online Server where you can upload and store your images – as well as share with friends via a website (account sign-up required).
  • Also, Magic Poi is built from the ground up using software best practises. Using PlatformIO and FreeRTOS on the dual core S3 version of ESP32, which allows for parallel processing – for example we can load images without interrupting the image display (keep spinning while more images get loaded in the background).
  • Supports Timelines (timed image changes – switch images to music)
  • Supports single image display (one image at a time)
  • Has physical buttons to control poi. One click to download the Timeline you created (or one which was shared with you). One click to sync and start Timeline display. Button “menu” to choose images, multiple options.
  • Also has a battery monitor built-in.
  • Sync arbitrary number of poi via internet connection. Theoretically 100’s of poi can be controlled together in different locations across the globe.
  • Most features from SmartPoi to be added as well (including Offline use, web app controls)
  • Lots more features being added all the time.
  • NOT currently available to the public!

We plan to sell Magic Poi

  • Magic Poi is busy being developed by me (Tom Hastings) in partnership with my oldest friends who currently happen to have their own factory where they build a ton of cool stuff already – including electronics. I chose to go with EnterAction because I know and trust them fully and they have a track record of delivering quality products (and they are also poi spinners of course)
  • We are currently on the third iteration of the circuit board for Magic Poi. This could very well be the final one – but if it isn’t we will be fixing it and ordering the fourth, and so on until it is 100% – see the proposed timeline here
  • SmartPoi ESP32 version is fully compatible with Magic Poi hardware, by the way, and comes with OTA uploading, so if you tried SmartPoi and like it, you will be able to run the exact same Open Source code on Magic Poi – and upload without even plugging into USB. (of course I hope you will like the new Magic Poi firmware better)

The Patreon – why?

I set up a Patreon mainly because a few of you lovely people mentioned that you wanted to have a way to support me financially in developing the software. Up until a few months ago the only income I derived from my SmartPoi and other projects was affiliate links – full disclosure, I made R800 over 4 years. That is apart from the direct benefit of having and using my own SmartPoi in my shows.

Since the costs were increasing as we got closer to actual product launch I set up the Patreon. Right now there are 6 paid members who kindly give me money every month. It almost covers the full cost of 1. Server hosting and 2. (the big one) DeepSeek credits for AI assisted development. Development speed has increased exponentially since I started using Aider and improving my AI enhanced development skills.

Until we start selling Magic Poi I will keep diligently sharing updates and exclusive access to my Patreon supporters.

Any day now

  • Magic Poi will go on sale
  • I hope you will buy a set – the first “Alpha” version will be as cheap as we can make it I promise. Especially for Patreon paid subscribers, you guys helped me and I plan on waiving the cost for services such as server costs and development to give you guys a decent discount at launch.
  • Magic Poi firmware will be available to owners of the poi upon purchase. I am a firm believer in Open Source, you will have access to modify the code running on your own equipment if you want.
  • Magic Poi online account subscription will be included in the price of purchase. Poi will 100% work without any online subscription or internet connection.
  • I hope to get to a point where we sell enough poi to pay for my development time and of course the AI and Server costs, so I won’t need Patreon anymore to break even.
  • We have a long list of products we want to develop – all in the Poi/Juggling/Flow arts space. Magic Poi is just the first*.
  • If you haven’t already, join me on Patreon (until launch day at least). It costs nothing to join and you get the updates first (plus some exclusive content and discount if you pay the minimum $3 per month or more)

*I am very proud of my upgraded version of K8 IR controlled commercial juggling equipment – made my own version of the firmware and have some ideas to improve this for single colour poi, juggling balls in the future..

Magic Poi Product Launch Timeline

We are really getting there this time. Let’s review what we have done so far with Magic Poi and then I will try to make some guesses about when the actual launch will happen!

What is done?

  • test board 1 (some issues)
  • test board 2 (some issues, better than #1)
  • battery monitor upgrade
  • LED strip upgrade
  • parts design and 3d modeling for outer shell
  • battery charger prototyping and testing
  • test board 3 design (ready for order)

Still todo:

  • order test board #3 (this week!)
  • 1-2 weeks until delivery
  • put everything together
  • put the charger together
  • test everything (spin actual poi!)
  • build 3 complete pairs of poi for the 3 founders (Tom, Brett and Dylan)
  • build the code out from “development” version to “full spec”
  • test code
  • finalise design
  • offer “Alpha” boards and full “Magic Poi Alpha” poi for sale to early adopters (target Circus Scientist followers, Patreon supporters get a discount!)
  • refine firmware and server code with feedback from early adopters
  • set up Indigogo campaign
  • marketing and advertising
  • mass production

ETA?

As you can see, we still have a lot to do! A lot hinges on this latest circuit – if it is sound then the rest will not take long. The code doesn’t even need to be finished for us to sell Magic Poi – the old SmartPoi firmware is stable, and works on the new hardware just fine. And you can update to full Magic Poi firmware at any time (OTA update is built in).

Dylan from EnterAction is a qualified plastics engineer, so I have complete confidence that end result is going to be aesthetically very pleasing to look at and use.

Keep following for more updates! A few more months to go?! Now is a good time to sign up on my Patreon – to support my AI coding and hosting costs as we ride the downhill to product launch. All paid supporters will get a hefty discount on the prototype poi when it comes out – and a direct line to give feedback on the features we build in as we grow Magic Poi.

Router Mode Unlocked

Router mode for SmartPoi is where your poi connects to the Router – as opposed to the default method of one poi (main) creating an Access Point and you connecting to that. It is a bit more complicated (you need to find the poi on the network now in order to control them) but has some benefits:

  • Faster Speed
  • More Reliable
  • Less Strain on Main poi
  • Now poi can connect to internet (for upcoming Smart-Magic Poi Bridge)

How to use it?

As part of building the new version of smart-poi-js-utilities (Combined_APP folder) I upgraded the poi mode switching and made a tutorial video.

Many thanks to my Patreon supporters for covering my AI coding and hosting costs – DeepSeek came out with a new model yesterday which made this app even easier to make! You can join them here: https://www.patreon.com/c/CircusScientist for free! Get the latest updates, and be in line to get a discount when the long awaited Magic Poi go on sale (not long now!).

AI Generated Images for POV Poi

I have been saying for some time now that I wanted to train an image generation model on a ton of POV Poi images to make one that I can use for Magic Poi image generation.

“I want an celtic knot image – blue with black background” should ideally generate something usable on the poi. Up until recently tools like Dalle, Stable Diffusion and Midjourney simply weren’t up to the task. The type of image that works on my poi (dark background, primary colours, pixel perfect, small size) just weren’t an option – most pics end up blurry and just look worse than making it yourself in Photoshop*. Don’t even get me started on how annoying the ChatGPT image generator is! “Image needs to have no white, only primary colours” (white image generated) “Zero White PIXELS!!!!” (Still blinds me with glaring white background)

I recently went looking again and actually found some! There is a service aptly named “thereisanaiforthat.com” with a ton of free services listed. I have linked the best ones below.

Some Example Images

Services:

https://free.theresanaiforthat.com/@kadi_228/pattern-generator-srcset

https://free.theresanaiforthat.com/@zurcher/decorative-patterns

More to view here:
https://free.theresanaiforthat.com/pattern-images/

I am not sure, you may need to sign in for these to actually work but all of the ones I linked are free!

I still have that trained image generator for poi pics on my list of things to do, but it seems I may have a better starting point to work from soon, if these projects are anything to go by. The field is advancing rapidly!

*I actually use Krita, open source image editing software with Pixel brush. It’s really good.

The Problem of Timelines

Problem

Definition: A clear, concise statement describing the issue to be addressed, including its scope, context, and constraints. It serves as the foundation for analysis, solution design, or decision-making.

So when I say “Problem” that’s what I mean: an issue to be addressed – the clearer the context the simpler it is to come up with a solution.

By the way, Magic Poi and SmartPoi (open source) have a Patreon Support channel . If you would like to keep track of progress – and optionally contribute (mostly to AI Coding Assistant and Server bills) please join up – you can join for free and get updates about the project, paid members get a discount when we start selling the actual project.

The Problem

TLDR: I am working on the best ways to create, save, fetch and display timed sequences of images for Magic Poi. It’s tricky but I am getting there!

Timelines and Sequences – in terms of Magic Poi:

Timeline: a sequence of images each with an attached time to be displayed. The times start at zero.

Sequence: just the sequence, timed at a regular interval.

So in terms of software, we have a User Interface running JavaScript, connected to a back end running on Python (Flask). The back end database is PostreSQL which actually contains all of the arrays of images and metadata (including ownership and relationships – eg Tom owns x.jpg and shared it with Dylan).

The Poi running C++ needs to connect to the Python server API using http requests (authenticated using JWT, so you don’t get someone else’s images!)

Currently how the flow works is:

  1. User creates timeline and saves – this adds the image ID’s in an array (each image has a number), like [1, 4, 67, 55] and the timeline times in an array (in milliseconds), like [0, 257, 1029, 40005].
  2. The back end saves the timeline image ID’s and times along with metadata (Timeline name, owner, shared with..)
  3. Now the hard part, poi fetch the timeline – after selecting “timeline” using buttons (I have created a nice menu system with 2 buttons – LED colours give indication of position in the menu, long press first button for menu, short press first button to select main menu position, short press second button to select sub-menu)

– this is where the hard part comes in. First of all, we need to know how many timelines the user has, so we need to fetch that in order to proceed. Then the sub-menu needs to have exactly that number of options to choose from. But what if we are not connected to WiFi? I have to have fallback options for every error, including Server errors (maybe the data center went down for maintenance, or I borked something in the Cloud..)

Eventually you get to the point of downloading the images (using the timeline image ID array) and then displaying after all the downloading is done in exact millisecond time, according to the timeline times array.

Also, I want the option to have the images display as a regular sequence (using another button menu option) rather than to exact timing – like the original SmartPoi did it. This is rather simpler to achieve thankfully but we still need to incorporate a new time variable which can be changed on the web interface or using buttons (or the offline on-board web interface, yes there is another one also)

Conclusion

So in case you are still following this – the timeline object is created in JavaScript, stored and served by Postgres DB and Python, and consumed by both JavaScript (web page loading) and C++ (Magic Poi download and display)

Status

Right now I have Magic Poi nested menu system which I am quite pleased with. We just finished testing on the new prototype board and everything works! In terms of software I can download and display one timeline in exact millisecond timing – or select a specific image from that timeline to display individually.

Todo

Still todo is the selection of which timeline – and also adding shared timelines to the list (the ones your friends shared with you using the easy to use right click web menu interface). And optional sequence mode, choose to display image each for 0.5 – 3600 seconds at a time before moving to the next.

Also I still need to add in the Flash storage space checks from SmartPoi (make sure we have enough space for the image files before downloading them!)

Maybe

I might even be able to squeeze in multiple timelines at once on the poi? This would require a way to check the Flash size restraints on the poi from the Server side, to enable calculations of size (some timelines might share images, so we don’t have to download multiple copies, sharing image files between timelines…) Right now I’m not worried about this though!

Also: Streaming! I already did this as a fun test but it requires the poi to be connected to WiFi the whole time. With two cores on S3 chip, one takes care of the downloading of images, the other displays. When an image completes downloading, it is immediately passed over to the other core with some cool memory swap code and displayed – while the next image starts downloading. This opens up many possibilities, and bypasses the restraints inherent in ESP32 Flash memory storage size (no I am not adding an SD card for downloads)

Conclusion

Wow that is a lot of words. Sometimes it is just good to outline the Problem in order to focus and get to the solution – which for me will be fast, efficient and reasonably priced Magic Poi, with versatile Timelines!

Rookie mistake – forgot to pin library versions!

In PlatformIO there is the platformio.ini – a really powerful tool to select versions of libraries from PlatformIO servers, and initialise settings for the whole project.
I recently had a problem where a friend was not able to compile my SmartPoi project – but it worked for me??

Long story short

I re-cloned the project myself (starting clean) and managed to reproduce the same problem my friend was having while compiling. After a lot of head scratching I realised – the libraries in my project were declared like so:

mathieucarbou/ESPAsyncWebServer @ ^3.1.5

However that just tells the compiler to fetch the LATEST version as long as it is above (^) 3.1.5 – and that particular library had a breaking change update. The reason I didn’t have a problem on my local version was because my compiler was just using the cached local version (not bothering to update every time, you can force this by doing “Full Clean” which I don’t tend to do)

Conclusion

Make sure to pin your versions, especially in code you want to share!

My new platformio.ini now has lib_deps that look like this:

ESP32Async/ESPAsyncWebServer @ 3.7.4

Go and get the latest ESP32 SmartPoi now

git clone https://github.com/tomjuggler/SmartPoi-Firmware

cd SmartPoi-Firmware

git checkout -b ElegantOTA_CombinedS3C3_PlatformIO origin/ElegantOTA_CombinedS3C3_PlatformIO  

SmartPoi Controls Android App updated

Android App now available for download!

I finally managed to get this working on *most* of my devices.

When it works, it’s great – upload from your phone/tablet, control with indication of connection, sliders for brighness and more! See previous blog post for details of how this all looks (it’s the same on Android, except for drag-and-drop uploading which is not possible)

DISCLAIMER: Android is a vast collection of different versions and capability devices. I used to do Android apps in the Play Store and gave up, because things break a lot. This app is just a web app inside a container and won’t do anything to your phone but it might not work – especially the uploading part.

Links: Android 12+ devices: https://circusscientist.com/SmartPoiControl_Apr_25.apk

Android 7-10 devices: https://circusscientist.com/SmartPoiControl_Apr_25_Older_Android.a
pk

Android 11 phone: Try both? Neither version works on my Android 11 phone. Actually not sure about Android 8/9/10 either. I tested on Android 7, 11 and 12 only.

And yes, I am aware that I am living in the future (named the app Apr 25 in March).

Thanks to my Patreon supporters!

More people are joining up – it’s free! You don’t have to pay to support me on Patreon, but my paid supporters are helping out a lot, particularly with my AI coding assistant bill. Without AI coding assistance this app wouldn’t be possible, and without my supporters there wouldn’t be money for the api’s.

Patreon supporters (free and paid) get the latest news first! https://www.patreon.com/c/CircusScientist

SmartPoi JS Utilities Update Demo

I just uploaded a full walkthrough of the updates to YouTube. Some functionality is not obvious, but the uploads are faster, and connection is more reliable. Overall I am quite proud of this version.

Next up: port the improvements over to the Android App.

To support my ongoing work on the SmartPoi and Magic Poi projects (and to help me save up for a new Microphone!) please consider contributing to my patreon. https://www.patreon.com/c/CircusScientist.

Shout out to Flávio from my Patreon, this one is for you!

Special Notice:

In the next month or so all of my paid subscribers over on Patreon are going to receive a surprise. I have something that nobody has done before (I checked) but I’m keeping it for them, so now is a good time if you like poi and making stuff, go ahead and join up.