Florian Wesch

info-beamer pi 0.9.5 released

Posted Jul 18 2016 by Florian Wesch

After more than half a year of development the new info-beamer 0.9.5 release is ready. It offers a number of improvements like nested content.

Download 0.9.5 release

Nested content

This feature allows you to access content in nested directories and get notified if that content changes. It enables you to be more flexible when organizing your assets and code.

I've already written about this feature in an earlier blog post. So head over to read about what's possible now.

This feature has been successfully used in production by customers to make it easier to compose content. It is now possible to detect changed Lua files in subdirectories and treat those as plugins to your root node. There is an example of how that might work linked in the blog post.


A small helper function was added to prevent you from accidentally defining or accessing unset global variables. Lua makes it easy to make that mistake, so util.noglobals() can help you with that.


print(unset_variable) -- not ok! accesses unset global variable
a_new_variable = "nope" -- not ok! results in an error as it is a new global

local new_local_variable = "this works" -- ok! It's a new local variable

will now result in this error message:

[example] runtime error: example/node.lua:3: attempt to reference missing
    global 'unset_variable' aborted: noglobals() active

You have to declare all variables using local once you've enabled noglobals. This was always a good idea anyway for performance reasons and to prevent you from accidentally reusing the same variable in two places and overwriting each others values. So use util.noglobals(). It will make your code better.

IPv6 support

Previously info-beamer only supported IPv4. It is long overdue to support v6, so that has been added now. By default info-beamer will listen to both the v4 and v6 local addresses and ::1. So connecting to localhost will now work regardless of whether that resolves to an v4 or v6 address.

INFOBEAMER_ADDR can be used like before to force info-beamer to listen to only the specified address. It now supports both v4 and v6 addresses. If you want to bind to any available v6 address, use INFOBEAMER_ADDR=::. If you want to bind to any available v4 address, use INFOBEAMER_ADDR= like before.

Global VSync

There is a new experimental feature that might be useful if you want to perfectly synchronize content on multiple screens. Once INFOBEAMER_GLOBAL_VSYNC=1 is set, info-beamer will try to adjust the vsync event so it happens at the same time on multiple devices. info-beamer slightly modifies the HDMI clock rate for that until the vsync happens at an expected wall clock timestamp. So the local system time has to be identical on multiple devices so this feature has the intended effect. You'll probably need a local NTP server for that.

It might also cause screen flickering if your output device can't handle the modified HDMI clock. So use with care.

There have been multiple customers asking for a way to perfectly synchronize playback of multiple videos on multiple devices. This is one step into that direction. The next info-beamer release will most likely have improved video synchronization that adjusts playback speed in a similar way. Both of those features combined should result in perfectly synchronized playback. Stay tuned.

Meanwhile you can of course try the current way of doing things: There is a grid player that displays videos and images on multiple screens as well as the slightly less powerful video wall code.

Content ordering

Previously it was undefined/random in which order files in a node directory would be provided to the content_update event when starting info-beamer. If you have relied on a specific order your code might break at any moment since the order depended on the inode order in your filesystem.

Now there is a defined order: First all child nodes will be added in alphanumeric order. Then all local files will be added, again in alphanumeric order. Finally node.lua will load.

Other improvements

  • Sometimes the Luajit compiler would kick in and arguments to the calls gl.rotate, gl.scale and gl.translate would be ignored or used in a wrong way. This bug has been fixed now.
  • Added more useful debug output to log levels 3 and 4 to make it easier to see what's wrong.
  • Previously info-beamer might have flickered for a single frame when starting. This happened when you for example display a node that has FullHD resolution (gl.setup(1920, 1080)) on a smaller resolution display. info-beamer would first initialize the GL surface to the native resolution and then switch to the requested resolution before drawing the first frame. Switching from a lower resolution surface to a higher resolution surface resulted in garbage showing on the screen for a single frame. This is fixed now by initializing the surface to its maximum resolution first and then switching to the requested resolution.
  • os.time() now returns a floating point value with microsecond precision. So you can actually use that value for animations.
  • When info-beamer gets stuck (for example when running an infinite loop like while true do end) you now get a better error message describing where it got stuck.
  • Boolean values can now be assigned to shaders uniforms. Lua booleans will result in 0.0 and 1.0 float uniform values.
  • info-beamer is incompatible with the experimental OpenGL driver in newer kernels (search for "One more thing"). info-beamer will now detect that driver and provide you with instruction on how to disable it.
  • info-beamer now initially detects files on filesystems that don't support returning a proper d_type for readdir. So you might load file from NFS now. Using NFS still remains a bad idea and you should probably not do that.
  • info-beamer now handles large files. So bring those 4GB videos!


info-beamer.com offers the most advanced digital signage platform for the Raspberry Pi. Fully hosted, programmable and easy to use. Learn more...

Get started for free!

Trying out the best digital signage solution for the Raspberry Pi is totally free: Use one device and 1GB of storage completely free of charge. No credit card required.

Follow @infobeamer on twitter to get notified of new blog posts and other related info-beamer news. It's very low traffic so just give it a try.

You can also subscribe to the RSS Feed RSS feed.

Share this post:

Share using Twitter

Questions or comments?
Get in contact!