Giter Club home page Giter Club logo

tdarr's Introduction

Tdarr V2: Distributed Transcoding System

Audio/Video Library Analytics & Transcode/Remux Automation

  • FFmpeg/HandBrake + video health checking (Windows, macOS, Linux & Docker)

ImageVersion Reddit Discord

About:

More information can be found on the following websites:

https://tdarr.io/

https://docs.tdarr.io/

Builds

Tdarr V2 is a cross-platform conditional based transcoding application for automating media library transcode/remux management in order to process your media files as required. For example, you can set rules for the required codecs, containers, languages etc that your media should have which helps keeps things organized and can increase compatability with your devices. A common use for Tdarr is to simply convert video files from h264 to h265 (hevc), saving 40%-50% in size.

The application is in the form of a click-to-run web-app, comprised of the following 2 components:

  • Tdarr_Server - Central process which all Nodes connect with
  • Tdarr_Node - Processes running on same/other devices which collect tasks from the Server

Put your spare hardware to use with Tdarr Nodes for Windows, Linux (including Linux arm/arm64) and macOS.

Designed to work alongside applications like Sonarr/Radarr and built with the aim of modularisation, parallelisation and scalability, each library you add has its own transcode settings, filters and schedule. Workers can be fired up and closed down as necessary, and are split into 4 types - Transcode CPU/GPU and Health Check CPU/GPU. Worker limits can be managed by the scheduler as well as manually. For a desktop application with similar functionality please see HBBatchBeast.

  • Cross-platform Tdarr Nodes which work together with Tdarr Server to process your files
  • GPU and CPU workers
  • Use/create Tdarr Plugins for infinite control on how your files are processed: https://github.com/HaveAGitGat/Tdarr_Plugins
  • Audio and video library management
  • 7 day, 24 hour scheduler
  • Folder watcher
  • Worker stall detector
  • Load balancing between libraries/drives
  • Use HandBrake or FFmpeg
  • Tested on a 1,000,000 file dummy library
  • Search for files based on hundreds of properties
  • Library stats
  • Hardware transcoding container (install Nvidia plugin on unRAID/Nvidia runtime container on Ubuntu)


Stats

image

Nodes

image

Job reports

image

Property explorer

image

Worker verdict history

image

Plugin stack system

image

Property search

image

Library schedule

image

Tdarr is extremely modular/configurable and the main idea behind it is creating a plugin stack to clean up/standardise your files. For example, a typical plugin stack might look like this:

(1) Transcode non hevc files into hevc

(2) Remove subs

(3) Remove meta data (if title)

(4) Add aac stereo audio if none (eng preferred)

(5) Remove closed captions

In this example, plugins 1,2,3 and 5 are community plugins which are available for you to use immediately. Plugin 4 can be created in the plugin creator interface in Tdarr and will appear as a local plugin.

Each of the plugins are conditional, so are only used if needed. They are located in Tdarr/Documents and are written in JavaScript so if none of the plugins do what you want then you can modify/create new plugins if you have a bit of coding experience (or get the gist from having a look). Steps for doing so are in the README here:https://github.com/HaveAGitGat/Tdarr_Plugins . Ask for help in the Discord channel if need be.

Here is an illustration of how the plugin stack works:

image

For the term 'streams', here is an example of how a file appears in Tdarr search results:

image

That file has 3 streams - a video, audio and subtitle stream. Subtitles and closed captions are very different. Where is the closed caption data in this example? It's embedded inside the h264 video stream.

Extra streams and closed captions which you don't need can cause problems with direct playing and syncing files, so you might as well remove them (it's recommended to use something like Bazarr for subtitles). Even when playing files in programs such as VLC or Kodi, subtitles/closed captions can cause playback delays and make things stuttery for a few seconds when jumping around the video.

Extra streams can also take up a lot of space. Don't be surprised to see some files in your library with 15+ audio/commentary/subtitle tracks in a bunch of different languages. These can take up an extra GB+ per file.

The plugin creator is split into 'Filters' and 'Actions'. Filters encapsulate the actions, so the actions will only be carried out if the filter conditions are met.

Current filters:

Filter by codec

Filter by medium

Filter by age

Filter by resolution

Filter by size

Current actions:

Transcode - HandBrake basic options

Transcode - HandBrake/FFmpeg custom arguments

Transcode - Standardise audio stream codecs

Transcode - Add audio stream

Transcode - Keep one audio stream

Remux container

Some actions/plugins have built-in filters (specified in the plugin creator). This means they'll automatically detect if a file needs to be processed or not (such as the remove subtitles community plugin). Additional filters can be added.

Some of the actions have become quite complicated so take a bit more time. For example, the 'Keep one audio stream' has 16 different outcomes as it tries to determine the best audio stream to keep based on the codec, language and channel count you specify.

If you have a request for a new filter/action, then try and think of it generically so I can implement it in way that other people can configure and apply it to their (slightly) different circumstances. Request on GitHub,Reddit or Discord.

For example, to maximize direct play, a plugin stack like this can be used:

(1) If not in h264, transcode into h264 [h264 is a more universal video codec than others]

(2) If not in mp4, remux into mp4 [mp4 is the most universal container]

(3) Remove subs

(4) Remove closed captions

(5) Add aac stereo audio if none (eng preferred) [very universal audio codec/channel count]

(6) Remove meta-data if title meta detected [Stops annoying titles appearing in Plex]

tdarr's People

Contributors

clinta avatar errolsancaktar avatar fish2 avatar haveagitgat avatar jonocairns avatar matthewglenn avatar roxedus avatar youknowblom 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

tdarr's Issues

Feature Request: Estimated size after transcode.

I note that under "i" under the video being transcoded you have "Original Size (GB)" listed in the extra information. Could you add "Estimated size" as well to show the estimated size of the new file being created?

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory

Hello! I'm using Tdarr docker container with Unraid. The application unexpectedly crashed and the container is no longer running. This is the last bit in the log:

<--- Last few GCs --->
FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory

[1:0x5569dccd80e0] 82052488 ms: Scavenge 1160.6 (1219.3) -> 1144.9 (1219.3) MB, 3.4 / 0.0 ms (average mu = 0.121, current mu = 0.060) allocation failure
[1:0x5569dccd80e0] 82052602 ms: Scavenge 1160.6 (1219.3) -> 1144.9 (1219.3) MB, 3.5 / 0.0 ms (average mu = 0.121, current mu = 0.060) allocation failure
[1:0x5569dccd80e0] 82052838 ms: Scavenge 1160.9 (1219.8) -> 1145.4 (1219.8) MB, 3.3 / 0.0 ms (average mu = 0.121, current mu = 0.060) allocation failure

<--- JS stacktrace --->

==== JS stack trace =========================================

0: ExitFrame [pc: 0xa843025be1d]
1: StubFrame [pc: 0xa84302840b1]
Security context: 0x36031851e6e9
2: onread(aka onStreamRead) [0x2f9548c55361] [internal/stream_base_commons.js:87] [bytecode=0x37fc637c9a9 offset=0](this=0x0f98f252fa81 ,nread=65536,buf=0x179a78804a09 )
3: InternalFrame [pc: 0xa843020ee75]
4: EntryFrame [pc: 0xa84302092c1]

==== Detail...

I restarted it and runs for a bit then crashes within a couple minutes. This was one of the following crashes:

<--- Last few GCs --->

[1:0x55cdb8d260e0] 105883 ms: Mark-sweep 1390.1 (1427.3) -> 1389.7 (1431.3) MB, 598.9 / 0.0 ms (average mu = 0.144, current mu = 0.086) allocation failure scavenge might not succeed
[1:0x55cdb8d260e0] 106477 ms: Mark-sweep 1393.0 (1431.3) -> 1392.8 (1431.8) MB, 575.1 / 0.0 ms (average mu = 0.091, current mu = 0.031) allocation failure scavenge might not succeed

<--- JS stacktrace --->

==== JS stack trace =========================================

0: ExitFrame [pc: 0x1dfce44c2ee1]
Security context: 0x1caa8ef1e6e9
1: stringSlice(aka stringSlice) [0x3aa100c13429] [buffer.js:~589] [pc=0x1dfce46b1e2f](this=0x01b52b8826f1 ,buf=0x12ff689fcac1 ,encoding=0x1caa8ef3dd31 <String[4]: utf8>,start=5213310,end=5213325)
2: deserializeObject(aka deserializeObject) [0x6769c628521] [/app/Tdarr/bundle/programs/server/npm/node_modules/...

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory

The application was running just fine when my only library was a test directory of about 20 movies. The issue started when I created new libraries pointing towards my full content. Is there a way to increase the JavaScript heap size?

Feature Request - Schedule by Day

And another one.

Is it possible to break the schedule out by day as well as hours. Currently, I have much less utilization Mon - Fri 1am - 5pm than I do Sat - Sun for those same times. The per library schedule is fantastic, but adding days will make it much more flexible.

Thanks!

Status on health check

Health checks seem to just go from 0% to complete instead of actually showing the progress or an ETA. Is this possible to fix or not due to outputting to null?

Codec exclusion options universal based on video or audio

Have the "Don't transcode videos already in these codecs:" be universal for the video and audio sections. If i add a codec to the video section allow the box to now appear on all video libraries, similar for audio. Not for the options to be selected the same across all libraries but so we do not have to manually enter them for every single library.

Feature Request - Add Optional Output Directory

I'd like to request a new feature- the ability to add an (optional) output directory, like in HBBatchBeast. Sometimes I don't know if the transcode is going to pan out and actually be an improvement on the source file. It would be nice to therefore not lose the source file pending manual review of the output.

It's also nice to know that anything in the completed folder is truly completed, so that you can go ahead and move those files. Currently, the folder at any point in time could be a mishmash of pending transcodes and completed transcodes.

Resolution matching

The resolution matching seems to require an exact match for vertical and horizontal pixels to identify as 480p, 720p, 1080p, etc. Videos are often cropped down to a narrower aspect ratio (i.e removal of black bars) but should still be considered 480p, 720p, 1080p, etc.

Resolution should be determined by the horizontal pixel count only and should have a tolerance of a few pixels. This should move most of the "other" resolutions into useful categories.

Apply button for changes

Some people might feel uneasy with changes being applied automatically to something that could potentially ruin their entire media library without an undo process. Can you add a apply button to changes that we can make so it doesn't go and start making changes to our files until we are completely done setting everything up.

Plugin hyperlinks

Also, on the Plugins tab, can you make the Link item an actual hypertext link to open in a new tab/window. Right now it's just text

Different Databases

Hi, very awesome project. Planning on spinning this up and testing it on my 28TB library.

Would it be at all possible/easy to use another database than mongoDB. If it's too much work don't worry about it I'll just spin up a mongo container.

MySQL or PostgreSQL would be awesome though.

Animate tdarr to use GPU for transcoding in unraid

Hello,
It's Not an issue.
But what can i so to use my Nvidia GPU in the tdarr Container!?
I have already installed the Nvidia Plugin and it's working with the Plex Container.

Thanks for comments...
Chris

Unraid container permissions

but both of us have noted that the template continues to randomly add / change fields when you restart the container and that permissions inside the appdata config (the one mapped to /home/Tdarr/Documents in the container) are not being set correctly. Roxedus discovered some things missing in the template, but the former issue has not yet had any action.

May be cause of fresh scan on start.

Feature Request - Worker Queue Current # out of Total #

On the Tdarr tab, for each worker queue, is it possible to show the number of the current item and the number of items in the entire queue? Currently the queue just shows up to 20 so i'm wondering if somewhere in the actual worker boxes itself, could the item display like:

1 of 2,341
2 of 2,341
3 of 2,341

If you had three workers running.

Feature Request - Tdarr Tab Info

I'm combining a few items into one request here but they seem pretty related. All three are on the Tdarr Tab itself.

  • On the Tdarr tab, in the Transcode log, when hitting the i button, I noticed that the text doesn't wrap out. It's all forced onto one line, like :

File is h264 480p!File has no title and has no subs File has no title metadata File has no subs File is in mkv container! File meets conditions!

  • On the Tdarr tab, is it possible to show the before and after size on the Transcode log when hitting the i button?

  • On the Tdarr tab, is it possible to show the date/timestamp in both the transcode and health logs? Even if it's under the i button.

Great project

Howdy, I've been looking for a project like this to let loose on my library. Will check back when I get a bit of free time.

A suggestion:
Some older 4K TVs (confirmed for various Samsung TVs on the Plex forums - I have a KS8000), do not like too many streams on in an mkv. If there are more than ~20 elements (including video/audios/subs) playback starts buffering/glitching. Removing superfluous elements (using mkvtoolnix) and I find the same UHD file at the same high bitrate plays flawlessly.

Would love to be able to strip out subtitles at the same time as doing a pass for audio/video.

Installation issue

Have installed node js on windows and also MongoDB
Downloaded Windows .7z file and unzipped.

The next instruction says to run command prompt in the root folder.

First Question: Which folder?

Second Question: I am getting the following error when I run the commands stated:

PS C:\Tdarr\Tdarr-Windows-01-pre-alpha\bundle> set MONGO_URL=mongodb://localhost:27017/Tdarr
PS C:\Tdarr\Tdarr-Windows-01-pre-alpha\bundle> set PORT=8265
PS C:\Tdarr\Tdarr-Windows-01-pre-alpha\bundle> set ROOT_URL=http://localhost/
PS C:\Tdarr\Tdarr-Windows-01-pre-alpha\bundle> node main.js
C:\Tdarr\Tdarr-Windows-01-pre-alpha\bundle\programs\server\node_modules\fibers\fibers.js:90
return fn.apply(this, arguments);
^

Error: Must pass options.rootUrl or set ROOT_URL in the server environment
at Object.Meteor.absoluteUrl (packages\meteor.js:1378:11)
at runWebAppServer (packages/webapp/webapp_server.js:771:18)
at webapp_server.js (packages/webapp/webapp_server.js:1175:1)
at fileEvaluate (packages\modules-runtime.js:336:7)
at Module.require (packages\modules-runtime.js:238:14)
at require (packages\modules-runtime.js:258:21)
at C:\Tdarr\Tdarr-Windows-01-pre-alpha\bundle\programs\server\packages\webapp.js:1588:15
at C:\Tdarr\Tdarr-Windows-01-pre-alpha\bundle\programs\server\packages\webapp.js:1597:3
at C:\Tdarr\Tdarr-Windows-01-pre-alpha\bundle\programs\server\boot.js:419:36
at Array.forEach ()
at C:\Tdarr\Tdarr-Windows-01-pre-alpha\bundle\programs\server\boot.js:228:19
at C:\Tdarr\Tdarr-Windows-01-pre-alpha\bundle\programs\server\boot.js:479:5
at Function.run (C:\Tdarr\Tdarr-Windows-01-pre-alpha\bundle\programs\server\profile.js:510:12)
at C:\Tdarr\Tdarr-Windows-01-pre-alpha\bundle\programs\server\boot.js:478:11
PS C:\Tdarr\Tdarr-Windows-01-pre-alpha\bundle>

Rename transcoded files

Would it be possible to have some more control over how transcoded files are handled? I tag the codec of the file in filenames, which becomes incorrect after tdarr transcodes them.

Potential solutions:

  • transcoded files can be directed to an alternate directory to be manually imported or handled by another application.
  • transcoded files can be automatically imported by radarr/sonarr, and thus renamed and the file history tracked.
    or
  • transcoded files are automatically renamed by tdarr

Feature Request - Display full file path/name on worker

Would it be possible to display the full path / filename on each individual worker?

Currently it's <filename> and then %

Then when you open the i you get the

CLI:
Preset: 
Process reasons: 
Start time:
Duration: 
Original size (GB): 

Could we add in

Path:
CLI:
Preset: 
Process reasons: 
Start time:
Duration: 
Original size (GB): 

Feature Request - URL Base

Hello! I'd like to set up Tdarr behind a nginx reverse proxy with a subdirectory. Would it be possible to add a configuration for url base?

Feature request - Encoding Feedback

From what I can see, I don't really get any feedback on individual encodes. Because this system just replaces files in place, I'm quite nervous about letting it rip across my whole library. In particular, I don't want to lose any of the associated tracks, subtitles, audio etc within my files and I'm not convinced a handbreak plugin is going to be nice to me.

Common sense testing aside, I think it would be awesome to provide some method of feedback like a before after scenario e.g.

Original --------> New
h264 video ----> HEVC Video
Subtitle Eng ---> Unchanged
Audio Track 1 --> Unchanged
Chapter Marks -> Unchanged

etc

Probably a better way to display it though.

Feature Request - Encoded Stats

Thinking about it, it would be nice to have a running tally of what you had, what you've done and whats left to do. For me I just want my whole library in HEVC. So knowing how much I've personally converted, e.g. each day, by week etc would be quite motivating.

Feature Request - Workers +1 / -1 Buttons

I'm wondering if it's possible on the Tdarr tab if you could add two buttons to the left of the three bars with the circles that are +1 and -1. I've had a few times in the past two days now where I've drug the circle a bit too far to the right and added 5 workers instead of 2 for example, because it doesn't naturally stop at the increments for me. So I was curious if just adding a +1 and -1 type button would help.

Thanks!

Feature Request - Drilldown of stats

It would be useful to be able to get a list of files by clicking on pie-chart segments on the stats page. it would be useful to see what files are in each category for general library management (e.g. files in an unusual format or resolution).

Feature Request - Help Tab clickable links

This is probably on your radar (hah, get it?) already, but on the Help tab, could you set the URL's as clickable links. Also I was wondering if you could add a link to the github here as well.

Thanks!

Fantastic!

I am very excited about this new tool. Some things I've noticed:

  • I've installed the docker and note there's not yet a how to get it started (once installed). Not surprising at this stage, but probably would have helped me with some of the below.

  • It's started with no libraries - even though it's mapped to standard locations in docker - I assume this allows sub libraries within the main mount point, however it also asks me for a transcode cache folder, even though one was set up to a default mount point in the docker. Being a default mount point, shouldn't it default to that internal docker path? e.g. /home/Tdarr/cache

  • I add the source folder under /home/Tdarr/Media and it sees all the content under this via the docker mapping - however I have not way of adding the library and it still says 'No Libraries' up at the top left of the window. I've tried clicking both scan buttons and nothing changes.

  • Also being in docker on linux, it is slightly odd to see windows based formatting - C:/MySourceFolder showing up - something cosmetic to change for later maybe

  • Clearly the first place to start is to get some stats active which I can't do due to the above.

What am I missing? Happy to write it up in the Wiki for you once we solve it.

What does the worker sliders do? I seem to be able to move them up to 1 without anything actually working.

Hmm, just tried scan again and it looks like it's working now by doing that. Hopefully this helps someone else. Once I figure it all out I'll add to wiki. Thanks so much for making this!

How to use ffmpeg?

I'm new to ffmpeg and can't use the basic commands in Tdarr.

I would like to encode in x265 with crf and fdk_aaa all audio + subtile

which syntax is used?

Feature Request - Name a Library

Hey there,

I'm wondering if it's possible to have an field on each library that allows us to put a Description or Name in for that library. Just something that makes it a little easier to recognize what we've got the library doing or whatever purpose.

Right now, I've got 5 different libraries setup, each pointing to different locations and it's starting to feel a bit long and confusing at times, so I was wondering if this would help some.

Thanks!

Feature Request - Enhanced worker Info

It would be super great to add a bit more info to the worker windows. E.g. in handbrake I can usually see things like how long it's been running for / time remaining and estimated output size. Probably some other things can be done too, like listing the original file size.

Feature Request - Pause Library

Hey there,

I'm wondering if it's possible to have an option to basically put an entire library on PAUSE. I'd like to NOT have to delete the library if I don't want it running right then for whatever specific reason but I'd also like to simply pause it.

For now, I've been using the schedule to hack this and forcing the time to 01 to 02 only, but a pause would be easier and more logical.

Feature Request/Question: Use GPU Hardware Acceleration

I've created a custom preset as follows
Super_HQ_1080p30_Surround_Hardware.txt

Set the Video Encoder to nvenc_h264 which, as far as I know, should enable the use of a Nvidia GPU to use GPU Hardware Acceleration. I've setup the docker container the same as my Emby container but it's still not using my GPU when transcoding (I'm checking on the host with watch nvidia-smi.

Is there something missing in the container? Or isn't it supported at all? Or am I doing something wrong?

Transcoder leaves empty folders in transcode directory

After successful completion or an error on a transcode, the transcoder leaves empty folders.

Expected behavior: The transcoder should remove empty directories after transferring successfully transcoded files or on an error if the created directories remain empty.

Prioritising of libraries

Say I have three different libraries configured, I would like to "rank" those libraries 1, 2 and 3 in order of prioritzation. Example - Library 1 has 200 files and is Prority 1, Library 2 is 500 files and is P2 and Library 3 is 3,000 files and is P3. Library 1 has completed processing everything but has Folder Watch enabled. Library 2 is currently in process as is Library 3. When a new item is detected in Library 1, since it has a higher priority than Library 2 or Library 3, that new item bumps up automatically to the top of the queue.

Windows update

You mentioned in a thread to me a number of weeks ago that you were planning to release a substancial update for the windows version. Any idea when that will be?

Help Links

If I click on the github help button within Tdarr, it takes me to the main Github page. Shouldn't this go to the wiki now?

Also, I suspect it would be better if it opened in a new window, currently it closes my Tdarr application so to speak.

Base URL doesn't appear to work

Hello! I've upgraded the tdarr_aoi docker on unraid to 1.005 and the base url env variable doesn't appear to work based on the instructions provided in the feature request. This is the docker variable I'm passing in as a test:

-e 'BASE'='/base'

image

When navigating to "http://localhost:8265/base/stats", a blank page comes up with the menu on top. The menu still points back to the root "/", for example if I select Stats on the menu, the url is "http://localhost:8265/stats".

Feature Request - Search Tab - Is result item in queue or not?

Is it possible to indicate on the Search tab results if an item is currently in a queue or not in a queue? Currently I have no indication and I still have the ability to bump an item to the top of a potentially, non-existent queue.

If so, can we see the queue position number on that search result? If it's 3 out of 4,312 items I may not want to bump it, but if it's 4,041 then I may.

Database connection error

I've been getting the following fatal error since updating yesterday.

MongoNetworkError: failed to connect to server [mongodb:27017] on first connect [MongoNetworkError: getaddrinfo ENOTFOUND mongodb mongodb:27017]

It's possible something went wrong before the update, as it didn't seem to be transcoding anymore. I tried removing the database files and updating again, hoping it would rebuild, but I got the same error.

Feature Request - Search Tab NOT results

Would it be possible to include NOT results in the search? For example, I'd like to search by mkv and NOT 720p.

mkv,-720p

Perhaps putting a MINUS sign in front of the search?

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.