Coder Social home page Coder Social logo

dividuum / info-beamer Goto Github PK

View Code? Open in Web Editor NEW
228.0 21.0 48.0 621 KB

The Multimedia Presenter for Lua (for commercial projects, use info-beamer pi instead)

Home Page: https://info-beamer.com/

License: Other

Makefile 0.62% C 75.29% Perl 1.02% Lua 21.79% Python 0.72% JavaScript 0.56%
digital-signage lua linux

info-beamer's Introduction

⚠️⚠️⚠️ This repository is no longer maintained or supported ⚠️⚠️⚠️

All info-beamer development is continued on https://info-beamer.com


About info-beamer

info-beamer allows you to develop interactive information displays using the Lua programming language. Read more about it on the main website

Documentation

The complete documentation is available on info-beamer.com

Installation

See the documentation for more information.

Please note that this version won't run on the Raspberry PI, since it only provides OpenGLES2.0, which this version doesn't support. To use info-beamer on the PI, visit https://info-beamer.com/pi

info-beamer's People

Contributors

dividuum avatar flat235 avatar florolf avatar mxey avatar timo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

info-beamer's Issues

load_image in node.render()

Hey,
in my project, I have a text file with 3 lines. In one line there is a path to an image file.
I want to view the image in my node.lua.
I'm not able to execute local background = resource.load_image(IMGname) outside of node.render() because I don't know the path before executing node.render() because I have to read the path from the nth line of the text field.
Is there an opportunity to define
local background
outside of node.render() and declare the variable
background inside node.render() with
background = resource.load_image(path) background:draw(x,x,x,x)
The path variable is the relative or absolute path (I tried both) to the image.
I don't know if this should work like this...
can you help me?
Best regards

Is it possible to set different display duration for Different images

Hi, i am still new to info-beamer. I am trying to display 5 images in one folder for 20 seconds each and that works fine. Now I want to display 2 of the images for 30 second each and the rest should be displayed for 10 seconds.

Is there a way to do this?

Just a thought I had if the above is not possible, is it also possible to run nested node.lua scripts? By nested, i mean having a set of images with a lua script on a main folder and then have a sub folder with a second set of images also with their own lua script?

Your help will greatly be appreciated

opengl 2.0

hi,

i'd like to install info-beamer on old hardware.
but most of them doesn't support opengl 2.0.
is there a way to show basic information without opengl 2.0?

Thanks!

Segfault

I'm running the open-source version from within KDE on Debian stable, and it always exits with an exit code of 139 (SIGSEGV) after around 4 to 5 minutes, independently of the node being displayed.

animated gif supported?

i would be in heaven, if animated gifs are supported. is this the case?

the docu https://info-beamer.com/doc/info-beamer#resource.load_image says not: " info-beamer supports loading JPEG, PNG and on the PI version PKM images." but this issue #15 seems to deal with .gifs. (maybe not animated ones ❓ )

i found a python lib https://github.com/chidea/FBpyGIF, which shows nicely all animated gifs in autozoom on my 1080x1920 display (wich is 90 degree rotated on my raspberry9, but info-beamer has some more advantages.. 😄

i would be in heaven, if animated gifs could be displayed (with autozoom)...may in a beta? 😈

Allow newlines in font:write

I'am trying to display the contents of multiple textfiles, where each of them contains newlines.
Unfortunately, the newlines will not be rendered as expected with font:write. The newline will just be shown as a blank.

Is there any way to do this?

Add support for the raspberrypi

I think a raspberrypi would be a great presentation device using info-beamer as it is so small and can just be attached to a beamer or a big TV.

The raspberrypi does support OpenGL ES 2.0 but hasn't a accelerated X11 driver.

Here are some details:
http://benosteen.wordpress.com/2012/04/27/using-opengl-es-2-0-on-the-raspberry-pi-without-x-windows/
http://hackaday.com/2012/07/06/opengl-on-the-raspi/

How difficult would it be to add the functionality to info-beamer to use the display directly instead?
The GL Calls would be mostly the same, do we just have to replace the window surface it's draws to?

no sound in videos

Hi,

Info-Beamer is not playing any sound, if i start a video. But if I play the same video with the omxplayer everything works fine.

The environment variable is set to: INFOBEAMER_AUDIO_TARGET=hdmi
Audio Output is set to HDMI: amixer cset numid=3 2

And this is my very short script:

gl.setup(NATIVE_WIDTH, NATIVE_HEIGHT)

local video = resource.load_video{
    file = "VID_20160815.mp4";
    audio = true;
    looped = false;
    paused = false;
}

function node.render()
    video:draw(0, 0, WIDTH, HEIGHT)
end

I'm using Info-Beamer Pi on RASPBIAN JESSIE (Raspberry Pi B).

Any idea what is going wrong? I'm quite new to Linux and I'm thankful for any help.

Cheers
Mickey

Blank output window

Compiled from git master 5ba8317. All samples/ produce a blank window for me. Machine is x86_64 with Ubuntu 14.04, lua 5.1 and graphics card ATI Radeon HD 7850. glxgears works fine.

I don't see any error output, is there a verbose/debugging mode to provide some hints?

/opt/devel/info-beamer$ ./info-beamer samples/hello/
Info Beamer 1.0pre4.5ba831+Lua 5.1 (http://info-beamer.org/)
Copyright (c) 2015 Florian Wesch [email protected]

[main.c] chdir /opt/devel/info-beamer/samples
[main.c] root node is hello
[main.c] tcp/udp port is 4444
[main.c] initial size is 1024x768
[main.c] resized to 1024x768
[hello] update +silkscreen.ttf
[hello] update +README.txt
[hello] update +README.silkscreen.txt
[hello] kernel: booting node
[main.c] initialization completed
info-beamer-blank

[framebuffer.c] new framebuffer (1024x768): 1
[framebuffer.c] new framebuffer (1024x768): 2

similar output from all other examples in samples/

Does not render Japanese Characters correclty

info-beamer does not display Japanese characters correctly, this might be a font-issue though, I did not look at the code, people in the club suggested I would file a bugreport instead. An Image showing the correct rendering in ncmpc next to the monitor rendering info-beamer is attached.
IMG_20130401_093818

font:write with RGB/texturelike. how to adress image-file?

i am a noob at coding,
but the syntax does not differentiate between RGB-numbers and picture-objects.
surely my mistake,
but not superclear how to adress image-objects
with the same font:write where RGB numbers are expected.

can anybody help me out?

zwischenablage03-3

Less verbose logging

I like the output of INFOBEAMER_LOG_LEVEL=1. Especially the info about each video file played. It is however a bit too verbose when it is sent to remote syslog.

Is it somehow possible to configure how often the log info is printed out. I believe the default is 10 seconds. I am looking for something like INFOBEAMER_LOG_DELAY=30. Quick search on source did not reveal anything.

I am running the Raspberry Pi version.

Mirrored image

I've installed info-beamer on an Arch Linux, using glfw-3.1.1-1. The image displayed is mirrored
2015-08-12-183614_1024x768_scrot
2015-08-12-183702_1024x768_scrot

llua5.1 failing on arch linux

LUA_LDFLAGS ?= -L/usr/lib -llua5.1 is raising a compilation error on arch linux using lua 5.1.5:

collect2: error: ld returned 1 exit status
make: *** [info-beamer] Error 1

The workaround therefore is to edit the Makefile to LUA_LDFLAGS ?= -L/usr/lib -llua

how works the skaling of childs or utils-resource with gl.setup values correct?

hi,
i have different unpredicable results. may you can clear something up/help me with this ❔

i want to display a 352x288 video-resource.
my native screen is portrait-mode 480x800 on an raspberry.

i set up a child-node with the video-resouce (because child works best), and made this node & video-sizes in there:

gl.setup(352, 288)

local video = util.videoplayer("rtsp://192.168.14.98/4")

function node.render()
    video:draw( 0, 0, 352, 288, 1)
end

now i call the child-node from the root-node with:

gl.setup(NATIVE_WIDTH, NATIVE_HEIGHT)
--gl.setup(480, 800)
...
util.draw_correct(resource.render_child("cam-hof"),30,10,362,298,0.7)

as far as i understand, i would thought to control the position of the child with the coordinates i gave with calling the child.
but i cannot manage to put it on the right side of the whole screen.
it shrinks undpredicatable, if i increase the x-values. also if i play with gl.setup-values of the child.

also i dont understand/nor can i predict how info-beamer scales different values in calling the child-node and makes use of the settings given in the child.

i only have (to me) strange scaling-results. may you an elaborate on this a bit?

zwischenablage02

how to do scaling from root to child to video the best way?
What does info-beamer with confusing child-setup values for x/y screen-size?

thanks a lot ...

Get Raspberry Pi IP address

Hello, I am new to lua programming and i was trying to get my raspberry pi's ip address from lua i tried using

os.execute('ifconfig wlan0 | grep "inet\ addr" | cut -d: -f2 | cut -d" " -f1')
but getting an error.

invalid escape sequence near ''ifconfig wlan0 | grep "inet'

So is there any other way to get ip address from lua.

CRITICAL ERROR: cannot create surface (4k@rpi)

i have a raspberry pi running with 3840×2160,16@28.

pi@weywot ~ $ fbset -s
mode "3840x2160"
    geometry 3840 2160 3840 2160 16
    timings 0 0 0 0 0 0 0
    rgba 5/11,6/5,5/0,0/16
endmode

info-beamer does not work:

pi@weywot ~/info-beamer-pi $ INFOBEAMER_LOG_LEVEL=9 ./info-beamer ./samples/hello/
Info Beamer PI 0.9.0-beta-pre7.b22773 (https://info-beamer.com)
Copyright (c) 2015, Florian Wesch <[email protected]>

info-beamer for the raspberry pi is free for private use. If you
would like to make use of this software in a commercial way, you
must buy a license which will support the continued development.
See https://info-beamer.com/pi for more information.  Thank you!

[main.c] chdir /home/pi/info-beamer-pi/samples
[main.c] root node is hello
[main.c] tcp/udp port is 4444
[main.c] bcm_host_init
[main.c] luajit version: LuaJIT 2.1.0-alpha~1e67a4
[main.c] linux version: 3.18.11-v7+ #777 SMP PREEMPT Sat Apr 11 17:30:37 BST 2015 armv7l
[main.c] firmware version: Apr 11 2015 17:39:13  Copyright (c) 2012 Broadcom version 311b05fb4e33655a083a6f65b645e6a14e322803 (clean) (release)
[main.c] config: arm_control=0xa5800010 arm_freq=900 avoid_fix_ts=1 config_hdmi_boost=2 disable_commandline_tags=2 disable_l2cache=1 disable_overscan=1 emmc_pll_core=1 force_eeprom_read=1 force_pwm_open=1 framebuffer_height=2160 framebuffer_ignore_alpha=1 framebuffer_swap=1 framebuffer_width=3840 hdmi_force_cec_address=65535 hdmi_group=2 hdmi_ignore_edid=0xa5000080 hdmi_mode=87 hdmi_pixel_freq_limit=0x17d78400 ignore_lcd=1 max_framebuffer_height=2160 max_framebuffer_width=3840 over_voltage_avs=0x1b774 pause_burst_frames=1 program_serial_random=1 sdram_freq=450 temp_limit=85
[main.c] memory: arm=816M gpu=192M
[main.c] file descriptor limit: 1024
[surface.c] config  1: 8,8,8,8 depth=24,stencil= 8, samples=0, sample_buffers=0
[surface.c] config  2: 8,8,8,0 depth=24,stencil= 8, samples=0, sample_buffers=0
[surface.c] config  3: 8,8,8,8 depth=24,stencil= 0, samples=0, sample_buffers=0
[surface.c] config  4: 8,8,8,0 depth=24,stencil= 0, samples=0, sample_buffers=0
[surface.c] config  5: 8,8,8,8 depth= 0,stencil= 8, samples=0, sample_buffers=0
[surface.c] config  6: 8,8,8,0 depth= 0,stencil= 8, samples=0, sample_buffers=0
[surface.c] config  7: 8,8,8,8 depth= 0,stencil= 0, samples=0, sample_buffers=0
[surface.c] config  8: 8,8,8,0 depth= 0,stencil= 0, samples=0, sample_buffers=0
[surface.c] config  9: 8,8,8,8 depth=24,stencil= 8, samples=4, sample_buffers=1
[surface.c] config 10: 8,8,8,0 depth=24,stencil= 8, samples=4, sample_buffers=1
[surface.c] config 11: 8,8,8,8 depth=24,stencil= 0, samples=4, sample_buffers=1
[surface.c] config 12: 8,8,8,0 depth=24,stencil= 0, samples=4, sample_buffers=1
[surface.c] config 13: 8,8,8,8 depth= 0,stencil= 8, samples=4, sample_buffers=1
[surface.c] config 14: 8,8,8,0 depth= 0,stencil= 8, samples=4, sample_buffers=1
[surface.c] config 15: 8,8,8,8 depth= 0,stencil= 0, samples=4, sample_buffers=1
[surface.c] config 16: 8,8,8,0 depth= 0,stencil= 0, samples=4, sample_buffers=1
[surface.c] config 17: 5,6,5,0 depth=24,stencil= 8, samples=0, sample_buffers=0
[surface.c] config 18: 5,6,5,0 depth=24,stencil= 0, samples=0, sample_buffers=0
[surface.c] config 19: 5,6,5,0 depth= 0,stencil= 8, samples=0, sample_buffers=0
[surface.c] config 20: 5,6,5,0 depth= 0,stencil= 0, samples=0, sample_buffers=0
[surface.c] config 21: 5,6,5,0 depth=24,stencil= 8, samples=4, sample_buffers=1
[surface.c] config 22: 5,6,5,0 depth=24,stencil= 0, samples=4, sample_buffers=1
[surface.c] config 23: 5,6,5,0 depth= 0,stencil= 8, samples=4, sample_buffers=1
[surface.c] config 24: 5,6,5,0 depth= 0,stencil= 0, samples=4, sample_buffers=1
[surface.c] config 25: 8,8,8,8 depth= 0,stencil= 0, samples=0, sample_buffers=0
[surface.c] config 26: 8,8,8,0 depth= 0,stencil= 0, samples=0, sample_buffers=0
[surface.c] config 27: 5,6,5,0 depth= 0,stencil= 0, samples=0, sample_buffers=0
[surface.c] config 28: 5,6,5,0 depth=16,stencil= 0, samples=0, sample_buffers=0
[surface.c] egl extensions: EGL_KHR_image EGL_KHR_image_base EGL_KHR_image_pixmap EGL_KHR_vg_parent_image EGL_KHR_gl_texture_2D_image EGL_KHR_gl_texture_cubemap_image EGL_KHR_lock_surface
[surface.c] display configs matching: 1. using config 7
[surface.c] screen size: 3840x2160, gl surface 3840x2160+0,0 (layer 0)
[surface.c] creating black layer on -10
CRITICAL ERROR: cannot create surface

fyi. :)

manpage required

Many Linux distributions such as Debian require a manpage:

http://www.debian.org/doc/debian-policy/ch-docs.html

Please provide at least a boilerplate that states where to find more information, or better yet, explain the command-line switches.

changelog not up to date

The changelog is not up to date. The latest release is 1.0pre3, the latest changelog entry refers to 1.0pre1.

Play all Video's in a Json file in loop

Hi is there any way to play all the videos which are in the json file in a loop for example :- i'm having a json file like this
[{"state": "active", "video":"video1.mp4"},{"state": "active", "video":"video2.mp4"},{"state": "inactive", "video":"video3.mp4"}]

i want to play all the videos who's "state" = "active"
and Thanks :)

improve documentaton of tcp/udp event receive

i love info-beamers promise on his possibilites.
and i am no experienced coder, not even lua.

so my success needs a clear documention.
(i took me half a day to try and read the samples and experient.) 😢

may you update the doku and some working! examples for UDP/TCP receive with infobeamer?
may it helps other?

at the end i found this working for me:

root@eg-buero-olaf:/usr/src# echo -en "font\n:jjjj\n" | netcat localhost 4444
Info Beamer PI 0.9.5-beta.9930f1~jessie (https://info-beamer.com) [pid 2795/uptime 183]. *help to get help.
ok!
RemoteInput was: :jjjj
RemoteState is: :jjjj
root@eg-buero-olaf:/usr/src#

i discovered this example for tcp with the "\n" in the "flap-display" code.

the doku on the info-beamer website was not really a help 😕 , as it was stated something else - or it was not elobarated enough with an working example.

https://info-beamer.com/doc/info-beamer#nodeevents

after all, i still love your projekt, keep on going ... 👍

CRITICAL error: Cannot open window

When I try to start info-beamer on my VirtualBox Debian 7.7-amd64 virtual machine info-beamer exits with just the above error message, see the screen shot:
image
I installed all dependencies and enabled OpenGL support for my virtual machine. I'm not really familiar with C, so I can't check the errors myself.

Build Error on ubuntu 16.10

On A Fresh Ubuntu Install 16.10 following the build instructions from buildingfromsource i get this error:

johannes@ubuntu ~/info-beamer (git)-[master] % make                                                                                                                                                    
cc -O3 -DNDEBUG -DVERSION='"1.0pre4.47a5ea"' -I/usr/include/lua5.1 -I/usr/include/freetype2/ -I/usr/include/ffmpeg -std=c99 -Wall   -c -o video.o video.c
video.c: In function ‘video_open’:
video.c:81:21: error: ‘PIX_FMT_RGB24’ undeclared (first use in this function)
     video->format = PIX_FMT_RGB24;
                     ^~~~~~~~~~~~~
video.c:81:21: note: each undeclared identifier is reported only once for each function it appears in
video.c:146:24: warning: implicit declaration of function ‘avcodec_alloc_frame’ [-Wimplicit-function-declaration]
     video->raw_frame = avcodec_alloc_frame();
                        ^~~~~~~~~~~~~~~~~~~
video.c:146:22: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
     video->raw_frame = avcodec_alloc_frame();
                      ^
video.c:147:25: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
     video->scaled_frame = avcodec_alloc_frame();
                         ^
video.c:155:5: warning: ‘avpicture_get_size’ is deprecated [-Wdeprecated-declarations]
     video->buffer = av_malloc(avpicture_get_size(
     ^~~~~
In file included from video.c:35:0:
/usr/include/x86_64-linux-gnu/libavcodec/avcodec.h:4898:5: note: declared here
 int avpicture_get_size(enum AVPixelFormat pix_fmt, int width, int height);
     ^~~~~~~~~~~~~~~~~~
video.c:162:5: warning: ‘avpicture_fill’ is deprecated [-Wdeprecated-declarations]
     avpicture_fill(
     ^~~~~~~~~~~~~~
In file included from video.c:35:0:
/usr/include/x86_64-linux-gnu/libavcodec/avcodec.h:4883:5: note: declared here
 int avpicture_fill(AVPicture *picture, const uint8_t *ptr,
     ^~~~~~~~~~~~~~
video.c: In function ‘video_next_frame’:
video.c:206:9: warning: ‘av_free_packet’ is deprecated [-Wdeprecated-declarations]
         av_free_packet(&packet);
         ^~~~~~~~~~~~~~
In file included from video.c:35:0:
/usr/include/x86_64-linux-gnu/libavcodec/avcodec.h:4040:6: note: declared here
 void av_free_packet(AVPacket *pkt);
      ^~~~~~~~~~~~~~
video.c:213:9: warning: ‘av_free_packet’ is deprecated [-Wdeprecated-declarations]
         av_free_packet(&packet);
         ^~~~~~~~~~~~~~
In file included from video.c:35:0:
/usr/include/x86_64-linux-gnu/libavcodec/avcodec.h:4040:6: note: declared here
 void av_free_packet(AVPacket *pkt);
      ^~~~~~~~~~~~~~
video.c:224:9: warning: ‘av_free_packet’ is deprecated [-Wdeprecated-declarations]
         av_free_packet(&packet);
         ^~~~~~~~~~~~~~
In file included from video.c:35:0:
/usr/include/x86_64-linux-gnu/libavcodec/avcodec.h:4040:6: note: declared here
 void av_free_packet(AVPacket *pkt);
      ^~~~~~~~~~~~~~
video.c:254:5: warning: ‘av_free_packet’ is deprecated [-Wdeprecated-declarations]
     av_free_packet(&packet);
     ^~~~~~~~~~~~~~
In file included from video.c:35:0:
/usr/include/x86_64-linux-gnu/libavcodec/avcodec.h:4040:6: note: declared here
 void av_free_packet(AVPacket *pkt);
      ^~~~~~~~~~~~~~
<eingebaut>: die Regel für Ziel „video.o“ scheiterte
make: *** [video.o] Fehler 1

font:width also in normal version?

i'm wondering why the method width for font objects is still only in info-beamer pi. why is this functionlity not available in the normal version?

Port to GLFW 3

As noted in issue #12, info-beamer does not compile against the latest version of GLFW (3.0, released 8 months ago). Are there any plans to port it to this version?

Fedora does not include the legacy version of this library anymore.

Build process didn't work out of the box

I tried building info-beamer from source, which kind of failed – upon manually compiling glfw3, I had to change the LDFLAGS to the following:

LDFLAGS += $(LUA_LDFLAGS) -llua5.1 -levent -lGL -lGLU -lglfw3 -lGLEW -lftgl -lIL -lILU -lavformat -lavcodec -lavutil -lswscale -lz -lm -ldl -lXi -lXinerama -lX11 -lXcursor -lXxf86vm -lXrandr -lpthread

Did I do anything out of the ordinary here?

glGetError 0x505 on info-beamer PI 0.8.3-beta.56735f

I'm in the process of evaluating info-beamer-pi for our association. So (based on example code) I put together this visualisation:

gl.setup(NATIVE_WIDTH, NATIVE_HEIGHT)

function rotate(degree)
    if degree == 0 then
        return function() end
    elseif degree == 90 then
        WIDTH, HEIGHT = HEIGHT, WIDTH
        return function()
            gl.translate(HEIGHT, 0)
            gl.rotate(90, 0, 0, 1)
        end
    elseif degree == 180 then
        return function()
            gl.translate(WIDTH, HEIGHT)
            gl.rotate(180, 0, 0, 1)
        end
    elseif degree == 270 then
        WIDTH, HEIGHT = HEIGHT, WIDTH
        return function()
            gl.translate(0, WIDTH)
            gl.rotate(-90, 0, 0, 1)
        end
    else
        error("unsupported rotation")
    end
end

function mirror(fn)
    return function()
        fn()
        gl.translate(WIDTH, 0)
        gl.scale(-1, 1)
    end
end

-- local screen_setup = mirror(rotate(270))
local screen_setup = rotate(270)
-- local screen_setup = rotate(0)

-- local font = resource.load_font("silkscreen.ttf")

local distort_shader = resource.create_shader([[
    uniform sampler2D Texture;
    varying vec2 TexCoord;
    uniform vec4 Color;
    uniform float effect;
    void main() {
        vec2 uv = TexCoord.st;
        vec4 col;
        col.r = texture2D(Texture,vec2(uv.x+effect+sin(uv.y*20.0*effect)*0.02,uv.y)).r;
        col.g = texture2D(Texture,vec2(uv.x+effect+sin(uv.y*30.0*effect)*0.02,uv.y)).g;
        col.b = texture2D(Texture,vec2(uv.x-effect+sin(uv.y*40.0*effect)*0.02,uv.y)).b;
        col.a = texture2D(Texture,vec2(uv.x,uv.y)).a;
        gl_FragColor = Color * col;
    }
]])


local images
local current_image_idx

function alphanumsort(o)
    local function padnum(d) return ("%03d%s"):format(#d, d) end
    table.sort(o, function(a,b)
        return tostring(a):gsub("%d+",padnum) < tostring(b):gsub("%d+",padnum) 
    end)
    return o
end

function init_images()
    images = {}
    for name, _ in pairs(CONTENTS) do
        if name:match(".*jpg") or name:match(".*png") then
            images[#images+1] = name
        end
    end
    current_image_idx = 0
    images = alphanumsort(images)
    -- pp(images)
end


node.event("content_update", init_images)
node.event("content_remove", init_images)

init_images()

function PicRotation(x1, y1, x2, y2, time)
    local image
    function next_image()
        current_image_idx = current_image_idx + 1
        if current_image_idx > #images then
            current_image_idx = 1
        end
        image = resource.load_image(images[current_image_idx])
        switch = sys.now() + time
    end

    next_image()

    local switch_time = 0.2

    function draw()
        local remaining = switch - sys.now()
        local abs = 10
        if remaining < switch_time then 
            abs = switch_time - remaining
        end
        if remaining > time - switch_time then
            abs = remaining - time + switch_time
        end
        if abs < switch_time then
            abs = abs / switch_time
            distort_shader:use{
                effect = abs * 10 * math.sin(sys.now()) * 3;
            }
        end
            util.draw_correct(image, x1, y1, x2, y2)
        distort_shader:deactivate()
        if sys.now() > switch then
            next_image()
        end
    end

    return {
        draw = draw;
    }
end


-- function PicRotation(x1, y1, x2, y2, time)
local pic = PicRotation(0, 0, WIDTH, HEIGHT, 8)

function node.render()
    screen_setup()
    pic:draw()
end

In the directory there are 6 .png images each about 1.1 MB in size and 1050x1680 / 1050x1650 in resolution. On my desktop with Info Beamer 1.0pre4.fca06c+Lua 5.1 the visualisation works as expected, but with the Pi 1 B (with gpu_mem=192) I encounter this glGetError 0x505 error:

pi@raspberrypi ~/pLAN2 $ INFOBEAMER_FULLSCREEN=1 ../info-beamer-pi/info-beamer  .
Info Beamer PI 0.8.3-beta.56735f (https://info-beamer.com)
Copyright (c) 2015, Florian Wesch <[email protected]>

info-beamer for the raspberry pi is free for private use. If you
would like to make use of this software in a commercial way, you
must buy a license which will support the continued development.
See https://info-beamer.com/pi for more information.  Thank you!

[main.c] root node is pLAN2
[main.c] loading nodes
[pLAN2] update +02_Gamingcafe.png (search)
[pLAN2] update +04_Socialmediashit.png (search)
[pLAN2] update +03_PreislisteLAN.png (search)
[pLAN2] update +06_NextLAN.png (search)
[pLAN2] update +01_PreislisteLAN.png (search)
[pLAN2] update +05_PreislisteLAN.png (search)
[pLAN2] update +node.lua (search)
[image.c] loading pLAN2/01_PreislisteLAN.png
[main.c] initialization completed
[image.c] loading pLAN2/01_PreislisteLAN.png

    uptime 10s, cpu 1s+0s, rss 20840kb, temp=49.2'C
   mem   fps  width height    cpu flag  name (alias)
-----------------------------------------------------
 115kb  59.0   1680   1050   2.6%  R-s  '- pLAN2 (-)
----------------------------------------------------

[image.c] loading pLAN2/02_Gamingcafe.png

    uptime 20s, cpu 2s+0s, rss 20980kb, temp=50.8'C
   mem   fps  width height    cpu flag  name (alias)
-----------------------------------------------------
 119kb  59.5   1680   1050   1.6%  R-s  '- pLAN2 (-)
----------------------------------------------------

[image.c] loading pLAN2/03_PreislisteLAN.png

    uptime 30s, cpu 2s+0s, rss 20980kb, temp=51.4'C
   mem   fps  width height    cpu flag  name (alias)
-----------------------------------------------------
 122kb  59.5   1680   1050   1.4%  R-s  '- pLAN2 (-)
----------------------------------------------------

[image.c] loading pLAN2/04_Socialmediashit.png

    uptime 40s, cpu 3s+1s, rss 21064kb, temp=51.9'C
   mem   fps  width height    cpu flag  name (alias)
-----------------------------------------------------
 124kb  59.5   1680   1050   1.5%  R-s  '- pLAN2 (-)
----------------------------------------------------

[image.c] loading pLAN2/05_PreislisteLAN.png
[image.c] loading pLAN2/06_NextLAN.png

    uptime 50s, cpu 4s+1s, rss 21064kb, temp=51.4'C
   mem   fps  width height    cpu flag  name (alias)
-----------------------------------------------------
 129kb  59.0   1680   1050   1.8%  R-s  '- pLAN2 (-)
----------------------------------------------------

[image.c] loading pLAN2/01_PreislisteLAN.png

    uptime 60s, cpu 5s+1s, rss 21064kb, temp=53.0'C
   mem   fps  width height    cpu flag  name (alias)
-----------------------------------------------------
 131kb  59.4   1680   1050   1.4%  R-s  '- pLAN2 (-)
----------------------------------------------------

[image.c] loading pLAN2/02_Gamingcafe.png

[...]

[image.c] loading pLAN2/06_NextLAN.png

    uptime 150s, cpu 13s+3s, rss 21112kb, temp=55.1'C
   mem   fps  width height    cpu flag  name (alias)
-----------------------------------------------------
 156kb  59.4   1680   1050   1.4%  R-s  '- pLAN2 (-)
----------------------------------------------------

[image.c] loading pLAN2/01_PreislisteLAN.png

    uptime 160s, cpu 14s+3s, rss 21112kb, temp=55.1'C
   mem   fps  width height    cpu flag  name (alias)
-----------------------------------------------------
 162kb  59.5   1680   1050   1.5%  R-s  '- pLAN2 (-)
----------------------------------------------------

[image.c] loading pLAN2/02_Gamingcafe.png
[image.c] loading pLAN2/03_PreislisteLAN.png
glGetError 0x505
[pLAN2] runtime error: pLAN2/node.lua:121: image loaders failed to parse this image format
stack traceback:
        [C]: in function 'draw_correct'
        pLAN2/node.lua:121: in function 'draw'
        pLAN2/node.lua:139: in function <pLAN2/node.lua:137>
        bundled userlib.lua:616: in function <bundled userlib.lua:613>

    uptime 170s, cpu 15s+4s, rss 21128kb, temp=54.6'C
   mem   fps  width height    cpu flag  name (alias)
-----------------------------------------------------
 168kb  59.2   1680   1050   1.9%  REs  '- pLAN2 (-)
----------------------------------------------------


    uptime 180s, cpu 16s+4s, rss 21128kb, temp=53.0'C
   mem   fps  width height    cpu flag  name (alias)
-----------------------------------------------------
 169kb  60.0   1680   1050   3.0%  REs  '- pLAN2 (-)
----------------------------------------------------

[...]

[main.c] terminating...
[main.c] That's all. Have a nice day

Might there be some problem with freeing (or reusing) oGL texture memory?

audio hdmi not working

hello, i've launched info-beamer to play a playlist of videos, but the audio not working:
the script:
export INFOBEAMER_ADDR=0
export INFOBEAMER_THREAD_POOL=12
export INFOBEAMER_AUDIO_TARGET=hdmi
./info-beamer video/

glfw.h not found

Compiling fails on my Arch System.

As of some update on my Arch system a while ago, there is no GL/glfw.h but only GLFW/glfw3.h. There also seem to be some API changes, as changing the includes in font.c, shader.c and main.c does not result in a successful compilation.

Here is the original error:

% makepkg 
==> Making package: info-beamer-git 20130216-1 (So 8. Sep 19:41:34 CEST 2013)
==> Checking runtime dependencies...
==> Checking buildtime dependencies...
==> Retrieving sources...
  -> Updating info-beamer git repo...
Fetching origin
==> Validating source files with md5sums...
    info-beamer ... Skipped
==> Extracting sources...
  -> Creating working copy of info-beamer git repo...
Cloning into 'info-beamer'...
done.
==> Removing existing pkg/ directory...
==> Starting build()...
cc bin2c.c -o bin2c
cc -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -DVERSION='"1.0pre3.d27c0f"' -I/usr/include/lua5.1 -I/usr/include/freetype2/ -I/usr/include/ffmpeg -std=c99 -Wall -D_FORTIF
Y_SOURCE=2  -c -o image.o image.c
cc -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -DVERSION='"1.0pre3.d27c0f"' -I/usr/include/lua5.1 -I/usr/include/freetype2/ -I/usr/include/ffmpeg -std=c99 -Wall -D_FORTIF
Y_SOURCE=2  -c -o font.o font.c
font.c:8:21: fatal error: GL/glfw.h: No such file or directory
 #include <GL/glfw.h>
                     ^
compilation terminated.
make: *** [font.o] Error 1
make: *** Waiting for unfinished jobs....
==> ERROR: A failure occurred in build().
    Aborting...

Question/Informational: child nodes allocation permanent ressources?

hi,
i am using the room-cycling example (from here) and added two nodes, playing a video in a loop.
i am not aware, if the looping video blocks permanent ressources, it the room-cycling.lua switches the nodes. to put it the other way: are the nodes allocating resources on my raspberry, even if i dont see them? or only, if they are switched on?

i ask this, because i considered as a next step to have more nodes with playing video-files and cylcle/switch trough them on my raspberry.

i observed somehow display-issues/performance lacks

while playing 8 rtsp-streams simultaneously, while the same streams played fine with omxplayer. maybe this is another issue, but you could help me in advising how to cycle through videos with saving resouces. (may to release/kill them, but can i still switch to nodes with looping videos?

OSC/UDP commands on PI

I'm having trouble receiving OSC on raspberry pi 2 v0.9.4. The short version is I'm trying to send a next command via OSC for the video playlist. Any guidance is appreciated

Assigning a different path?

Since, I was told to post this here (via twitter)...

Is it possible to store the "node.lua" in one folder, but have all the content in another?
I'm using the photos-fade script, but would like to have the script look in another folder/path for the photos instead of local.
Thanks!

failed to open vchiq instance

I installed info-beamer-pi on a Pi 2 with Raspbian Jessie, making sure to install the dependencies listed in the readme using apt-get. Then, running ./info-beamer samples/hello or ./info-beamer samples/shader produces the following output:

./info-beamer samples/shader                                                                                                                         [needrestart: unknown][exit: 255]
Info Beamer PI 0.9.6-beta.e99f2f~jessie (https://info-beamer.com)
Copyright (c) 2012-2016, Florian Wesch <[email protected]>

info-beamer for the raspberry pi is free for private use. If you
would like to make use of this software in a commercial way, you
must buy a license which will support the continued development.
See https://info-beamer.com/pi for more information.  Thank you!

[main.c] root node is hello
* failed to open vchiq instance

Cannot load rtsp stream on OSE edition

Hi,
I'm trying to get an rtsp stream running. I tried to use the code from #55 and #54 but it doesn't seem to work here on my desktop pc.

I have a single node with this code:

gl.setup(480, 800)
local video = util.videoplayer("rtsp://10.20.20.35/stream1")

function node.render()
    video:draw( 0, 0, 352, 288, 1)
end

I have set the INFOBEAMER_OUTSIDE_SOURCES=1 variable and when running I get the following output:

Info Beamer 1.0pre4.47a5ea+Lua 5.1 (http://info-beamer.org/)
Copyright (c) 2015 Florian Wesch <[email protected]>

[main.c] chdir /home/user/Repos/info-beamer-nodes
[main.c] root node is test
[main.c] tcp/udp port is 4444
[main.c] initial size is 1024x768
[test] kernel: booting node
[test] runtime error: userlib.lua:13: bad argument #1 to 'load_video' (invalid resource name)
stack traceback:
	[C]: in function 'load_video'
	userlib.lua:13: in function 'open_stream'
	userlib.lua:20: in function 'videoplayer'
	troopers/node.lua:2: in main chunk
	kernel.lua:393: in function 'load_into_sandbox'
	kernel.lua:410: in function 'reload'
	kernel.lua:437: in function <kernel.lua:434>
[main.c] initialization completed
[framebuffer.c] new framebuffer (480x800): 1
[framebuffer.c] new framebuffer (480x800): 2

Well as the message reads, it doesn't seem to like the URL I use for the stream, though it seems @ozett (from the mentioned issues above) did it get running. It also won't work with resources.load_video()
I tried to run in on my device (Arch Linux, info-beamer installed from AUR) and on a virtual machine with Linux Mint installed (also info-beamer was installed from the repos)

video in root-node not working correct, better in child node. but doku says use root-node

hi,
as i follow the dokumentation, i would stick to one root-node.

zwischenablage01

i try to display a videostream, but as i try this like

video01 = resource.load_video("rtsp://192.168.14.98/4")
util.draw_correct(video01,10,10,362,298,1)

it shows getting rtsp-data, but no image on screen.

if i put this into a child-node and call the child from the root with,

util.draw_correct(resource.render_child("cam-hof2"),10,10,362,298,0.7)

and this is the child:

gl.setup(480, 800)
local video = util.videoplayer("rtsp://192.168.14.98/4")

function node.render()
    video:draw( 0, 0, 352, 288, 1)
end

it is working fine 😵


as the doku advises me to stay into root,

zwischenablage01

but it runs better in child. Some advise for best practice this?
🤝

Add option to rotate the whole screen

Maybe I've missed the relevant part of the documentation, but I wonder if there is an environment variable to tell info-beamer that the display screen is oriented in portrait rather than in landscape mode. Also the option to mirror the image in either direction might be useful for back projection displays.

layers for nodes? can i adress or change layer-level on raspberry-pi ?

hi,
i am not good in coding, but playing basic functions with info-beamer.
i love it! 😄

first i wanted to beg for a cycling-function in the videoplaylist-sample.
than i found the room-cycler fragment, copied nodes (i.e. videoplaylist with one stream)
into it and now i can cycle between my RTSP webcam screens. WOW.
i played with background and transparancy. really cool.
with omxplayer i had with 192MB GPU split-screen-setting max 8 windows/streams.
i will come to a test with info-beamer, if he beats this.

BUT in the meantime my question:
can i set layer-level for different nodes?

what i want to achieve is playing RTSP streams on different layer with transparency, pop them up and vanish them on different layer.

may help me roughly going this direction? or layers are not adressable "inside" info-beamer nodes?

cant run on native ubuntu 16.04

hi,

im trying to run info-beamer opensource on a native ubuntu server 16.04 machine. I read somewhere, that info-beamer can run without X, or is this only valid for the rpi version?

i downloaded the prerequisites according to the docs and built the software with debug via

DEBUG="1" make

im logged in via ssh as root, the output i get is

root@host:/opt/info-beamer# ./info-beamer samples/
Info Beamer 1.0pre4.47a5ea+Lua 5.1 (http://info-beamer.org/)
Copyright (c) 2015 Florian Wesch [email protected]

[main.c] chdir /opt/info-beamer
[main.c] root node is samples
[main.c] tcp/udp port is 4444
CRITICAL ERROR: cannot initialize glfw

with the lua version beeing

root@host:/opt/info-beamer# lua -v
Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Rio

and graphics hardware

root@host:/opt/info-beamer# lspci | grep VGA
01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] RV516 [Radeon X1300/X1550 Series]

after applying pull request #56 i see

glfw error 65544 (X11: The DISPLAY environment variable is missing)

so X is required?

running Xvfb and exporting the display variable, i get

root@host:/opt/info-beamer# export DISPLAY=:0
...
glfw error 65544 (X11: RandR gamma ramp support seems broken)
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
[main.c] initial size is 1024x768
glfw error 65545 (GLX: Failed to find a suitable GLXFBConfig)
CRITICAL ERROR: cannot open window

After i install xorg, i get

CRITICAL ERROR: need opengl 3.0 support

so i checked my openGL info

root@host:/opt/info-beamer# glxinfo | grep -i "opengl"
OpenGL vendor string: X.Org R300 Project
OpenGL renderer string: Gallium 0.4 on ATI RV515
OpenGL version string: 2.1 Mesa 12.0.6
OpenGL shading language version string: 1.20
OpenGL ES profile version string: OpenGL ES 2.0 Mesa 12.0.6
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 1.0.16

what would be the minimal requirement to get similar behaviour to the rpi version? I dont want a desktop environment but have the system start directly into info-beamer.

Migration to libav10

At the moment info-beamer fails to compile with libav10. r_frame_rate has become avg_frame_rate and avcodec_alloc_frame has been deprecated in favour of av_frame_alloc.

video.c: In function ‘video_open’: video.c:135:41: error: ‘AVStream’ has no member named ‘r_frame_rate’ if ((stream->time_base.den != stream->r_frame_rate.num) || ^ video.c:136:45: error: ‘AVStream’ has no member named ‘r_frame_rate’ (stream->time_base.num != stream->r_frame_rate.den)) { ^ video.c:137:34: error: ‘AVStream’ has no member named ‘r_frame_rate’ video->fps = 1.0 / stream->r_frame_rate.den * stream->r_frame_rate.num; ^ video.c:137:61: error: ‘AVStream’ has no member named ‘r_frame_rate’ video->fps = 1.0 / stream->r_frame_rate.den * stream->r_frame_rate.num; ^ video.c:144:5: warning: ‘avcodec_alloc_frame’ is deprecated (declared at /usr/include/libavcodec/avcodec.h:3114) [-Wdeprecated-declarations] video->raw_frame = avcodec_alloc_frame(); ^
video.c:145:5: warning: ‘avcodec_alloc_frame’ is deprecated (declared at /usr/include/libavcodec/avcodec.h:3114) [-Wdeprecated-declarations]
video->scaled_frame = avcodec_alloc_frame();
^
Also see https://wiki.libav.org/Migration/10

Autoloader-Probleme mit Files mit Bindestrich im Namen

Ich habe diverse Grafiken welche (leider dynamisch, daher wenig Einfluss auf die Dateinamen möglich) einen Bindestrich im Namen tragen. Der Autoloader erfasst diese augenscheinlich auch korrekt

[mvgdefas] loader: updated U-Bahn (triggered by U-Bahn.gif)
[mvgdefas] loader: updated T-20 (triggered by T-20.gif)
[mvgdefas] loader: updated U-2 (triggered by U-2.gif)
[mvgdefas] loader: updated S-154 (triggered by S-154.gif)

Doch irgendwo scheint Infobeamer da sich daran zu verhaspeln und dann nicht die Bilder unter ihrem entsprechenden Namen bereitzustellen...

playing RTSP stream -- with buffer possible?

thanks for helping me starting...
still love info-beamer, now getting videos from my rtsp-cams to work in overlay as child-nodes..
if i do this with more than one videostream, i am starting to get missing packets..

i did this before with omxplayer, it was possible to give a cache-option (" --video_queue 10") and i was able to get 8 windows/streams together with only some small lack/missing packets..

omxplayer --layer -2 --adev local -n 1 --win '15 50 367 248' --crop '200 10 600 500' --stats --vol 0 --video_queue 10 --timeout 30 rtsp://192.168.14.105:7070/track2

is there also a buffer option for info-beamer and video.resource as RTSP?
may you consider building one? 😄

i start this way:

INFOBEAMER_SWAP_INTERVAL=3 INFOBEAMER_TRANSPARENT=1 INFOBEAMER_OUTSIDE_SOURCES=1 ./info-beamer samples2/29c3-room-cycler/

or i am going architectural totally wrong (as i am still a noob..) 😄

zwischenablage01

Does not build on sabayon/gentoo

I tried to compile info-beamer on sabayon (result is expected to be the same on gentoo). I installed glfw-3.0.4 and devil-1.7.8 from portage and then cloned the repository.

First thing I noticed:

#include <GL/glfw.h>

should rather be

#include <GLFW/glfw3.h>

but even then I get these errors:
https://gist.github.com/jamasi/b87bf40e69c9610e3a60

main.c:1159:22: Fehler: expected »=«, »,«, »;«, »asm« or »__attribute__« before »reshape«
 static void GLFWCALL reshape(int width, int height) {
                      ^

using layer on raspberry?

hi,
i like info-beamer and started playing with it.
i have omx-player displaying my webcams (which has runtime option for layers),
and let infobeamer display the samples clock over it.

now i wanted to play with layer, but did not found more doku or hints on the website.

is there an option to chose a certain layer for infobeamer?
can i have two instances on different layer?

your blog-post annouced some more information with videos on different layer, but it seems you never coded/posted more of this?

In a future blog post (follow @infobeamer on twitter to get notified when it's out) I'll talk about how to render videos into their own layer.

it would be thankful for some hints to investigate the layer possibilties of this wonderful software...
tanks, ozett

Horizontally flipped video on Raspberry Pi version

Installed the Raspberry Pi version to fresh Raspbian install with following.

sudo rpi-update
sudo apt-get install -y libavformat53
wget http://dividuum.de/download/info-beamer/info-beamer-pi-0.7-beta.5da97d.tar.gz
tar -xzvf info-beamer-pi-0.7-beta.5da97d.tar.gz

Using the videolist example and Big Bunny trailer. Video plays fine with 60fps. Problem is the video is horizontally flipped. Problem only exists with Nodes which play videos. Problem exist with all video files I have tried. Videos work ok with omxplayer.

When starting Info Beamer it spits out the these messages.

Image load sometimes fails

I've running info-beamer on a pi and fetch a remote image via cron and then render it within the node. Sometimes the image can't be loaded (eventually while written?). Sometimes the system recovers itself and shows the image again. Sometimes it stays in this mode.

So how do I prevent this - can I catch this and clean up somehow? So next cycle works again or keep the old image in case the new one can not be loaded?

Following setup:

cronjob:
*/1 * * * * wget http://www.mydomain/image.jpg -O /home/pi/info-beamer-pi/info-beamer-nodes/mytest/image.jpg

node.lua:

gl.setup(NATIVE_WIDTH, NATIVE_HEIGHT)
local background = resource.load_image("image.jpg")

util.file_watch("image.jpg", function(content)
    background = resource.load_image("image.jpg")
    return background
end)

function node.render()
    gl.clear(0, 0.423, 0.694, 1)
    background:draw(110,550,WIDTH-100,HEIGHT-150, 0.8)
end

Normal behavior output:

[mytest] update +image.jpg (write closed)
[image.c] loading mytest/image.jpg
[image.c] mytest/image.jpg is 640x480

Error behavior output:

[mytest] update +image.jpg (write closed)
[image.c] loading mytest/image.jpg
[image.c] mytest/image.jpg is 640x480
glGetError 0x505

Sometimes I get in addition:

[mytest] runtime error: mytest/node.lua:17: cannot render child to image: out of memory
stack traceback:
        [C]: in function 'render_child'
        mytest/node.lua:17: in function <mytest/node.lua:10>
        bundled userlib.lua:616: in function <bundled userlib.lua:613>
glGetError 0x505
glGetError 0x505
glGetError 0x505

[mytest] runtime error: mytest/node.lua:14: image loaders failed to parse this image format
stack traceback:
        [C]: in function 'draw'
        mytest/node.lua:14: in function <mytest/node.lua:10>
        bundled userlib.lua:616: in function <bundled userlib.lua:613>

use core profile OpenGL

This is more a of a question, not an actual issue / bug report:

I 've noticed immediate mode /compatibility profile is used in the code (e.g. glVertex in image.c, video.c rendering). Can these be replaced with core profile OpenGL e.g. VBOs? Do you expect a performance increase if this is attempted i.e. would a version using non-compatibility OpenGL 3.0 offer better performance than the current github version (for PC hardware)?

Also: In general it would be useful for volunteers to have a TODO file for possible performance optimizations (such as this question) and for new features.

CRITICAL ERROR: need opengl 3.0 support

I installed the open source edition on Ubuntu 14.04 (although did have troubles with dependencies installation).

When i run ./info-beamer samples/hello
I get the following output:

Info Beamer 1.0pre4.47a5ea+Lua 5.1 (http://info-beamer.org/)
Copyright (c) 2015 Florian Wesch <[email protected]>

[main.c] chdir /home/denys/info-beamer/samples
[main.c] root node is hello
[main.c] tcp/udp port is 4444
[main.c] initial size is 1024x768
CRITICAL ERROR: need opengl 3.0 support

Any suggestions on how to fix it ?

Not rendering anything

I installed every dependency, cloned the repo in my desktop, built it through the make command, and ran every sample and nothing shows up in the pop up, am I doing something wrong?

I'm running Ubuntu 16.04 LTS on a mid-2009 MacBook Pro.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.