Giter Site home page Giter Site logo

grvydev / project-lightspeed Goto Github PK

View Code? Open in Web Editor NEW
3.6K 3.6K 137.0 969 KB

A self contained OBS -> FTL -> WebRTC live streaming server. Comprised of 3 parts once configured anyone can achieve sub-second OBS to the browser livestreaming

License: MIT License

Shell 9.76% Dockerfile 2.01% HTML 3.01% JavaScript 23.01% CSS 0.54% Rust 33.06% Go 28.60%

project-lightspeed's People

Contributors

cmaddick avatar crowdedlight avatar enigmacurry avatar grvydev avatar johnmclear avatar lunaphied avatar mensinda avatar nitrag avatar r4rdsn avatar spoopytim avatar taq5z6ee 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  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

project-lightspeed's Issues

Feature: Remote Desktop Control

Request Desktop Control

One feature I think would be neat, but not sure how easy or hard it would be to implement, is to have a VNC like experience with keyboard and mouse control.

Feature: Quality Picker

A QoL thing we're all used to is automatic and or manual quality selection.
At the expense of encoding additional video feeds a selection menu that lets the user choose which quality they want to use eg. 480, 720, 1080p etc etc.

Feature: Payments / SuperChats?

I see a lot of similar projects popping up and I'm still trying to brainstorm the best route to take for a SuperChats alternative for self-hosted streams. How can participants help the artist? OBS plugins? All ideas welcome :)
Thanks!

WebRTC Stream not playing on IOS 15+

Attempts so far:

  • Multiple phones
  • Experimental WebRTC settings in safari

With this we can assume that its a problem related to IOS 15
Confirmed to work on M1 Macbook

This is the common error between all devices
image

External Information
OvenMediaEngine managed to fix this issue but the solution seems a bit random, it seems to have something to do with tcp packets being fragmented due to bad threading
The issue in question: AirenSoft/OvenMediaEngine#517
The solution: AirenSoft/OvenMediaEngine@e3ba399

lightspeed-ingest error, stream fails to load

receive this error once instructions were followed + software installled

"10:21:28 [ERROR] Invalid attribute command. Attribute parsing failed. Key was "GET / HTTP/1.1\r\nHost", Value was ""

static page is served on port 90, not sure if that changes other factors?

very new to tthis

later errrors:

"10:25:24 [ERROR] There was a socket reading error
10:25:24 [ERROR] Nothing received from the frame
10:25:55 [ERROR] There was an error Io(Custom { kind: Other, error: "bytes remaining on stream" })
10:25:55 [ERROR] Nothing received from the frame
"
not sure if a concern.

thanks!

Video framerate is very low, image doesn't update often

Hello!

First of all, thanks for this project. I think it's gonna be awesome. But, at the moment, I am having a problem.

I have set up Lightspeed on a digitalocean droplet using the Ubuntu installer, and everything seems to be "working", but the video is very choppy. See below video; I am watching a youtube video on the left and the right shows how it looks in lightspeed.

lightspeed.mp4

Here is a screenshot of my OBS options:

obs64_2021-01-14_04-37-39

And the output resolution is set to 1080p.

I am using Chrome 87.4280.141 and OBS 26.1.1.

Docker + Docker Compose

Docker + Docker Compose

The project deployment needs to be simplified with a docker and docker-compose structure. We need a pull request to address adding this as a first class support model.

Feature: Discord Integration

Would be great to use this for streaming for private Discord servers, I would need:

  • Synchronised live Discord chat using webhooks to send messages to an existing channel from the web interface and a bot to read them (unless you have a better method).
  • Authentication through Discord guild, a bot checks if a user is a member of the guild before allowing access to chat and stream.
  • List of currently watching members, like a list of profile icons at the bottom.

For all this frontend stuff I use this currently: https://github.com/streamnight/StreamNight
Doesn't include a solution for encoding and distributing video though so its' not as self-contained as yours could be.

Looks very promising best of luck to you :D

Feature: 10-bit HEVC + OPUS streaming

Right now, it's possible to stream (to for example youtube or twitch) by encoding a video in advance and steaming with ffmpeg -re -i input.mkv -c copy -f flv rtmp://{url}. However, right now, twitch (for example) only supports 8-bit h.264 and AAC. Youtube, in a sort of unofficial way, also allows streaming with HEVC (I think with HLS) but it transcodes the video so the quality is usually worse than h.264 on twitch anyways.

For the best possible quality, it would be amazing if lightspeed could support 10-bit (or even 8-bit would be an upgrade) HEVC streaming with the OPUS audio codec. Opus is, right now, the best lossy audio codec, and can reach transparency at pretty low bitrates (much lower than AAC can anyway, even with the apple AAC encoder, not to mention opusenc also generally encodes faster than the AAC encoders out there).

Feedback on the setup

I wanted to get this running locally for fun. Had a few snafus so just providing feedback to perhaps help the readme's. (Unfortunately I don't have the time to make the changes myself.)

  • meta: Getting everything up and running on localhost/127.0.0.1 seems like the first step, so perhaps all the docs/defaults should start you there, before you deploy things
  • the ws port is hardcoded, but I didn't expect that. Might as well add some comments in wsUrl.js to indicate that 8080 is hardcoded as the ws port in ls-webrtc
  • in the services.json i tried http://localhost and http://localhost:8084 and rtmp://127.0.0.1 and none worked. finally just tried 127.0.0.1 and it worked. your docs kinda suggest "just" the IP but since it was different then the rest of the server urls in services.json i wasn't sure. also i was surprised there was no port indicated here.
  • in my already locally installed version of serve (6.4.9) the port flag is is -p not -l. shrug.
  • i still don't really understand how the injest server communicates with lightspeed-webrtc (is it the 65534 port i saw in the source?).. but tbh a user probably doesn't need to understand this bit 😛
    . It just stood out since I was manually matching up IPs and ports across the other parts, and this one seemed to work automagically.
    • can ls-webrtc output a log entry when it is 'connected' to the injest server? would be nice just to confirm that bit is working.
  • the "View demo" link in all 4 readmes don't point to what i expected. :) in -injest, it just points to the root of -injest. even the project-ls readme it just points to itself. I wouldn't really call that a "demo", more just the "Project Overview" perhaps.. or "overview documentation". but i certainly preferred using the aggregated docs instead of visiting each. ;)

anyway..

nice job on all this. it was fun to get going. :)

Screen Shot 2021-01-04 at 3 55 21 PM

Can't get Video Stream over network (public domain)

I patch the webrtc with the pr for wss

and add a SSL Cert.

All looks great, Websocket commucation is loaded, but the Video Stream isn't shown.

Used the docker-compose file with my modifed webrtc version.

Info: The Future of FTL

Hi there!

I was crawling through everything around the tech used in Lightspeed.
I even found obsproject/obs-studio#3881 by @GRVYDEV

As I am somewhat a packaging freak I brought FTL to Arch Linux today with the AUR package obs-studio-ftl.
To get this upstream into Arch I planned to upstream my changes needed for packaging in OBS: obsproject/obs-studio#4018

But looking at comments in my PR, as well as this PR it seems as if FTL is going to be removed soon-ish from OBS, as it is unmaintained and there are competing protocols trying to achieve the same goals.

Therefore I want to propose to move away from FTL to SRT, which could be a really good replacement, that's already supported in OBS through ffmpeg.

To be honest this is really a bummer as Lightspeed is really amazing software. But building on a wonky foundation would probably make maintaining this more and more difficult over time.

There are a few SRT protocol libraries on crates.io. Notably srt-rs which procides bindings for the aforementioned SRT library.

Now I haven't researched anything regarding codecs and how easy the SRT -> WebRTC "translation" will be. I might add more details later

Feature: Multiple streams/channels

Title is really self descriptive. Would be really cool to have the ability to make multiple feeds available.

Fantastic work so far @GRVYDEV, I've been looking for something like this for a while!

Hosting the Streaming server in an offline environment

Hey There,
I am having some troubles with hosting this project in an offline environment. I am using the Docker method, but manually built, because of the background image. Besides, this I changed nothing in the config.
My issue is that the Website tries to connect to fonts.googleapis.com and kit.fontawesome.com. I was trying to download the char sets from Google and implement it local to the website, but I failed. I'm not really experienced in web development. I feeling a little bit lost...
Is there an easy way to fix this problem? 

OBS implementation instructions

As per obsproject/obs-studio#3834 , it's now possible to use OBS's custom stream output/service to push an FTL protocol feed directly (without needing to modify the "services.json" file as per current README). This only works on recent OBS releases following the PR merge, so old instructions should probably remain as well, but the integrated method is obviously a lot more convenient so that should probably be mentioned first

Feature: Chat

Chat and Communication

Can we build in real time communication using NodeBB? I'm thinking if you can find a way to sync up the time of the comments and the time of the live stream, you could keep everything in sync with something like Influx.

Webrtc Exception: RTP header size insufficient

Windows 10: When pressing "Start Streaming" in OBS the Lightspeed-webrtc crashes with the following exception:

$ lightspeed-webrtc.exe --addr=localhost
Waiting for RTP Packets
panic: size 12 < 16: RTP header size insufficient
goroutine 1 [running]:
main.main()
C:/Users/User/go/pkg/mod/github.com/!g!r!v!y!d!e!v/[email protected]/main.go:103 +0x867

Followed the instructions for installation and usage (ingest, webrtc and react running). IP adress 'localhost' in 'services.json' and as '--addr' parameter of webrtc. OBS->Settings->Stream->Service "Project Lightspeed' like seen in the screenshot. Ingest seems to be working and prints:

Listening on port 8084
Hashes match!
Client connected!
Protocol Version: 0.9
Vendor Name: OBS Studio
Vendor Version: 25.0.4
Video Codec: H264
Video Height: 720
Video Width: 1280
Audio Codec: OPUS

grafik

Ubuntu installer script assumes some components are not already installed

The Ubuntu installer script does not just install project lightspeed, it also installs the package manager version of nginx (and certbot if TLS option is chosen) and overwrites any existing setup/configuration on the system that someone might have.

Lost my whole nginx configuration because there was no warning, it just went and overwrote it, I thought I was installing lightspeed :)

Please make this optional so that if anyone attempts this script on not a fresh system, their existing configs don't get silently obliterated

Also, when certbot realized my domain was already set up, it hit a snag and the installation script didn't complete.

Info: Discord Server is now LIVE! Demo video is also now LIVE!

Hey guys!
I went ahead and made a Discord server so we have a better place for bug fixing and technical support. I will be looking for some moderators so if you are interested feel free to join and message me! Also if you are having any trouble please join the server and I will do my best to help you work through it!

Edit: I also finally made a demo video! The demo link now works on all 4 repositories!

Edit Edit: I uploaded the wrong video so right now there is no sound. New one is uploading right now!

Server

Feature: Static Marketing Website

I would love it if someone created a static website that explains about Project Lightspeed and also provides links to the repositories etc. I have a bunch of other things I need to work on right now so I wont be able to get to this for a little bit

Future: Static site streams

On the static site allow multiple people to stream for free with a limit of 30 minutes. This will come after we implement multi-streaming functionality. In the meantime we can have a test stream running there for demonstration purposes.

Security Issue: default stream key?

Hey,

i'm not sure if i do understand that right, but if the stream key has a default value (in this case 123456789-aBcDeFgHiJkLmNoPqRsTuVwXyZ123456),
wouldn't it be a security issue if it is not changed before hosting Lightspeed?

I mean, if i would know some IPs that are running your software, i could easiely use the default key just to try to connect?

Maybe a random generated key (or one handled by a docker environment label) would be better?

React frontent doesn't auto-start with system/docker, only webrtc/ingest do (maybe intentional?)

After doing docker-compose up -d and rebooting the machine, on startup, only webrtc and ingest are running.

Doing docker container ls -a lists all 3, with the status for webrtc and ingest being Up n seconds, where as react has Exited (0) n minutes ago.

running sudo docker start <react container ID> or docker-compose restart starts it up with no issues, and it's exit code 0, so there's no issue with actually running the container. It does, however, still close immediately on reboot.

Is this intentional, is it expected that a user would serve the frontend themselves, or a bug?

WHIP Support

Lets implement WHIP support that will open up the possibilities in terms of sending video into lightspeed. This will allow any valid WHIP clients to send video to be broadcasted.

build error

I unfortunately have too little experience with rust, can someone help me further

THX

Build on Ubuntu 20.04.1 LTS
rustc 1.43.0

#> cargo build
...
...
Compiling tokio-stream v0.1.1
Compiling tokio-util v0.6.0
error[E0277]: the trait bound std::io::IoSlice<'_>: std::marker::Copy is not satisfied
--> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-util-0.6.0/src/lib.rs:189:30
|
189 | let mut slices = [IoSlice::new(&[]); MAX_BUFS];
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait std::marker::Copy is not implemented for std::io::IoSlice<'_>
|
= note: the Copy trait is required because the repeated element will be copied

error: aborting due to previous error

For more information about this error, try rustc --explain E0277.
error: could not compile tokio-util.

To learn more, run the command again with --verbose.
warning: build failed, waiting for other jobs to finish...
error: build failed

Video stuttering issues, any recommendations?

Hey there, I absolutely love this project! My friends and I are using it as a potential replacement for Discord Nitro, as the free streaming quality of Discord is really really bad.

The one issue we have is stuttering in the stream. Every couple seconds, there's like a quarter-second stutter in the video feed. Playing around with OBS Output settings, it seems like a higher bitrate actually lowers the amount of stuttering. Changing the keyframe interval didn't seem to do anything.

What are the possible ways of fixing this? For example, could an option be added to increase the stream delay to reduce stuttering? Right now we're getting like 250ms stream delay, but we'd be fine with up to like 750ms probably.

React not Connecting to Websocket Host

This may be related to other issues, but I didn't see the specific error that I was getting.

Mine is being run in docker-compose through Portainer (Portainer handles .env files a bit differently). I can get OBS to connect to the ingest server, I can reach the react page, but pressing play does nothing.

The webrtc logs show only Waiting for RTP Packets and not any connection.

In the browser console I am seeing the below errors. The font one is obvious and has PR waiting to fix it. The other issue I see is React trying to reach the webRTC host on the wrong address and port.

Loading failed for the <script> with source “https://kit.fontawesome.com/99754263de.js”. [10.10.10.210:8888:1:1](http://10.10.10.210:8888/)

Firefox can’t establish a connection to the server at ws://localhost:8080/websocket. [SocketContext.jsx:11:16](http://10.10.10.210:8888/static/js/context/SocketContext.jsx)
  Socket encountered error. Closing socket. [SocketContext.jsx:106:14](http://10.10.10.210:8888/static/js/context/SocketContext.jsx)
    onerror SocketContext.jsx:106

Any thoughts as to what is going on here?

.env file

WEBSOCKET_HOST=10.10.10.210
WEBSOCKET_PORT=8088
WEB_PORT=8888
INGEST_PORT=8084
STREAM_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

compose file

version: '3'

services:
  ingest:
    image: projectlightspeed/ingest
    #Uncomment below to build locally
#    image: lightspeed-ingest
#    build:
#      context: ./ingest
#      dockerfile: Dockerfile
    env_file: 'stack.env'
    restart: on-failure
    ports:
      - "8084:8084"
  
  react:
    image: projectlightspeed/react
    #Uncomment below to build locally
#    image: lightspeed-react
#    build:
#      context: ./frontend
#      dockerfile: Dockerfile
    env_file: 'stack.env'
    restart: on-failure
    ports:
      - "8888:80"

  webrtc:
    image: projectlightspeed/webrtc
    #Uncomment below to build locally
#    image: lightspeed-webrtc
#    build:
#      context: ./webrtc
#      dockerfile: Dockerfile
    env_file: 'stack.env'
    command: ["lightspeed-webrtc", "--addr=0.0.0.0", "--ip=10.10.10.210", "--ports=20000-20100", "run"]
    restart: on-failure
    ports:
      - 8088:8080 # WebRTC
      - 65535:65535/udp # RTP
      - 20000-20100:20000-20100/tcp # WebRTC PeerConnection
      - 20000-20100:20000-20100/udp # WebRTC PeerConnection UDP

About the .env file, least to know princible.

I try with my docker-compose files to explicitly give them only the environment variables they need.

Which of the environment variables is needed for which container?

I try to use the .env file only for keys/passwords :)

This is an awesome project :)

New Logo

So the current logo is not awful however I would like to incorporate a logo from the community! If you are a logo designer and would like to put one together I would really appreciate it! I would prefer to keep the current color but I am open to all ideas!

Firefox and Edge Problems

Hey,
does anyone have Problems with Playback in Firefox and Microsoft Edge? The problem appears for me in the Docker-compose installation and with the shell script. Currently, I am running the Docker Compose version.

With firefox, I get some really weird problems. In a Windows machine with version 72.0.1 installed the stream and website run just fine. When I try to run this on an Ubuntu Machine with the Firefox version 86.0 installed I can't load the stream it just trying to reconnect to the Websocket. In the Browser console it shows the error "the connection to ws://my_ip_adresse:8080/websocket was interrupted, while the page was being loaded." and "Socket encountered an error". Closing Socket.

In the container logs, it shows the message "lightspeed-webrtc | could not set remote description: unable to start track, codec is not supported by remote"

In Microsoft Edge, the page isn't working at all. In the console it shows"SCRIPT65536: The Argument isn't optional." pointed on line 260 in http://url/static/node-modules/react-dom/cjs/react-dom.production.min.js.
Docker logs:
lightspeed-react | my_ip_adresse - - [22/Mar/2021:08:14:23 +0000] "GET /static/js/2.6b14339e.chunk.js.map HTTP/1.1" 200 452018 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17763" "-"

Documentation Rework

Lets work on the documentation!

We need step-by-step installation for a basic setup with more advanced config options for expanding on the basic setup, as well as more straightforward and organised contribution guidelines.

Below is the structure that would be ideal. Feel free to suggest anything that needs adding or changing.

  • Logo
  • Badges (Discord, CI Status, Stargazers, License, PR's, Issues, Contributers)
  • Tagline
  • Table of Contents
  • Introduction
    • About
    • Use Cases & Architecture
    • Roadmap
  • Getting Started
    • Prerequisites
    • Project Structure
    • Instructions
  • Configuration
    • Environment Variables
    • Port Mappings / Firewall
    • Config File
    • CLI Usage
    • Additional Notes
  • Contributing
    • Links to other documents (PULL-REQUESTS.md, CONTRIBUTING.md, LICENSE.md)
    • Contribution Steps
  • Acknowledgements

For each point make sure that it follows these guidelines

  • Is concise and to the point (Exceptions include anything under Introduction)
  • Is gramatically correct
  • Uses good-looking markdown (where applicable)

Listening to port 8084

Hey there,
first of all, thank you for posting this project.
When I am starting the "cargo run --release" command my terminal stucks at the Message "Listening on port 8084". Is it a Network Problem or am I the Problem.

Lightspeed-React issues

Hello,
I have managed to follow everything in the installation guide and have Lightspeed-ingest working and i think Lightspeed-webRTC.
However after serving Lightspeed-React i cannot connect to the page and just get a "This Page cannot be reached" message.
I have changed the config.json wsURL to ws://10.0.0.36:8080/websocket and have opened ports on ufw . However from another machine it will not display the site.
If i add the port 8443 onto the end then sometimes it does load a blank dark grey site but nothing appears on it.
Can someone help with getting this working.

I am running Lightspeed-React on a Ubuntu 20.04 machine and running OBS and trying to access the site on a windows 10 machine.

Refactor to use Ion-SFU

Right now we are just using Pion for the WebRTC transports. We can leverage Ion SFU to take advantage of their relay logic that will hopefully help with quality of delivery

Request: Diagram of how each component interacts with the other

If you're like me and have a very basic understanding of OBS, FTL, WebRTC, etc, it would be very helpful to see how each Lightspeed component interacts with the other.

From what I could gather, the diagram looks something roughly like this: OBS <--> Ingest <--> WebRTC <---> React client

If not, then that should illustrate the need for a diagram :D

howto: can not see stream on the web page

Hi, I setup the three compents on one PC and I succeeded to push the stream to the ingest(connected log) from the OBS.
ws ip is changed to the LAN ip of this PC in src/wsUrl.js.
But when I refresh the 80 web(by access the PC LAN IP), nothing happens.

[v2] Create web SDK

Create a SDK to make it easier for folks to build their own websites with Lightspeed

  • NPM Package
  • static host

install script error

the injest server compiles fine but the webrtc one errors.. when using the script or just 'go build'

  • cd Lightspeed-webrtc
  • git checkout main
    Already on 'main'
    Your branch is up to date with 'origin/main'.
  • GO111MODULE=on
  • go build
    main.go:15:2: cannot find package "github.com/GRVYDEV/lightspeed-webrtc/ws" in any of:
    /usr/lib/go-1.10/src/github.com/GRVYDEV/lightspeed-webrtc/ws (from $GOROOT)
    /root/go/src/github.com/GRVYDEV/lightspeed-webrtc/ws (from $GOPATH)
    main.go:16:2: cannot find package "github.com/gorilla/websocket" in any of:
    /usr/lib/go-1.10/src/github.com/gorilla/websocket (from $GOROOT)
    /root/go/src/github.com/gorilla/websocket (from $GOPATH)
    main.go:18:2: cannot find package "github.com/pion/interceptor" in any of:
    /usr/lib/go-1.10/src/github.com/pion/interceptor (from $GOROOT)
    /root/go/src/github.com/pion/interceptor (from $GOPATH)
    main.go:19:2: cannot find package "github.com/pion/rtp" in any of:
    /usr/lib/go-1.10/src/github.com/pion/rtp (from $GOROOT)
    /root/go/src/github.com/pion/rtp (from $GOPATH)
    main.go:20:2: cannot find package "github.com/pion/webrtc/v3" in any of:
    /usr/lib/go-1.10/src/github.com/pion/webrtc/v3 (from $GOROOT)
    /root/go/src/github.com/pion/webrtc/v3 (from $GOPATH)

Cool Project But it has 2 or 3 issues that I encountered

I followed the instructions on the docker-compose setup.

My first Issue I noticed was stuttering in the video. It didn't happen all the time but it was noticable.

My second issue was with audio. It worked out of the box for me, however my friend couldnt get audio to work whatso ever

My third issue I encountered was that when I had 2 users already viewing the stream a third one failed to display anything.
dev console in chrome

I am running chrome version: 88.0.4324.190

obs encoder settings
obs audio settings

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.