Code Monkey home page Code Monkey logo

miroslavpejic85 / mirotalksfu Goto Github PK

View Code? Open in Web Editor NEW
1.8K 25.0 298.0 24.02 MB

πŸ† WebRTC - SFU - Simple, Secure, Scalable Real-Time Video Conferences Up to 4k, compatible with all browsers and platforms.

Home Page: https://sfu.mirotalk.com

License: GNU Affero General Public License v3.0

JavaScript 84.52% PHP 0.18% Python 0.13% Shell 0.26% HTML 10.94% CSS 3.93% Dockerfile 0.03%
sfu webrtc self-hosted voip chat docker video audio mediasoup scalable-video-conferences

mirotalksfu's Introduction

MiroTalk SFU


Free WebRTC - SFU - Simple, Secure, Scalable Real-Time Video Conferences with support for up to 4k resolution. It's compatible with all major browsers and platforms


Explore MiroTalk SFU



Join our community for questions, discussions, and support on Discord


Features
  • Is 100% Free - Open Source (AGPLv3) - Self Hosted and PWA!
  • Unlimited conference rooms with no time limitations.
  • Live broadcasting streaming.
  • Translated into 133 languages.
  • Host protection to prevent unauthorized access.
  • User auth to prevent unauthorized access.
  • JWT.io securely manages credentials for host configurations and user authentication, enhancing security and streamlining processes.
  • Room password protection.
  • Room lobby, central gathering space.
  • Room spam mitigations, focused on preventing spam.
  • Geolocation, identification or estimation of the real-world geographic location of the participants.
  • Compatible with desktop and mobile devices.
  • Optimized mobile room URL sharing.
  • Webcam streaming with front and rear camera support for mobile devices.
  • Broadcasting, distribution of audio or video content to a wide audience.
  • Crystal-clear audio streaming with speaking detection and volume indicators.
  • Screen sharing for presentations.
  • File sharing with drag-and-drop support.
  • Choose your audio input, output, and video source.
  • Supports video quality up to 4K.
  • Supports advance Picture-in-Picture (PiP) offering a more streamlined and flexible viewing experience.
  • Record your screen, audio, and video locally or on your Server.
  • Snapshot video frames and save them as PNG images.
  • Chat with an Emoji Picker for expressing feelings, private messages, Markdown support, and conversation saving.
  • ChatGPT (powered by OpenAI) for answering questions, providing information, and connecting users to relevant resources.
  • Speech recognition, execute the app features simply with your voice.
  • Push-to-talk functionality, similar to a walkie-talkie.
  • Advanced collaborative whiteboard for teachers.
  • Real-time sharing of YouTube embed videos, video files (MP4, WebM, OGG), and audio files (MP3).
  • Full-screen mode with one-click video element zooming and pin/unpin.
  • Customizable UI themes.
  • Right-click options on video elements for additional controls.
  • Supports REST API (Application Programming Interface).
  • Integration with Slack for enhanced communication.
  • Utilizes Sentry for error reporting.
  • And much more...
About
Direct Join
Host Protection Configuration

When host.protected or host.user_auth is enabled, the host/users can provide a valid token for direct joining the room as specified in the app/src/config.js file.

Params Value Description
host.protected true if protection is enabled, false if not (default false) Requires the host to provide a valid username and password during room initialization.
host.user_auth true if user authentication is required, false if not (default false). Determines whether host authentication is required.
host.users JSON array with user objects: {"username": "username", "password": "password"} List of valid host users with their credentials.

Example:

    host: {
        protected: true,
        user_auth: true,
        users: [
            {
                username: 'username',
                password: 'password',
            },
            {
                username: 'username2',
                password: 'password2',
            },
            //...
        ],
    },
Embed a meeting

To embed a meeting in your service or app using an iframe, use the following code:

<iframe
    allow="camera; microphone; display-capture; fullscreen; clipboard-read; clipboard-write; autoplay"
    src="https://sfu.mirotalk.com/newroom"
    style="height: 100vh; width: 100vw; border: 0px;"
></iframe>
Quick Start
  • Before running MiroTalk SFU, ensure you have Node.js and all requirements installed. This project has been tested with Node version 18.X.

  • Requirements install example for Ubuntu 20.04

# Gcc g++ make
$ apt-get update
$ apt-get install -y build-essential
# Python 3.8 and pip
$ DEBIAN_FRONTEND=noninteractive apt-get install -y tzdata
$ apt install -y software-properties-common
$ add-apt-repository -y ppa:deadsnakes/ppa
$ apt update
$ apt install -y python3.8 python3-pip

Install NodeJS 18.X and npm using Node Version Manager


  • Start the server
# Clone this repo
$ git clone https://github.com/miroslavpejic85/mirotalksfu.git
# Go to to dir mirotalksfu
$ cd mirotalksfu
# Copy app/src/config.template.js in app/src/config.js and edit it if needed
$ cp app/src/config.template.js app/src/config.js
# Install dependencies - be patient, the first time will take a few minutes, in the meantime have a good coffee ;)
$ npm install
# Start the server
$ npm start
# If you want to start the server on a different port than the default use an env var
$ PORT=3011 npm start

[!NOTE]

To run MiroTalk SFU on a Windows operating system, you can follow the instructions provided in this documentation.

Docker

docker

# Copy app/src/config.template.js in app/src/config.js IMPORTANT (edit it according to your needs)
$ cp app/src/config.template.js app/src/config.js
# Copy docker-compose.template.yml in docker-compose.yml and edit it if needed
$ cp docker-compose.template.yml docker-compose.yml
# (Optional) Get official image from Docker Hub
$ docker-compose pull
# Create and start containers
$ docker-compose up # -d
# To stop and remove resources
$ docker-compose down
Documentations
# The response will give you the active meetings (default disabled).
$ curl -X GET "http://localhost:3010/api/v1/meetings" -H "authorization: mirotalksfu_default_secret" -H "Content-Type: application/json"
$ curl -X GET "https://sfu.mirotalk.com/api/v1/meetings" -H "authorization: mirotalksfu_default_secret" -H "Content-Type: application/json"
# The response will give you a entrypoint / Room URL for your meeting.
$ curl -X POST "http://localhost:3010/api/v1/meeting" -H "authorization: mirotalksfu_default_secret" -H "Content-Type: application/json"
$ curl -X POST "https://sfu.mirotalk.com/api/v1/meeting" -H "authorization: mirotalksfu_default_secret" -H "Content-Type: application/json"
# The response will give you a entrypoint / URL for the direct join to the meeting.
$ curl -X POST "http://localhost:3010/api/v1/join" -H "authorization: mirotalksfu_default_secret" -H "Content-Type: application/json" --data '{"room":"test","roomPassword":"false","name":"mirotalksfu","audio":"false","video":"false","screen":"false","notify":"false"}'
$ curl -X POST "https://sfu.mirotalk.com/api/v1/join" -H "authorization: mirotalksfu_default_secret" -H "Content-Type: application/json" --data '{"room":"test","roomPassword":"false","name":"mirotalksfu","audio":"false","video":"false","screen":"false","notify":"false"}'
# The response will give you a entrypoint / URL for the direct join to the meeting with a token.
$ curl -X POST "http://localhost:3010/api/v1/join" -H "authorization: mirotalksfu_default_secret" -H "Content-Type: application/json" --data '{"room":"test","roomPassword":"false","name":"mirotalksfu","audio":"false","video":"false","screen":"false","notify":"false","token":{"username":"username","password":"password","presenter":"true", "expire":"1h"}}'
$ curl -X POST "https://sfu.mirotalk.com/api/v1/join" -H "authorization: mirotalksfu_default_secret" -H "Content-Type: application/json" --data '{"room":"test","roomPassword":"false","name":"mirotalksfu","audio":"false","video":"false","screen":"false","notify":"false","token":{"username":"username","password":"password","presenter":"true", "expire":"1h"}}'
# The response will give you a valid token for a meeting (default diabled)
$ curl -X POST "http://localhost:3010/api/v1/token" -H "authorization: mirotalksfu_default_secret" -H "Content-Type: application/json" --data '{"username":"username","password":"password","presenter":"true", "expire":"1h"}'
$ curl -X POST "https://sfu.mirotalk.com/api/v1/token" -H "authorization: mirotalksfu_default_secret" -H "Content-Type: application/json" --data '{"username":"username","password":"password","presenter":"true", "expire":"1h"}'
Hetzner & Contabo

Hetzner

This application is running for demonstration purposes on Hetzner, one of the best cloud providers and dedicated root servers.


Use my personal link to receive €⁠20 IN CLOUD CREDITS.


Contabo

Experience also top-tier German web hosting – dedicated servers, VPS, and web hosting at unbeatable prices. Reliable, secure, and backed by 24/7 support. Explore now here


To set up your own instance of MiroTalk SFU on a dedicated cloud server, please refer to our comprehensive self-hosting documentation. This guide will walk you through the process step by step, ensuring a smooth and successful deployment.

DigitalOcean

DigitalOcean Referral Badge

For personal use, you can start with a single $5 a month cloud server and scale up as needed. You can use this link to get a $100 credit for the first 60 days.

Live Demo

https://sfu.mirotalk.com

mirotalksfu-qr

Credits
Contributing
  • Contributions are welcome and greatly appreciated!
  • Just run before npm run lint
License

AGPLv3

MiroTalk SFU is free and open-source under the terms of AGPLv3 (GNU Affero General Public License v3.0). Please respect the license conditions, In particular modifications need to be free as well and made available to the public. Get a quick overview of the license at Choose an open source license.

To obtain a MiroTalk SFU license with terms different from the AGPLv3, you can conveniently make your purchase on CodeCanyon. This allows you to tailor the licensing conditions to better suit your specific requirements.

Support the project

Do you find MiroTalk SFU indispensable for your needs? Join us in supporting this transformative project by becoming a backer or sponsor. By doing so, not only will your logo prominently feature here, but you'll also drive the growth and sustainability of MiroTalk SFU. Your support is vital in ensuring that this valuable platform continues to thrive and remain accessible for all. Make an impact – back MiroTalk SFU today and be part of this exciting journey!

BroadcastX Hetzner
LuvLounge QuestionPro
BrowserStack CrystalSound
Cloudron Kiquix
Advertisers

Contabo


Diving into Additional MiroTalk Projects:

MiroTalk P2P

Try also MiroTalk P2P peer to peer real-time video conferences, optimized for small groups. Unlimited time, unlimited concurrent rooms each having 5-8 participants.

MiroTalk C2C

Try also MiroTalk C2C peer to peer real-time video conferences, optimized for cam 2 cam. Unlimited time, unlimited concurrent rooms each having 2 participants.

MiroTalk BRO

Try also MiroTalk BRO Live broadcast (peer to peer) live video, audio and screen stream to all connected users (viewers). Unlimited time, unlimited concurrent rooms each having a broadcast and many viewers.

MiroTalk WEB

Try also MiroTalk WEB a platform that allows for the management of an unlimited number of users. Each user must register with their email, username, and password, after which they gain access to their personal dashboard. Within the dashboard, users can manage their rooms and schedule meetings using the desired version of MiroTalk on a specified date and time. Invitations to these meetings can be sent via email, shared through the web browser, or sent via SMS.


This project is tested with BrowserStack.


mirotalksfu's People

Contributors

armanism24 avatar danghieu90 avatar iconio avatar loranger avatar miroslavpejic85 avatar philippdormann avatar rogerdz 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

mirotalksfu's Issues

Error installing - Cannot find module

npm start

gives

> [email protected] start /home/milton/mirotalksfu
> node app/src/Server.js

internal/modules/cjs/loader.js:638
    throw err;
    ^

Error: Cannot find module 'express'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15)
    at Function.Module._load (internal/modules/cjs/loader.js:562:25)
    at Module.require (internal/modules/cjs/loader.js:692:17)
    at require (internal/modules/cjs/helpers.js:25:18)
    at Object.<anonymous> (/home/milton/mirotalksfu/app/src/Server.js:3:17)
    at Module._compile (internal/modules/cjs/loader.js:778:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] start: `node app/src/Server.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm WARN Local package.json exists, but node_modules missing, did you mean to install?

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/milton/.npm/_logs/2021-12-19T12_26_04_751Z-debug.log

Docker - No Stun Servers Specified

I tried docker running this application on my local machine with the given steps.

The video input starts and stopped immediately.

below were the console logs:

WebRTC: ICE failed, add a STUN server and see about:webrtc for more details
Producer Transport failed RoomClient.js:272:37
Producer transport close RoomClient.js:508:25

Add gitpod to project

I wish to add gitpod to this project.
Hello sir, I think git podifying(adding git pod to this repository) will be good for beginners who have struggles having all the dependencies on our computer.

I am suggesting this because I am walking through the repository aiming at contributing, unfortunately my laptop is not that strong and i can't all dependencies so I wanted to request you if I can add gitpod to this repo

Need ScreenShare with audio

Feature request

A clear and concise description of the feature request.

Need ScreenShare with audio and add new blackbox for screenshare

How can I run the project on port 80/443?

Hi I plan to self host the project on my own domain name on port 443 and 80.
I was wondering how can I do it. I know that some ports have to ba change like port 3000 for APIs.

Thanks for your help.

How best to update?

Whats the best process to update?
Do I just download the git files again and re run the install command?
or is there another way?

how to deploy mirotalk app on cpanel and how to change host url

Hello sir,
mirotalk app working fine on my localhost but i have an issue when i deploy my app on c-panel its not working i am getting this error
(node:213) UnhandledPromiseRejectionWarning: Error: spawn /home/nexever/public_html/mirotalksfu/node_modules/mediasoup/worker/out/Release/mediasoup-worker ENOENT
at Process.ChildProcess._handle.onexit (internal/child_process.js:268:19)
at onErrorNT (internal/child_process.js:470:16)
at processTicksAndRejections (internal/process/task_queues.js:84:21)
please let me know where i am going wrong and also please let me know how can i change my app host url on live server.

Help offered

I could help with translations into Dutch and German

iPad audio set to 0 when creating room

When you create a room on an iPad the audio volume is set to 0. When you click your video feed to change the volume level your video feed freezes and can’t be recovered until you logout and in again.

I have found that if you click any videos to zoom in and out the video freezes and you can’t get the video to start again. It is stuck. Tried to stop and restart the video nothing helps except exit and enter the room again.

iPhone doesn't see video spinning blue circle

The iPhones safari don't seem to show the video feed. Other users (non-iphone) can see the iPhone video and hear. Audio works on the iPhone. The iPad works, Mac works and windows 10 works.

  • I tested mirotalk (none sfu) and the iphone works.
  • I turned off the firewall just in case that was causing it. That was not the issue either.
  • What ports are required to be opened?

Noticed the whiteboard is gone for SFU. Is there a reason?

Thanks,
IO

Feature request: some form of authentication

some form of authentication would be nice. In my case i would like to limit the creation of meetings to authenticated users, but allow guest users to join meetings when approved by the meeting owner

double click on video container video

when we click on video container then video stuck or full screen opens when we press ESC key to get back the video call the call stuck
I did a simple solution may be can work
#videoMediaContainer video set property pointer-events: none !important;

thanks

just a question

For Teaching purposes, do you think the Demo version is enough?
Or should I install it locally…

Help

How to remove your sponsor button and name from the about section please help

running mirotalk without ssl

Hello!

I would like to run Mirotalk behind a proxy server, without SSL. i tried changing the Server.js file but then i get a bunch of errors i do not understand. is there a way to do so? I would like to use Caddy/Nginx as a reverse proxy server so we can use lets encrypt certificates instead of self signed. It also allows me to use a "normal url" instead of an url with :3010 behind

Bug report - able to create room without using authentication step

Hi there

I have a server iv been setting up, i have the authentication enabled so only I can create rooms which works fine
however iv noted if you go to /join/anynamehere it will create a room with that name without the user having to authenticate

not sure if its just an issue with my install, or a bug in the code

bug found :- when we hit video button continuously

Hi @miroslavpejic85 hope you are doing well. Thanks for the amazing solution sir,
So I was testing Mirotalk Sfu and when we hit the video button 5 to 6 times continuously then another video container opened in the same room automatically.
please check the attached video file for reference

thanks :)

2022-04-14-05_36_43-REC.mp4

Deployment on render.com

Hi, I've been attempting to deploy mirotalks SFU on render.com unsuccessfully.

I followed the instruction, the deployments works but, if I test it out, only the chat is working. I have a loading spinner on other participants.

Example :

image

The URL of the tested service : https://visio.onrender.com/

Do you have any recommendation or advice to make it works?

Thank you

Not getting Other person video and Audio

I am following the guide for installation mirotalksfu on ubuntu20.04. I have valid fqdn with https.

  1. Tried on Ubuntu 20.04: No video and Audio of other person . But messages going.
  2. Tried Docker too but same issue: No video and Audio of other person
    I have not changed any config in app/src/config.template.js. What I am missing?

Users can not rejoin room

After a user leaves a running meeting, he/she can not rejoin the running meeting again. they keep seeing a black box with a circle. there's no info someone likes to join so we can't allow them again.

Enhancements

Hello Miroslav,
Great job so far, you're the best! Just want to make some feature request -

Remote screen control
Break out rooms
Real-time polls
Host & guest configuration
Only host can kick out, mute anybody, basically better permission control
Host accept & reject guest before entry

Screen share is broken

Screen share is not working on Safari. It opens, but you can't select the screen you want to share. It is also running slow.

Chrome works on Mac, and windows.

One other issue on iPad and iPhone the screen share button is present on safari? It is not present on Chrome on iOS.

Pls help me

While I am using the command npm install, it takes forever to install and ends up bringing an error.
Pls help me out

πŸ‘‰ README - Fontawesome icons blocked by CORS policy

Issue

Access to script at 'https://kit.fontawesome.com/d2f1016e6f.js' from origin 'https://YOUR-DOMAIN' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Notes

Currently to have access to the fontawesome icons you have 2 solutions:

Solution

To fix it, I created my own Free account on https://fontawesome.com/

With free account the Allowed views are 10,000 per month on sites using Font Awesome Kits.

Please change the https://kit.fontawesome.com/d2f1016e6f.js with Your Kit's Code in the Room.html

Or if you not want create an account: πŸ‘‰ 39b7734

Many thanks!

UI Enhancements similar to Mirotalk

I would like to request some UI enhancements similar to Mirotalk

  1. If the video is turned off, it would be great if we could still show the grid with the name on the screen .
    image

Love this app. This app is gonna be the next great thing !

help me install on MacOS for testing

Hi, tried several times to install, but as i'm not a *nix geek, got it wrong every time.
Trying to follow instructions on your link (mediasoup).
This is what i did so far :
https://mediasoup.org/documentation/v3/mediasoup/installation/#requirements

All platforms
    node version >= v12.0.0
    python version >= 3.6 with PIP
    GNU make
Linux, OSX and any *NIX system
    gcc and g++ >= 4.9 or clang (with C++11 support)
    cc and c++ commands (symlinks) pointing to the corresponding gcc/g++ or clang/clang++ executables.

1 installed NodeJs 16.13.2
2 installed python 3.10.2
3 installed PIP with command curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
4 already have clang 12.0.5 installed

  • so, what's this GNU make? Can't find any information on Google
  • lost for the cc and cc++ commands

Thanks for helping me out with these last two steps.
Once i get those ok, i follow the following instructions?

Clone this repo

 git clone https://github.com/miroslavpejic85/mirotalksfu.git
 # Go to to dir mirotalksfu
 cd mirotalksfu
 # Copy app/src/config.template.js in app/src/config.js and edit it if needed
 cp app/src/config.template.js app/src/config.js
 # Install dependencies
 npm install
 # Start the server
 npm start

[BUG] Full screen does not work reliably

Describe the bug

Fullscreen mode toggling for user screens not working realiably.

To Reproduce

Steps to reproduce the behavior:

  1. Start a new session
  2. Invite a friend
  3. Share your screen
  4. Let your friend click on your screen in order to 'maximize' the view
  5. Let your friend exit the fullscreen mode
  6. Now your friend should not be able to maximize the view again unless he rejoins the session

Expected behavior

Being able to consistently toggle between fullscreen and normal mode.

System

  • Browser: Firefox Developer Edition 96.0b4 (64-bit)
  • OS: Arch Linux
  • Kernel: 5.15.7-zen1-1-zen
  • Protocol: Wayland

Additional context

Bug occured when using the provided demo under sfu.mirotalk.org. I did not test it when self-hosted.

Record participants audio

The recording feature works by recording presenters video/audio, good to record all participants audio to have a complete recording feature.

SFU implementation vs mesh Mirotalk

Hi. As ever, thanks for sharing your impressive work. I hope you take a breather sometime too heh.
In addition to your different hosting environments for the two (Railway won't suffice for mediasoup SFU?), I'm curious as to your experience with tangible differences in the two implementations. Specifically, if one has aspirations for clubhouse like audio-centric use, might that sans-video approach work upon the mesh version? Other comparisons, based on your experience would also be interesting to learn. Thanks!

Password for joining room

Hi Miroslavpejic85
I just want you to add a feature for password before entering the
Room as once someone locked the room and started meeting
He has to unlock again for late people to join so in this view password authentication is good.

Kirill0420 - question

Hello Kirill0420, I moved your question here from #1 (comment) ;)

Hello. I have two questions.

  1. Is it possible to translate the application into another language? How to do it?
  2. In docker-compose.template.yml you have three ports ('3010:3010/tcp' '40000-40100:40000-40100/tcp' '40000-40100:40000-40100/udp'), why so many?

Show active speaker

In a group meeting consisting of many participants, it's hard to see which person is the active speaker.
Implementing this functionality, can solve the issue, something like done on MiroTalk P2P.

WebSocket Connection Error

socket.io.js:324 WebSocket connection to 'wss://chat.fyi411.net/socket.io/?EIO=4&transport=websocket&sid=4yYRMwDmDxBEw57XAAAG' failed:

people can join but not be able to talk to one another or stream camera

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.