Git Product home page Git Product logo

noise-repellent's Introduction

noise-repellent

A suite of lv2 plugins for noise reduction that uses libspecbleach C library.

build

WARNING!!!! This project is not being actively mantained currently

Features

  • Adaptive noise reduction plugin for low latency voice denoise
  • Manual noise capture based plugin for customizable noise reduction
  • Adjustable Reduction and many other parameters to tweak the reduction
  • Option to listen to the residual signal
  • Soft bypass
  • Noise profile saved with the session

Install

Binaries for most platforms are provided with Github release. Just extract the adequate zip file for your platform to your lv2 plugins folder

If you wish to compile yourself and install this plug-in you will need the a C compiling toolchain, LV2 SDK, Meson build system, ninja compiler, git and libspecbleach library (if it doesn't find it it will download and compile it. In this case make sure to have libspecbleach dependencies installed).

Installation:

  git clone https://github.com/lucianodato/noise-repellent.git
  cd noise-repellent
  meson build --buildtype=release --prefix=/usr --libdir=lib (your-os-appropriate-location-fullpath)
  meson compile -C build -v
  sudo meson install -C build

Noise-repellent is on Arch community at https://www.archlinux.org/packages/community/x86_64/noise-repellent/.

Noise-repellent is also available in KXStudios repositories https://kx.studio/Repositories:Plugins

Use Instuctions

Please refer to project's wiki https://github.com/lucianodato/noise-repellent/wiki

noise-repellent's People

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

noise-repellent's Issues

Storage of Noise Profiles

Would it be possible for the plugin to be able to save the noise profiles to disk, so they could be reloaded in future sessions. I tried using the plugin in ardour, and when I close and reopened the project the noise profile got lost.

How to install on Raspberry Pi Model 3B running Ubuntu Mate 16.04?

Being very new to Linux, I am trying to install noise-repellent on a Raspberry Pi running Ubuntu Mate 16.04, but no luck. Then I came across a command line on the internet which says install using Snaps.

Tried that as well but got this error - "noise-repellent" is not available on edge for this architecture (armhf) but exists on other architectures (amd64, i386).

Any guidance shall really be helpful.

Thanks.

Minor typos: s/strenght/strength

A couple of minor typos in nrepel.c, nrepel.ttl.in and README.md
s/strenght/strength
s/STRENGHT/STRENGTH

(Also noticed README.md has very few line breaks).

Packaging Issue: Installation Prefix Configuration

Hi!
I am maintaining an Arch Linux AUR package for this plugin. According to the Arch Linux Package Etiquette packages should never be installed into /usr/local. However, that appears to be the default install prefix for meson. My attempts at changing the default prefix failed:

# Maintainer: CrocoDuck <crocoduck dot oducks at gmail dot com>

pkgname=noise-repellent-git
pkgver=r561.98cf68f
pkgrel=1
pkgdesc="An lv2 plugin for broadband noise reduction."
arch=('i686' 'x86_64')
url="https://github.com/lucianodato/noise-repellent"
license=('LGPL3')
depends=('fftw')
makedepends=('git' 'lv2' 'meson')
provides=("${pkgname%-*}")
conflicts=("${pkgname%-*}")
source=("${pkgname%-*}::git://github.com/lucianodato/noise-repellent")
md5sums=('SKIP')

pkgver() {
  cd "${pkgname%-*}"
  printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
}

build() {
    cd "${pkgname%-*}"
    meson --prefix "/usr" --buildtype=plain build
    ninja -v -C build
}

package() {
    cd "${pkgname%-*}/build"
    DESTDIR="$pkgdir/" ninja install
}

I am not really used to meson or ninja, but seems like the approach above should work. So I am left wondering whether your build scripts do not allow custom install prefix.

tag parsing error

Version: 0.1.3f -> 0f 1f 3f f
expr: non-integer argument
git2lv2.mk:37: *** "Cannot extract required LV2 minor-version parameter".  Stop.

Doesn't parse the trailing "f" correctly.

0.1.5 installs files into a wrong place

Was correct:

lib/lv2/nrepel.lv2/manifest.ttl
lib/lv2/nrepel.lv2/nrepel.so
lib/lv2/nrepel.lv2/nrepel.ttl

Now wrong:

nrepel.lv2/manifest.ttl
nrepel.lv2/nrepel.so
nrepel.lv2/nrepel.ttl

Sidechain noise source input

I wonder if it'd be possible to use a separate input for realtime noise profiling.

Use case:

Have a close mic to capture the subject.
Have a far mic to capture the noise.

Use the far mic to remove background noise from the close mic.

I think this is what most smartphones do to clean up the call audio.

Changing tag system

Hi! I'm currently packaging noise-repellent for Arch Linux.
For consistency it would be awesome, if the tagging system (with v or without v) would remain consistent over releases.

Changing the tag system (back and forth) leads to a lot of ignored tags in the new version detection system, as the versions with v order before the ones without v.

Undefined symbol: fftwf_plan_r2r_1d

Just tried latest git code on Debian 8 amd64, hosted in jalv.gtk. Plugin failed to instantiate, with error message:
undefined symbol: fftwf_plan_r2r_1d

Version from a few days ago works fine.

Using Noise-Repellent for sound design

Hi!

I find Noise-Repellent a great tool for upping the quality of noisy recordings when I really need to used them. Especially helpful for film work I do.

But also as a sound designer I'm thinking how can I use this tool creatively, to introduce unusual distortion to sound.

I wonder if a creative mode could be added that'd for example allow to make the settings reach far beyond reasonable limits, or introduce some options that could completely mess up the process, resulting in new interesting sounds?

Maybe it's a topic for a special fork of this plugin intended for sound design, rather than noise removal?

Sound-Proppelant?

What do you think?

Post Filtering

As described in EFFICIENT MUSICAL NOISE SUPPRESSION FOR SPEECH ENHANCEMENT SYSTEMS. This post processing should be used as an artifact control slider. It should be better than current approach of using an wideband gate

Crashing in ardour

Hi, you tried to contact me on irc but I was away and you were offline when I came back.
This is the bug report I filed about the issue, rgareus mentioned that it appeared to be caused/re;ated to noise-repellent, although he did also seem to think that something is ardour wasn't right from the gdb output - http://tracker.ardour.org/view.php?id=6988.

I just tried the latest master from here but there still seems to be a crash. rgareus did mention that it can be worked around by not having the play head at zero if that helps reproduce it, he said he was at least able to get the errors from the project attached to the bug report. I know of at least one other person who was getting the error and a crash so it could be a regression in ardour.

Anyway, really just posting this as a way to communicate about it, may not be related to noise-repellent. Feel free to hit me up on irc if you see me there.

Unable to install .dll in Windows 10

Hello,

I am interested in using your dll under windows. I was unable to load them into Audacity or "Wavosaur" sound editors, impossible in 64/32 bit dll formats. I'm using Windows 10 64 bit at the moment.

I have asked another person try to install in Ardour / mixbus under windows and impossible for them too.

¿Is there any special requeriment in order to install? ¿Did someone successfully installed noise-repellent under a DAW in Windows?

Gracias!

Program sord_validate found: NO

when I ran meson build --buildtype release --prefix /media/mustafa/ubuntu_backup/Projects/aa/noise-repellent/build
Even Install sudo apt install sordi

Build type: native build
Build machine cpu family: x86_64
Build machine cpu: x86_64
Project name: nrepel.lv2
Native c compiler: cc (gcc 5.4.0-6ubuntu1)
Program sord_validate found: NO
Program cp found: YES (/bin/cp)

How to execute the project?

After the installation, what should I do to have the interface ? What I have to execute ?

Thanks for your work !

STFT improvements

  • Decouple window length from FFT size to reduce latency a bit
  • use ms frame size to support higher fs

Apply gain as a gate

Use a threshold and attack and release controls. Computing gain as a filter might improve noise floor too.

ninja installs to /usr/local/nrepel.lv2

When updating the plugin, I noticed the switch to meson. After runnign meson and ninja to build, I noticed that ninja was not installing like make used to i.e. to /usr/local/lib/lv2/nrepel.lv2. I think teh new install locatin is outside the lv2 probing location.

Apply a preset and the associated state.ttl to a set of files

Hi Luciano, and first of all congratulations for the great work on noise-repellent.

I started using that plug-in from Ardour. But I wonder if it is possible to apply noise-repellent in batch to a set of files, given the state.ttl file and the preset found in an Ardour XML file:

        <lv2 last-preset-uri="" last-preset-label="" parameter-changed-since-last-preset="1" state-dir="state2">
          <Port symbol="reduction" value="10"/>
          <Port symbol="offset" value="0"/>
          <Port symbol="release" value="150"/>
          <Port symbol="masking" value="5"/>
          <Port symbol="transient_protection" value="1"/>
          <Port symbol="whitening" value="0"/>
          <Port symbol="noise_learn" value="0"/>
          <Port symbol="adaptive_noise_learn" value="0"/>
          <Port symbol="reset_noise_profile" value="0"/>
          <Port symbol="Residual_listen" value="0"/>
          <Port symbol="enable" value="1"/>
        </lv2>

I suspect it might be possible with jalv, lv2apply or a similar LV2 container usable from the command line, but I can't find how to do it. Any idea or suggestions?

Ardour segfaults when adding plugin

When I try to add this plugin to an Ardour channel's processors, Ardour immediately segfaults. I have compiled Ardour 5.12 from source with debugging symbols and have captured the following backtrace:

#0  0x00007fffe8b97940 in hanning () at /usr/lib/x86_64-linux-gnu/libcodec2.so.0.8.1
#1  0x00007fffbc007e0e in fft_window () at /usr/local/lv2/nrepel.lv2/nrepel.so
#2  0x00007fffbc009281 in spl_reference () at /usr/local/lv2/nrepel.lv2/nrepel.so
#3  0x00007fffbc009bf0 in instantiate () at /usr/local/lv2/nrepel.lv2/nrepel.so
#4  0x00007ffff2ddf22b in lilv_plugin_instantiate () at /usr/lib/x86_64-linux-gnu/liblilv-0.so.0
#5  0x00007ffff793fe00 in ARDOUR::LV2Plugin::init(void const*, long) (this=0x5555572a9000, c_plugin=0x55555752c920, rate=48000)
    at ../libs/ardour/lv2_plugin.cc:557
#6  0x00007ffff793ed22 in ARDOUR::LV2Plugin::LV2Plugin(ARDOUR::AudioEngine&, ARDOUR::Session&, void const*, long) (this=0x5555572a9000, engine=..., 
    session=..., c_plugin=0x55555752c920, rate=48000) at ../libs/ardour/lv2_plugin.cc:369
#7  0x00007ffff794ef7b in ARDOUR::LV2PluginInfo::load(ARDOUR::Session&) (this=0x555557e718e0, session=...) at ../libs/ardour/lv2_plugin.cc:3359
#8  0x000055555625cd88 in PluginSelector::load_plugin(boost::shared_ptr<ARDOUR::PluginInfo>) (this=0x555557ae0aa0, pi=...)
    at ../gtk2_ardour/plugin_selector.cc:551
#9  0x000055555625f653 in PluginSelector::plugin_chosen_from_menu(boost::shared_ptr<ARDOUR::PluginInfo> const&) (this=0x555557ae0aa0, pi=...)
    at ../gtk2_ardour/plugin_selector.cc:951
#10 0x0000555556266111 in sigc::bound_mem_functor1<void, PluginSelector, boost::shared_ptr<ARDOUR::PluginInfo> const&>::operator()(boost::shared_ptr<ARDOUR::PluginInfo> const&) const (this=0x555557e37b30, _A_a1=...) at /usr/include/sigc++-2.0/sigc++/functors/mem_fun.h:2066
#11 0x0000555556265b2b in sigc::adaptor_functor<sigc::bound_mem_functor1<void, PluginSelector, boost::shared_ptr<ARDOUR::PluginInfo> const&> >::operator()<boost::shared_ptr<ARDOUR::PluginInfo>&>(boost::shared_ptr<ARDOUR::PluginInfo>&) const (this=0x555557e37b28, _A_arg1=...)
    at /usr/include/sigc++-2.0/sigc++/adaptors/adaptor_trait.h:89
#12 0x00005555562653e4 in sigc::bind_functor<-1, sigc::bound_mem_functor1<void, PluginSelector, boost::shared_ptr<ARDOUR::PluginInfo> const&>, boost::shared_ptr<ARDOUR::PluginInfo>, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>::operator()() (this=0x555557e37b20)
    at /usr/include/sigc++-2.0/sigc++/adaptors/bind.h:1124
#13 0x000055555626488e in sigc::internal::slot_call0<sigc::bind_functor<-1, sigc::bound_mem_functor1<void, PluginSelector, boost::shared_ptr<ARDOUR::PluginInfo> const&>, boost::shared_ptr<ARDOUR::PluginInfo>, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>, void>::call_it(sigc::internal::slot_rep*)
    (rep=0x555557e37af0) at /usr/include/sigc++-2.0/sigc++/functors/slot.h:136
#14 0x00007ffff57cedc8 in Glib::SignalProxyNormal::slot0_void_callback(_GObject*, void*) () at /usr/lib/x86_64-linux-gnu/libglibmm-2.4.so.1
#15 0x00007ffff572ac8d in g_closure_invoke () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#16 0x00007ffff573de64 in  () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#17 0x00007ffff57472be in g_signal_emit_valist () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#18 0x00007ffff574797f in g_signal_emit () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#19 0x00007ffff53eca4a in gtk_widget_activate () at /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
#20 0x00007ffff52e94bd in gtk_menu_shell_activate_item () at /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
#21 0x00007ffff52e978e in  () at /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
#22 0x00007ffff52d71eb in  () at /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
#23 0x00007ffff572ac8d in g_closure_invoke () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#24 0x00007ffff573dbbd in  () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#25 0x00007ffff57469ab in g_signal_emit_valist () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#26 0x00007ffff574797f in g_signal_emit () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#27 0x00007ffff53edcac in  () at /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
#28 0x00007ffff52d548c in gtk_propagate_event () at /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
#29 0x00007ffff52d587b in gtk_main_do_event () at /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
#30 0x00007ffff5148bac in  () at /usr/lib/x86_64-linux-gnu/libgdk-x11-2.0.so.0
#31 0x00007ffff5648f2e in g_main_context_dispatch () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#32 0x00007ffff56491c8 in  () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#33 0x00007ffff56494c2 in g_main_loop_run () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#34 0x00007ffff52d48e7 in gtk_main () at /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0
#35 0x00007ffff5e55332 in Gtkmm2ext::UI::run(Receiver&) (this=0x555556e36e40, old_receiver=...) at ../libs/gtkmm2ext/gtk_ui.cc:284
#36 0x0000555556063d1b in main(int, char**) (argc=1, argv=0x7fffffffc848) at ../gtk2_ardour/main.cc:426

Note that I'm using libfftw3 from Debian Buster, which is 3.3.8.

Let me know if there is any other information I can provide to help diagnose this issue.

successful installation but I can't find it in Ardour

Hi, I installed it, also in $home/.lv2 and in /usr/local/lib/lv2 but I cant' find it inside Ardour... what could be?

vbr@lm:~/Downloads/noise-repellent$ meson build --buildtype release --prefix $HOME/.lv2
The Meson build system
Version: 0.49.2
Source dir: /home/viniciusbr/Downloads/noise-repellent
Build dir: /home/viniciusbr/Downloads/noise-repellent/build
Build type: native build
Project name: nrepel.lv2
Project version: undefined
Native C compiler: cc (gcc 8.3.0 "cc (Debian 8.3.0-6) 8.3.0")
Build machine cpu family: x86_64
Build machine cpu: x86_64
Program sord_validate found: YES (/usr/bin/sord_validate)
Program cp found: YES (/bin/cp)
Library m found: YES
Found pkg-config: /usr/bin/pkg-config (0.29)
Dependency fftw3f found: YES 3.3.8
Dependency lv2 found: YES 1.14.0
Configuring manifest.ttl using configuration
Build targets in project: 2
Found ninja-1.8.2 at /usr/bin/ninja
vbr@lm:~/Downloads/noise-repellent$ ninja -v -C build
ninja: Entering directory `build'
[1/3] /bin/cp ../lv2ttl/nrepel.ttl nrepel.ttl
[2/3] cc -Inrepel@sha -I. -I.. -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -std=c99 -O3 -ffast-math -fomit-frame-pointer -fno-finite-math-only -Wno-unused-function -fPIC -msse -msse2 -mfpmath=sse  -MD -MQ 'nrepel@sha/src_nrepel.c.o' -MF 'nrepel@sha/src_nrepel.c.o.d' -o 'nrepel@sha/src_nrepel.c.o' -c ../src/nrepel.c
[3/3] cc  -o nrepel.so 'nrepel@sha/src_nrepel.c.o' -Wl,--no-undefined -Wl,--as-needed -Wl,-O1 -shared -fPIC -Wl,--start-group -Wl,-soname,nrepel.so -lm /usr/lib/x86_64-linux-gnu/libfftw3f.so -Wl,--end-group
vbr@lm:~/Downloads/noise-repellent$ sudo ninja -C build install
ninja: Entering directory `build'
[0/1] Installing files.
Installing nrepel.so to /home/viniciusbr/.lv2/lib/x86_64-linux-gnu/lv2/nrepel.lv2
Installing nrepel.ttl to /home/viniciusbr/.lv2/lib/x86_64-linux-gnu/lv2/nrepel.lv2
Installing /home/viniciusbr/Downloads/noise-repellent/build/manifest.ttl to /home/viniciusbr/.lv2/lib/x86_64-linux-gnu/lv2/nrepel.lv2

My folders:

vbr@lm:~/.lv2/lib/x86_64-linux-gnu/lv2$ ls
nrepel.lv2
viniciusbr@lm:/usr/local/lib/lv2/lib/x86_64-linux-gnu/lv2$ ls
nrepel.lv2

Ardour 6.6.0:

Print screen

Wideband gate and spectral gate mixing

Already tried this but wideband gating was done ins the spectral domain and this does not work as expected since transients get distorted quite a bit. The trick might be to do the wideband gate processing in time domain. This might be useful for recovering detail while signal is present and mask musical note inbetween frequencies

Build system regression

Since the removal of the Makefile 1aa4b9d the plugin can only be built on modern systems.

In particular cross-compile mingw on Linux is no longer available. Also older versions of OSX are not supported and noise-repellent's built broken.

The meson file also does not statically link the plugin. The resulting binary is not self-contained.

What is the benefit of using meson over the previous Makefile for this particular project?

SNR = ?

Hey @lucianodato , I'm just wondering if I'm right with assuming that SNR = Spectral Noise Reduction. If so, I then wonder why does the "SNR" has been translated to "S/R" in the Spanish translation here.

Noise repellent makes lv2 hosts crash on Windows 10

Windows 10 Version 2004 Build 19041.630

Cygwin packages installed (dependency of nrepel): fftw3
C:\cygwin64\bin in System PATH variable

Noise repellent makes Carla unresponsive and have to be killed using task manager.
It also crashes Audacity with a "Couldn't instantiate effect" message.

I have no idea how to get logs from Carla on Windows, but if it helps at all, I got an audacity crash report with an access violation.
Audacity_dbgrpt-10532-20201126T171038.zip

Transient Preservation

Implement something to preserve transients. Some clues in Adaptive Noise Reduction for Real-time
Applications paper

Residual Whitening

The approach taken was bad. It's not the residual spectrum that it should be whiten but the reduction applied in each frequency should be modified in such way that the residual noise is close to white so it will made the amount of reduction frequency dependent.

warning: 'M_PI' macro redefined

Getting this on FreeBSD 11.1:

In file included from src/estimate_noise_spectrum.c:29:
src/extra_functions.c:44:9: warning: 'M_PI' macro redefined [-Wmacro-redefined]
#define M_PI 3.14159265358979323846f
        ^
/usr/include/math.h:149:9: note: previous definition is here
#define M_PI            3.14159265358979323846  /* pi */
        ^

Better cleaning of ambient/field recordings

Hello and thank you, Noise Repellent is an excellent tool! But unfortunately it works fine only for music and voice. What I am desperately looking for for many years, and all in vain, is a good tool/plugin to denoise ambient recordings, specifically those with bird calls.

Here is a couple of sample files from my collection: https://yadi.sk/d/GuFQ7ThQ3NVhjb. I presume a different approach is needed here, because currently the results are pretty horrible, no matter the settings. In the beginning of each sample file is a small portion (about 2 seconds) of pure mic noise added for noise sampling.

Save noise profile as plugin state

Currently, if you make the plugin learn the noise profile all works fine. But if you save/reload the session, then the noise profile is lost and has to be learned anew. This can be tedious if several tracks have noise.

A workaround is to bounce the result of noise repellent, but that essentially freezes the settings, and it's then tedious to revert to the noisy recording (having made sure it is kept somewhere), relearn the noise, reapply and freeze.

A solution is to save the noise profile as plugin state when asked to by the host through LV2.

Soft Bypass

Bypassing the plugin distort the audio output

Sidechain input for noise source?

Would it be possible to introduce a secondary sidechain input for noise print capture?

Possible use cases are:

Using two microphones in a noisy environment to capture a signal (voice) + noise on one mic, and just the background noise on the other mic and use the information to get a clean signal (with no background noise).

I know modern smartphones do just that for improved call sound quality with a secondary microphone.

The problem is - simple mixing with polarity flip won't work, because of phase, EQ and delay differences.

However - is a secondary input could be used as live noise source for spectral analysis and noise removal - I suspect the effects could be very good.

LinuxAudio.Plugin flatpak

Hello,
could this lv2 plugin be packaged as a flatpak?
It would be particularly convenient for using apps like Ardour and similar audio tools from flathub, as this plugin isn't available on all distros.

Manual

Translate Spanish manual and upload it. Maybe a video tutorial explaining its features and showing examples could be a good idea

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.