szvsw a day ago

Congrats on delivering this fun project! I do a lot of work with synchronizing media content across devices so it’s always fun to see the solutions people come up with. You probably came across them in your research, but the industry standard way of creating a synced video wall like this is with BrightSign media players. The total cost for purchasing them and the screens would for 20 displays could easily end up in the 10s of thousands, so big kudos to you guys for finding a way to make this work with recycled devices.

If you are ever interested in working on some mediasync-related codebases hit me up! We hire devs to do freelance contracts fairly often.

  • varun_ch a day ago

    Thank you!

    I didn’t get the chance to mention them in the blog post, but yes we checked out the price tags on the commercial solutions :) It’s crazy! I’ve always wondered how much of the cost is hardware vs software… and I would imagine professional digital signage is also designed for reliability longevity and all that.

    • szvsw a day ago

      Reliability is a big part of it - but they are not really all that expensive for what you get IMO, especially in an enterprise context. A BrightSign is effectively a very sandboxed Linux box (you can SSH into them!) which has extremely reliable video and audio output, plus a huge amount of customizability, networking, scripting etc - plus various fleet provisioning/management software that goes with it. In terms of $/minute, the amount you pay ends up being vanishingly small IMO.

      Your main “cheap” alternative to a BrightSign is a Raspberry Pi, which is definitely cheaper, but has its own host of issues to deal with.

      • mikepurvis a day ago

        Is the separate box thing because of commercial display realities? Certainly at trade shows and the like I mostly see people just plug a usb stick into the smart tv from wal-mart and play their sizzle reel off of that.

        Is there some incentive to not just bake a small arm computer into each display?

        • szvsw a day ago

          I entirely work with museums, where there are lots and lots of considerations in re: rendering device. The considerations for eg a commercial display are a little different, but I don’t have experience with working with those sorts of clients, so my answer is from the perspective of the media art context.

          Having a separate box is just good separation of concerns - you can hook it up to whatever kind of projector you like (one projector might cost as much as $100k!), or you might need to use an analog display device (eg a CRT monitor) which certainly won’t have any USB/SD compatibility, in which case you will need some sort of hardware to convert signals appropriately. The separation of concerns just gives you much more flexibility.

          Additionally, as mentioned before, you can network the boxes, which lets you do things like creating multi-channel synchronized video art installations.

          Most BrightSigns also have GPIO pins on them, so I’ve even done things where I’ve synchronized kinetic art to the video playback.

          You can write entire custom applications for your brightsigns (or plugins to the BrightAuthor configuration engine) - it’s just its own self contained platform, so there are a lot of benefits to having it be agnostic to the display.

      • nolist_policy a day ago

        By the way, you can use Chromebooks and -boxes for digital signage (and kiosk) as well if you manage them with Google Cloud.

      • dividuum a day ago

        I operate a digital signage company based around the Pi. Curious what problems you run into. SD cards?

        • szvsw a day ago

          The deprecation of OMXPlayer has been problematic for one, since I rely on some custom applications which need to be able to have some fairly precise/low latency requirements between when you tell it to start playing vs when the playback actually starts, etc. I haven’t found a suitable mechanism which meets our reqs on a Pi for controlling/playing videos yet since that deprecation.

          The lack of a regular HDMI output is mildly annoying but not really a problem. Audio configuration is sometimes problematic, usually not…

          If a client wants to use their own Pis, getting them provisioned with our software isn’t always the easiest if the customer is techno-phobic (though that’s partly on us - RPi usage is relatively infrequent for our customers so we haven’t put the time/energy into docs and into baking an image etc).

          I love Pi’s, but they just that extra bit more finicky than BrightSigns which are hyper optimized for our use case and prevalent in our customers’ equipment rooms already.

          • dividuum a day ago

            > The deprecation of OMXPlayer has been problematic for one, since I rely on some custom applications which need to be able to have some fairly precise/low latency requirements between when you tell it to start playing vs when the playback actually starts, etc. I haven’t found a suitable mechanism which meets our reqs on a Pi for controlling/playing videos yet since that deprecation.

            Yeah. The Pi3 -> Pi4/5 jump was quite a massive change in how things work. I've been writing my own playback engine for 10 years now and that one was quite challenging. Precise playback start is something my software supports: You control everything in Lua and can, for example, preload a video and then start it based on either internal logic or based on an external trigger. Up to the Pi3, my software also supports dynamically adjusting the HDMI clock, so the vsyncs of multiple displays are synchronized. Customers have been using that for almost 10 years for video wall playback.

            If you go with the hosted version of the software, provisioning is as simple as extracting a single 60MB zip file to an empty SD card and placing that into the Pi. If needed you can even use the API to preconfigure that ZIP file to include settings like WiFi.

            • szvsw 5 hours ago

              Sounds great! I think I’ve actually stumbled across info-Beamer before. We use pretty much the exact same approach in re: configurable zip deployment for BrightSigns.

              It would be great to chat some time!

              I’ll shoot you an email.

    • niutech 6 hours ago

      Why waste old chromebooks for fun when you could donate them to the 3rd world schools for children? Thinkpads 11e are still proper hardware, I own one. Just install the latest Lubuntu and donate to people in need rather than disposing them. It's sad that huge number of the 1st world hardware is being thrown away rather than upcycle and serve the poor people in the 3rd world.

      • LTL_FTC 2 hours ago

        Getting laptops to third world countries is a real challenge. Customs agents see the computers, unaware of their age or value, and they get held, go missing until they are bribed, or just outright stollen.

        Where I previously worked, we had a server room with over a hundred laptops, many late intel MacBook pros much better than the computers coworkers in India were using, but we just could not get them there from the US. The best we could do is ask coworkers traveling to visit the India team if they were willing to carry an additional laptop through customs. But a work laptop, personal laptop, and now a second "personal" laptop, even just three devices, would sometimes cause them a headache. If the logistics were easier, I am sure more of what you are proposing would happen.

greggman25 a day ago

I worked at Google when Chromebook shipped. They put out a call for decorations for the lobby and I proposed something similar to this but they said "no" :( Maybe because I asked for 40-64 machines :P

I would not have tried to sync video though. Instead I'd have made time based animations and use the network the synchronize the clocks.

you can see an example here: https://www.youtube.com/watch?v=64TcBiqmVko

It's 8 machines running Chrome. The only thing synchronized are the settings and the time.

They machines do not have to be in a grid either. I was inspired by the Boston Science Museum's virtual aquarium

  • preinheimer 20 hours ago

    The author tried, but the clocks wouldn’t stay in sync. It’s in a sidenote expandable section.

    > Unfortunately, these Chromebooks could not reliably keep track of time within milliseconds of each other, so this method didn't work for us.

    • greggman25 14 hours ago

      I don't know if syncing the videos would work because of playback issues over time but the aquarium pages sync their clocks every second just asking the server the time (demo time not wall time) over web-sockets and then subtracting 1/2 of the time it took to get a response. I suspect the technique works better for time based animations than video since video require seeking to change the time.

    • simondotau 17 hours ago

      I feel like this deserves a deep dive of its own. Were the clocks drifting substantially over a reasonable time period between syncs (e.g. 24 hours)? Was SNTP not acting reliably? Did they try hosting a local time server?

      • 01HNNWZ0MV43FF 15 hours ago

        I was on an IoT project once and surprised to find that when blocked from ntp, PC clocks drift pretty quick. A couple milliseconds per day would not surprise me.

        It looked to me like the fleet did consistently fall behind, which seems like thoughtful design - syncing would always cause them to skip ahead and never rewind time

      • varun_ch 9 hours ago

        Did not get the chance to try much at! We just observed that clocks could be synchronized, but the next time we checked they would no longer be. I agree that this is definitely something that could also be interesting to look into in the future.

  • szvsw a day ago

    If you have fixed media (as opposed to realtime dynamically generated or streamed etc) this trick can go a very long way - or even if it is generative, if the time is used to drive the animation. It just requires good clock sync, like you said, which can be non trivial (especially if audio is involved where desync of even 20-30ms becomes very noticeable). But yeah, with NTP/PTP you can get v v far.

ashirviskas 21 hours ago

Cool! I did a similar thing with 4x4 tablets, after connecting all 16 of them to ADB and a single host I was able to automate most of the stuff. The I just created 16 virtual screens on sway with 16 VNC clients and streamed it all over Wi-Fi as a test, but Wi-Fi worked so well that I did not look for more efficient solutions.

For that period my PC had 19 displays, 17 of them over VNC and it was glorious. I could either do something on all of them, or dedicate each for a different purpose/program (music, htop, calendar, clock, ssh sessions)

Though dealing with all the hardware was quite annoying - some throttled, some had connectivity issues, others batteries would not hold charge and so on.

netcraft 6 hours ago

Super cool!

We needed to do something similar one time with 5 large touchscreen tvs that were arranged as a table, where each side needed to be a separate touchscreen application with them all playing a synchronized video in the background but users could interact with things flowing from one end to the other and could send objects from their other apps in any direction to other apps, like users sending things they found to the person on the other side of the table.

We ended up with a trashcan mac pro (thats about all we could find in budget that could drive all the screens at the same time) with apps that were synchronized using redis (I wrote that part). It worked really well, though I didnt get to see the finished product before I left that company. But we always really wanted to have separate computers that were synchronized. We just couldnt get that to be reliable enough - it worked for a while but then various things would throw it out of sync, meaning we would have to restart the applications periodically which wouldnt work.

Something I have always wished we had, since the very early days of PCs was the ability to network devices together in such a way that they could share their resources and collaborate more. Imagine being able to take advantage of all of the computers in an office to do a task like a supercomputer. Of course thats a very hard problem, applications and OSs would need to be designed for it and we would need new algorithms (look how long it took us just to take advantage of multiple processors in the same machine on the same board), but there were some projects out there like seti@home and folding@home that did it somewhat, but I always hoped it would be something that the computers themselves would support.

amendegree 9 hours ago

If you’re just skimming and didn’t read the whole blog: this was done by high school students over the course of their high school career, makes the project even more impressive imo.

mrbluecoat 6 hours ago

> I embarked on the journey of building ‘my own distro’ that we could install on the laptops. The system should start with something minimal (no desktop environment), and have an elegant script to autostart a kiosk mode Chromium instance. I first tried NixOS before quickly realising there was no way it would work with the tiny amount of storage on these Chromebooks (and it failed to install with every single attempt). Then I gave up, started with a Debian minimal install and ... I realised I would be wasting so much time (installing Debian is very ‘hands-on’ - you need to press lots of buttons), and I discovered ‘FAI - Fully Automatic Installation’ and the web FAI.me tool

DietPi, OpenWrt, and OpenBalena have autoinstall options as well that allow you to select specific packages and install on minimal bare metal. I'd be curious if there are other non-desktop options out there..

lakesta 6 hours ago

Awesome work -- way to have a vision and see it through to the end. That process will make you a success in life and you'll learn a lot, too!

mos_6502 20 hours ago

>Now, I’m not entirely sure why this works so well, but I came up with a ridiculous solution by accident […]

>This means that the slowest computers hold back the fastest computers […]

It works so well because you’ve optimized the system’s design with respect to its bottleneck. Check out the theory of constraints :)

layer8 a day ago

Literally unhinged, the Chromebooks.

leohonexus 18 hours ago

Most interesting thing to me is how switching to coreboot fixed the freezing. Do you have a theory of why that might happen? I wonder if it's ACPI/DSDT related or if HW controllers were initialized incorrectly using the original BIOS.

  • oynqr 14 hours ago

    Could also be a watchdog firing?

niutech 6 hours ago

Lenovo Thinkpad 11e aren't junk. I own one with Ubuntu and it still serves me well. Why people in the 1st world disassemble them or throw away rather than upcycling by upgrading OS and donating to the children of the 3rd world, like OLPC used to do? Still half of population doesn't have access to computers. This is hugely missed opportunity to help poor children!

  • danans 6 hours ago

    > Why people in the 1st world disassemble them or throw away rather than upcycling by upgrading OS and donating to the children of the 3rd world, like OLPC used to do?

    It wouldn't surprise me if, with the worldwide rise of smartphones, children in the developing world don't want computers.

    Also, much of the developing world has plenty of buyers of new computers, and undoubtedly a significant aftermarket for the resulting used computers (just like in the developed world), so they probably don't need our donated old computers nearly as much

    • niutech 5 hours ago

      I'm not sure. Only about 34 per cent of schools in India have internet facilities and more than 50 per cent do not have functional computers (https://theprint.in/india/education/only-34-indian-schools-h...). This is hundreds of million of people only in India and there is Africa & Southern Asia hugely in need too.

      • danans 2 hours ago

        > Only about 34 per cent of schools in India have internet facilities and more than 50 per cent do not have functional computers

        India is an economically powerful country that has nuclear weapons, a robust manufacturing sector (including computing technology), and a space program. They are building a cross country freeway network and their major cities have metro and transit systems that are more advanced than those in most major American cities.

        India is not comparable to less developed countries in sub-Saharan Africa, and in fact India's corporations outsource a lot of production to those countries for their extremely low-cost labor, just as the West does with East Asia.

        That only 34% of its schools have internet facilities and 50% don't have functional computers is the result of India's massive wealth and social inequality and it's large disparity in standard of living.

        This is the result of the policy priorities of Indian politicians and voters, not something that will be fixed by donating used laptops from the West.

        If anything, the West seems to be on a trajectory toward developing a huge disparity in the standard of living, like India.

jpeggtulsa a day ago

Me and another developer did this on a 300 seat call center on Windows Embedded thin clients probably 8 years ago now. We used timestamps and a high precision javascript library for synchronization. After everybody went home for the night, it would scroll the name of the business and the stats from the day across all the screens until a couple hours before the first calls, then it would load a queued video or text or even just colored lines similar to the windows screen saver depending on the day.

sandreas 17 hours ago

Wanna see a great video wall out of reverse engineered iPod Nano 6 displays and learn something about reverse engineering along the way?

There is a video series from Mikes Electric Stuff from 11 (!) years ago, which is fantastic.

https://www.youtube.com/watch?v=7TedIzmguP0

nashashmi a day ago

I wonder if it would have been easier to make just one video and have the computer zoom in to different parts of the video. And then run the video simultaneously through a web browser

  • xmprt a day ago

    The toughest part of this wasn't setting up different videos to play on each screen but rather the "run videos simultaneously through a web browser" part. So even if you could decode and process such a large video on those Chromebooks, it wouldn't help with video sync. That's not to mention the other challenges with installing the software and getting it to autoload on startup.

  • dividuum a day ago

    You very very likely won't be able to decode a 13660×768 video fast enough.

  • gloflo a day ago

    At least computationally that would be much more expensive and might not work well with weak devices or power saving goals.

cjaackie a day ago

fun to see the ‘write protection’ screw and think back to my toshiba chromebook, it also got coreboot thanks to Mr. Chromebox. Linux never ran quite right on the eMMC sadly…

jojol a day ago

Excellent work, and a great read.

What videos did you end up playing on this after your testing was complete? Do you have any recordings to share of this in action?

  • varun_ch a day ago

    Thank you! We haven’t figured out what to play on it yet actually - I think the plan is to build out all the tools so that our school can create and upload their own videos (eg. montages of students work - this is in the Design workshop after all) to display on the screen. It could be self-service even after we graduate in June.

    • xmprt a day ago

      If you want to spend more time on this I think one fun idea would be an infinite bouncing DVD logo. Just sync the location of the logo every time it bounces so all devices have a consistent view and then the individual screens can compute whether and how much of the logo to show and at which location.

    • i-am-gizm0 a day ago

      I think a very wide game of Pong would be fun!

      • varun_ch 9 hours ago

        Me too! Making it do interactive things is actually quite trivial since we went for the socket.io web approach rather than using something specific to video streaming. I'm imagining two QR codes on either end, players join and play a wide game of pong. Maybe with phone gyroscopes for controls.

      • hoc 20 hours ago

        We did something like that with an Amiga bouncing ball demo (on linux or Macs) back in the day (two decades ago, probably)

        I think it was using a wide master screen that the terminals connected to via vnc, displaying different parts of the master screen. Only three or four screens wide, though, and not optimized for user interaction. But a live app nonetheless.

mezzman a day ago

This one from 2013 when the Chromebook Pixel was announced was pretty great too. https://tomsepe.com/portfolio/google-pixeltree/

  • cjaackie a day ago

    I remember when someone adapted the Chromebook Pixel display as a standalone monitor [0]. I’m sure it made the rounds here. I was almost tempted to do it myself because, at the time, it was a nice 4:3 screen. I couldn’t , the Chromebook Pixel was too beautiful to hack up.

    [0] https://hackaday.com/2015/05/02/excruciating-quest-turns-chr...

IshKebab a day ago

That's an insane amount of work. Enjoy having free time while it lasts...