Coder Social home page Coder Social logo

obs-browser'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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

obs-browser's Issues

Compiling OBS Browser?

I've tried to build OBS browser from scratch with no success; apparently caused by C runtime mismatches, or an issue with the version of CEF I'm using. I'm trying to build the CEF browser plugin with inclusion with a custom build of OBS called Tachyon (https://github.com/WatchBeam/ftl-studio) so I can include it as part of the 'out of the box' experience; the pre-existing binary does work, but I'm not sure I can freely redistribute that.

Is there a step-by-step guide for getting the plugin built on Windows?

CORS Same-origin XHR problems on Mac build

I'm using obs-studio 0.13.1 and obs-browser 1.0.10 on OSX El Capitan.

I'm trying to stream the exact time using time.is. When I try and do so, I get this image:

screen shot 2016-03-20 at 3 33 34 pm

That "unable to connect with server" message appears to be the result of an XHR same-origin error -- I have the following in my OBS studio console:

[0320/153613:INFO:CONSOLE(0)] "XMLHttpRequest cannot load http://time.is/t/?en.0.60.-1.0p.-420.14e.1458513373002.1458513372246.. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://time.is' is therefore not allowed access.", source: http://time.is/ (0)

It seems to think it needs to enforce CORS headers when making that XHR, but the destination is exactly the same as the origin... pretty strange.

I don't have this problem when doing the exact same thing on any other browser on my mac, and I don't have this problem while using obs-browser on Windows.

Any ideas? Anything else I can do to diagnose this? Thanks!

Crash on quitting OBS while playing a video through the browser source

On some machines, OBS crashes on shutdown if the browser source is playing a video (so it seems). It does not occur on all machines, for instance, it crashes on my Windows 10 MacBook Air but not on my Windows 10 desktop computer using the same stable release 0.15.4 of OBS Studio. Another user reported a crash like this here: https://obsproject.com/forum/threads/crashes-frequently-on-program-exit.54126/

On the laptop, there's only VS2013 installed, whereas there's also VS2015 on my desktop computer - not sure if it comes with different runtimes that could cause different behavior or if it's caused by something else.

The crashes could be caused by a race condition, but I'm just guessing. Using the Visual Studio debugger and the CEF debug symbols, it points me to different lines of code with different error messages, but they always seem to come from w32-pthreads.dll

  • 0xC0000005: access violation while reading at position 0xFFFFFFFFFFFFFFFF
    if (*mutex == NULL)
  • mx is a NULL pointer (access violation while reading at position 0x000000...)
    kind = mx->kind;

Shall I provide full stack traces?

Translation

How about translating the plugin?
It seems to be able to handly locale files also for plugins.

Request: State getters for current js bindings

Along with the js bindings that get called when a change occurs, it'd be handy to, arbitrarily, be able to get the current scene's name and BrowserSource visibility state:

window.obsstudio.activeScene()
// as function returns string
// Returns the currently active scene's name.

window.obsstudio.isVisible()
// as function returns boolean
// Returns true if the browser source is visible

Inconsistancy with JS hooks

1 - Passed Data Typings

With the obsSceneChanged event, <event>.detail is a JS object, similar to:

{height:1080,name:"brb",width:1920}

But with window.obsstudio.getCurrentScene() when the callback is called, the data argument is a non-parsed JSON string, resulting in data having to be passed through JSON.parse() before it is usable:

// data as String: {"height":1080,"name":"brb","width":1920}
window.obsstudio.getCurrentScene((data) => {
    console.log(data); // results in a string
    console.log(JSON.parse(data)); // results in a js object
});

I feel the JSON data of the latter should be parsed into a JS object as it is with the former.

2 - Different design patterns for similar functionality

The interface is all over the place on design for similar functionality sets. For example .onVisibilityChange is a property that gets set with a handler function while other events use the window.addEventListener() methodology.

3 - Incompleteness

Scenes have a getCurrentScene method and an onSceneChange event, but onVisibilityChange doesn't have an accompanying getter function; nor do the obsStreaming* and obsRecording* events.

Win10 - Home Edition
OBS Studio: 18.0.1
BrowserSource: v1.29.0

Request: Changeable Default Audio Device

Hello,
I am using OBS Studio to stram to Twitch and am furthermore using your plugin to integrate twitchalerts into my stream. It would be very helpful to let me choose to witch audio output device the browser resource will broadcast as I am using multiple virtual audio cables to mix up my sound.
Thank you for your time.

Weird Scrolling Bars

Hi there i have a strange Bug/Problem with the current Version of the Browser Plugin for OBS Studio. I use it for the Rainwave wiget and lately i have issues when the Song Changes.

I get allways Scrollbard when the animation kicks in and vanishing soon it is complete. Here a Link to a Short video i recorded with the current OBS Version and the installed v1.20 of the Plugin.

https://vid.me/e/fhOS

Also the Bug with adding Filters to the Browser Plugin is still there and all of my Sources vanishing soon i use a Filter on it like Crop.

Request: Volume Control for obs-browser

Currently there is no way to mute sounds from pages.
Additional if one uses the browser to embed twitchalerts (with sound) on multiple scenes they all play on event trigger.

Chroma Key Still Not Working

Using the Chroma Key filter on my system still has the weird transparent effect even after the bug was supposed to have been fixed.

Last working version for me v1.17

Windows 10 x64
Nvidia GeForce GTX 970 w/ latest drivers
16 GB GDDR3 Ram

Need 64 bit download for windows.

Hey the link for windows is 32 bit according to 7zip. there isnt links by bits for windows. Even here in previous releases i tried downloading 1.28 and 1.27 and they were both 32 bit. so if anyone can get me a 64 bit windows link to download (dont care which version) that would be fantastic.

-Thanks
Gath

Request: js hook for scene changes

Along with .onVisibilityChange() I'd also like to see an .onSceneChange(@visible as boolean, @scene as String) hook that triggers when the scene changes passing along the scene name that was SWITCHED TO. This would reduce the need for differing BrowserSource sources that handle minor differences between various scenes.

Currently, I use at least 4 differing BrowserSources where only one source is active dependent on the state of my stream: starting, actively streaming, be right back, and ending. All use a the same local source with a different URL parameter; file://path/index.htm?scene=starting for example.

With the suggested js hook for scene changes, only a single global BrowserSource would be required thus reducing resources, load times, ease of use, etc.

Action failed: Mouse Click , Move and Focus

Browser source is running well.But I can't use mouse to do action(like click & focus).I found some methods in browser-manager-base.hpp : SendMouseClick , SendMouseMove. why mouse action is not work in view ?
obs studio 17.0.2
obs brower: 1.27

Compile instructions (Linux)

I would be interested in trying to help, but currently the complete lack of a clue on how to build this makes that rather hard...

link to forum post where I note a few issues that I had while trying to build/use CEF and this plugin.

So some basic compile instructions from a system that can already build obs-studio would be nice, EG how to build CEF, the obs-browser sub-process stuff, change/set LD_LIBRARY_PATHs for out-of-band compiling/installing. Although just getting it to build once would probably be enough for me to go from there and detail most of the missing information for out-of-band compiles/installs if you have issues writing instructions for those.

Javascript code input in BrowserSource properties

Hi,

First of all I would like to thank you guys for your work this plugin is very helpful for me.
I created this issue after having many problems to build cef and obs. The idea I had initially was to add a js input in BrowserSource properties to be able to automatically make some changes to web pages without having to interact.

I saw in the BrowserLoadHandler class that for setting css it was using js so I thought I can change css input to keep pure js input code. But the problem is that I'm not able to build the plugin... Is it possible to have a prototype of the plugin with this change that I can use. Or if there is another better solution it is welcome.

Thanks again for you good work.

Browser cookies

Hello! How can I save site authentication?
I have to sign in to dotabuff.com with “Interract” on every OBS restart

Mac OSX Build Instructions

Hello,

I've been trying to compile plugin for OSX and since I'm not very familiar with cmake, I got stuck. I downloaded a stable CEF build and compiled the libcef_wrapper but when I try to compile obs-browser using cmake . -DCEF_ROOT_DIR=/my/dir and pass the build folder, I still get an error from FindCEF:

CMake Error at FindCEF.cmake:21 (message): Could not find the CEF wrapper library Call Stack (most recent call first): CMakeLists.txt:14 (find_package)

Any idea on why it can't locate it correctly? Anything would help really.

Thank you.

Compile error with cef_binary_3.2171.1979_macosx64

I am trying to resolve issue #8 by upgrading to a more current version of CEF. I am not much of a C developer so could you help me troubleshoot this error? Thanks, G

Scanning dependencies of target cef-bootstrap
[ 91%] Building CXX object plugins/obs-browser/CMakeFiles/cef-bootstrap.dir/cef-bootstrap/main.cpp.o
[ 91%] Building CXX object plugins/obs-browser/CMakeFiles/cef-bootstrap.dir/shared/browser-app.cpp.o
[ 92%] Linking CXX executable "CEF Helper.app/Contents/MacOS/CEF Helper"
Undefined symbols for architecture x86_64:
  "std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::size() const", referenced from:
      cef::logging::operator<<(std::ostream&, wchar_t const*) in libcef_dll_wrapper.a(cef_logging.o)
  "std::string::c_str() const", referenced from:
      cef::logging::LogMessage::~LogMessage() in libcef_dll_wrapper.a(cef_logging.o)
  "std::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::str() const", referenced from:
      cef::logging::LogMessage::~LogMessage() in libcef_dll_wrapper.a(cef_logging.o)
      std::string* cef::logging::MakeCheckOpString<int, int>(int const&, int const&, char const*) in libcef_dll_wrapper.a(cef_logging.o)
      std::string* cef::logging::MakeCheckOpString<unsigned long, unsigned long>(unsigned long const&, unsigned long const&, char const*) in libcef_dll_wrapper.a(cef_logging.o)
      std::string* cef::logging::MakeCheckOpString<unsigned long, unsigned int>(unsigned long const&, unsigned int const&, char const*) in libcef_dll_wrapper.a(cef_logging.o)
      std::string* cef::logging::MakeCheckOpString<unsigned int, unsigned long>(unsigned int const&, unsigned long const&, char const*) in libcef_dll_wrapper.a(cef_logging.o)
      std::string* cef::logging::MakeCheckOpString<std::string, std::string>(std::string const&, std::string const&, char const*) in libcef_dll_wrapper.a(cef_logging.o)
  "std::allocator<char>::allocator()", referenced from:
      cef::logging::(anonymous namespace)::safe_strerror(int) in libcef_dll_wrapper.a(cef_logging.o)
  "std::allocator<char>::~allocator()", referenced from:
      cef::logging::(anonymous namespace)::safe_strerror(int) in libcef_dll_wrapper.a(cef_logging.o)
  "std::allocator<wchar_t>::allocator()", referenced from:
      cef::logging::operator<<(std::ostream&, wchar_t const*) in libcef_dll_wrapper.a(cef_logging.o)
  "std::allocator<wchar_t>::~allocator()", referenced from:
      cef::logging::operator<<(std::ostream&, wchar_t const*) in libcef_dll_wrapper.a(cef_logging.o)
  "std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::basic_string(wchar_t const*, std::allocator<wchar_t> const&)", referenced from:
      cef::logging::operator<<(std::ostream&, wchar_t const*) in libcef_dll_wrapper.a(cef_logging.o)
  "std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::~basic_string()", referenced from:
      cef::logging::operator<<(std::ostream&, wchar_t const*) in libcef_dll_wrapper.a(cef_logging.o)
  "std::ostream::operator<<(std::ostream& (*)(std::ostream&))", referenced from:
      cef::logging::LogMessage::~LogMessage() in libcef_dll_wrapper.a(cef_logging.o)
  "std::ostream::operator<<(int)", referenced from:
      std::string* cef::logging::MakeCheckOpString<int, int>(int const&, int const&, char const*) in libcef_dll_wrapper.a(cef_logging.o)
  "std::ostream::operator<<(unsigned int)", referenced from:
      std::string* cef::logging::MakeCheckOpString<unsigned long, unsigned int>(unsigned long const&, unsigned int const&, char const*) in libcef_dll_wrapper.a(cef_logging.o)
      std::string* cef::logging::MakeCheckOpString<unsigned int, unsigned long>(unsigned int const&, unsigned long const&, char const*) in libcef_dll_wrapper.a(cef_logging.o)
  "std::ostream::operator<<(unsigned long)", referenced from:
      std::string* cef::logging::MakeCheckOpString<unsigned long, unsigned long>(unsigned long const&, unsigned long const&, char const*) in libcef_dll_wrapper.a(cef_logging.o)
      std::string* cef::logging::MakeCheckOpString<unsigned long, unsigned int>(unsigned long const&, unsigned int const&, char const*) in libcef_dll_wrapper.a(cef_logging.o)
      std::string* cef::logging::MakeCheckOpString<unsigned int, unsigned long>(unsigned int const&, unsigned long const&, char const*) in libcef_dll_wrapper.a(cef_logging.o)
  "std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&)", referenced from:
      cef::logging::(anonymous namespace)::safe_strerror(int) in libcef_dll_wrapper.a(cef_logging.o)
  "std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()", referenced from:
      cef::logging::LogMessage::LogMessage(char const*, int, std::string*) in libcef_dll_wrapper.a(cef_logging.o)
      cef::logging::LogMessage::LogMessage(char const*, int, int, std::string*) in libcef_dll_wrapper.a(cef_logging.o)
      cef::logging::LogMessage::~LogMessage() in libcef_dll_wrapper.a(cef_logging.o)
      cef::logging::ErrnoLogMessage::~ErrnoLogMessage() in libcef_dll_wrapper.a(cef_logging.o)
  "std::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::basic_ostringstream(std::_Ios_Openmode)", referenced from:
      cef::logging::LogMessage::LogMessage(char const*, int, int) in libcef_dll_wrapper.a(cef_logging.o)
      cef::logging::LogMessage::LogMessage(char const*, int, std::string*) in libcef_dll_wrapper.a(cef_logging.o)
      cef::logging::LogMessage::LogMessage(char const*, int, int, std::string*) in libcef_dll_wrapper.a(cef_logging.o)
      std::string* cef::logging::MakeCheckOpString<int, int>(int const&, int const&, char const*) in libcef_dll_wrapper.a(cef_logging.o)
      std::string* cef::logging::MakeCheckOpString<unsigned long, unsigned long>(unsigned long const&, unsigned long const&, char const*) in libcef_dll_wrapper.a(cef_logging.o)
      std::string* cef::logging::MakeCheckOpString<unsigned long, unsigned int>(unsigned long const&, unsigned int const&, char const*) in libcef_dll_wrapper.a(cef_logging.o)
      std::string* cef::logging::MakeCheckOpString<unsigned int, unsigned long>(unsigned int const&, unsigned long const&, char const*) in libcef_dll_wrapper.a(cef_logging.o)
      ...
  "std::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::~basic_ostringstream()", referenced from:
      cef::logging::LogMessage::~LogMessage() in libcef_dll_wrapper.a(cef_logging.o)
      std::string* cef::logging::MakeCheckOpString<int, int>(int const&, int const&, char const*) in libcef_dll_wrapper.a(cef_logging.o)
      std::string* cef::logging::MakeCheckOpString<unsigned long, unsigned long>(unsigned long const&, unsigned long const&, char const*) in libcef_dll_wrapper.a(cef_logging.o)
      std::string* cef::logging::MakeCheckOpString<unsigned long, unsigned int>(unsigned long const&, unsigned int const&, char const*) in libcef_dll_wrapper.a(cef_logging.o)
      std::string* cef::logging::MakeCheckOpString<unsigned int, unsigned long>(unsigned int const&, unsigned long const&, char const*) in libcef_dll_wrapper.a(cef_logging.o)
      std::string* cef::logging::MakeCheckOpString<std::string, std::string>(std::string const&, std::string const&, char const*) in libcef_dll_wrapper.a(cef_logging.o)
  "std::_Rb_tree_decrement(std::_Rb_tree_node_base*)", referenced from:
      std::_Rb_tree_iterator<std::pair<CefStringBase<CefStringTraitsUTF16> const, CefStringBase<CefStringTraitsUTF16> > >::operator--() in libcef_dll_wrapper.a(transfer_util.o)
  "std::_Rb_tree_increment(std::_Rb_tree_node_base const*)", referenced from:
      std::_Rb_tree_const_iterator<std::pair<CefStringBase<CefStringTraitsUTF16> const, CefStringBase<CefStringTraitsUTF16> > >::operator++() in libcef_dll_wrapper.a(transfer_util.o)
  "std::__throw_length_error(char const*)", referenced from:
      std::vector<CefStringBase<CefStringTraitsUTF16>, std::allocator<CefStringBase<CefStringTraitsUTF16> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<CefStringBase<CefStringTraitsUTF16>*, std::vector<CefStringBase<CefStringTraitsUTF16>, std::allocator<CefStringBase<CefStringTraitsUTF16> > > >, CefStringBase<CefStringTraitsUTF16> const&) in libcef_dll_wrapper.a(transfer_util.o)
      std::vector<CefRefPtr<CefV8Value>, std::allocator<CefRefPtr<CefV8Value> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<CefRefPtr<CefV8Value>*, std::vector<CefRefPtr<CefV8Value>, std::allocator<CefRefPtr<CefV8Value> > > >, CefRefPtr<CefV8Value> const&) in libcef_dll_wrapper.a(v8handler_cpptoc.o)
      std::vector<long long, std::allocator<long long> >::_M_insert_aux(__gnu_cxx::__normal_iterator<long long*, std::vector<long long, std::allocator<long long> > >, long long const&) in libcef_dll_wrapper.a(browser_ctocpp.o)
      std::vector<CefPageRange, std::allocator<CefPageRange> >::_M_insert_aux(__gnu_cxx::__normal_iterator<CefPageRange*, std::vector<CefPageRange, std::allocator<CefPageRange> > >, CefPageRange const&) in libcef_dll_wrapper.a(print_settings_ctocpp.o)
      std::vector<CefDraggableRegion, std::allocator<CefDraggableRegion> >::_M_insert_aux(__gnu_cxx::__normal_iterator<CefDraggableRegion*, std::vector<CefDraggableRegion, std::allocator<CefDraggableRegion> > >, CefDraggableRegion const&) in libcef_dll_wrapper.a(drag_handler_cpptoc.o)
      std::vector<CefRect, std::allocator<CefRect> >::_M_insert_aux(__gnu_cxx::__normal_iterator<CefRect*, std::vector<CefRect, std::allocator<CefRect> > >, CefRect const&) in libcef_dll_wrapper.a(render_handler_cpptoc.o)
      std::vector<CefRefPtr<CefPostDataElement>, std::allocator<CefRefPtr<CefPostDataElement> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<CefRefPtr<CefPostDataElement>*, std::vector<CefRefPtr<CefPostDataElement>, std::allocator<CefRefPtr<CefPostDataElement> > > >, CefRefPtr<CefPostDataElement> const&) in libcef_dll_wrapper.a(post_data_ctocpp.o)
      ...
  "std::_Rb_tree_insert_and_rebalance(bool, std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::_Rb_tree_node_base&)", referenced from:
      std::_Rb_tree<CefStringBase<CefStringTraitsUTF16>, std::pair<CefStringBase<CefStringTraitsUTF16> const, CefStringBase<CefStringTraitsUTF16> >, std::_Select1st<std::pair<CefStringBase<CefStringTraitsUTF16> const, CefStringBase<CefStringTraitsUTF16> > >, std::less<CefStringBase<CefStringTraitsUTF16> >, std::allocator<std::pair<CefStringBase<CefStringTraitsUTF16> const, CefStringBase<CefStringTraitsUTF16> > > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<CefStringBase<CefStringTraitsUTF16> const, CefStringBase<CefStringTraitsUTF16> > const&) in libcef_dll_wrapper.a(transfer_util.o)
  "std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)", referenced from:
      cef::logging::LogMessage::~LogMessage() in libcef_dll_wrapper.a(cef_logging.o)
  "std::basic_ostream<char, std::char_traits<char> >& std::operator<<<std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)", referenced from:
      CefExecuteProcess(CefMainArgs const&, CefRefPtr<CefApp>, void*) in libcef_dll_wrapper.a(libcef_dll_wrapper.o)
      CefInitialize(CefMainArgs const&, CefStructBase<CefSettingsTraits> const&, CefRefPtr<CefApp>, void*) in libcef_dll_wrapper.a(libcef_dll_wrapper.o)
      CefShutdown() in libcef_dll_wrapper.a(libcef_dll_wrapper.o)
      CefGetGeolocation(CefRefPtr<CefGetGeolocationCallback>) in libcef_dll_wrapper.a(libcef_dll_wrapper.o)
      CefAddCrossOriginWhitelistEntry(CefStringBase<CefStringTraitsUTF16> const&, CefStringBase<CefStringTraitsUTF16> const&, CefStringBase<CefStringTraitsUTF16> const&, bool) in libcef_dll_wrapper.a(libcef_dll_wrapper.o)
      CefRemoveCrossOriginWhitelistEntry(CefStringBase<CefStringTraitsUTF16> const&, CefStringBase<CefStringTraitsUTF16> const&, CefStringBase<CefStringTraitsUTF16> const&, bool) in libcef_dll_wrapper.a(libcef_dll_wrapper.o)
      CefParseURL(CefStringBase<CefStringTraitsUTF16> const&, CefStructBase<CefURLPartsTraits>&) in libcef_dll_wrapper.a(libcef_dll_wrapper.o)
      ...
  "std::basic_ostream<char, std::char_traits<char> >& std::operator<<<char, std::char_traits<char>, std::allocator<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)", referenced from:
      cef::logging::LogMessage::LogMessage(char const*, int, std::string*) in libcef_dll_wrapper.a(cef_logging.o)
      cef::logging::LogMessage::LogMessage(char const*, int, int, std::string*) in libcef_dll_wrapper.a(cef_logging.o)
      cef::logging::ErrnoLogMessage::~ErrnoLogMessage() in libcef_dll_wrapper.a(cef_logging.o)
      std::string* cef::logging::MakeCheckOpString<std::string, std::string>(std::string const&, std::string const&, char const*) in libcef_dll_wrapper.a(cef_logging.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [plugins/obs-browser/CEF Helper.app/Contents/MacOS/CEF Helper] Error 1
make[1]: *** [plugins/obs-browser/CMakeFiles/cef-bootstrap.dir/all] Error 2
make: *** [all] Error 2

Missing JS Function: getVisibilityState

Would be nice if there was a function similar to getCurrentScene that would return the visibility state.

// register the callback
window.obsstudio.getVisibilityState(function callback(state) {
    // Called after the BrowerSource's visibility state is retrieved
});

image "error" event does not work on OBS but it does work on regular chrome

Tried to do a simple slideshow that I could use as a browser source on my stream. It would show every image within a folder, it would keep looping until it tries to load an image that does not exist, then goes back to the first one.

Chrome does show file not found error for local images:
image

I used an eventListener to look for when this happens:

selector.img.addEventListener("error", function () {
        console.log("error");
    });

And it works just as intended, it goes back to first image, no problems. Except when using BrowserSource. It goes to the last image but it won't fire the image "error" event.

Also, logging in with the remote debugger on OBS does not log any file not found
image
I've used both "load" and "error", but only "load" seems to work. Was this purposefully removed or is it unintended?

Complie on Win64 got error:LNK2019 in jansson.lib. need /MT not /MD ?

Error LNK2019 unresolved external symbol __imp_fgetc referenced in function json_loadf cef-bootstrap E:\GitHub\obs-studio\build\plugins\obs-browser\jansson.lib(load.obj)

When complied on vs2015 win64, I got above error on jansson.lib.
And others warnings:

Warning LNK4098 defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library cef-bootstrap E:\GitHub\obs-studio\build\plugins\obs-browser\LINK

Warning LNK4217 locally defined symbol memmove imported in function json_array_insert_new cef-bootstrap E:\GitHub\obs-studio\build\plugins\obs-browser\jansson.lib(value.obj) 1

Warning LNK4217 locally defined symbol _errno imported in function json_load_file cef-bootstrap E:\GitHub\obs-studio\build\plugins\obs-browser\jansson.lib(load.obj) 1

Local Files don't reload when updated

I posted this bug on the OBS Studio project, but figure I'd post it here as well.

https://obsproject.com/mantis/view.php?id=808

The basic issue is that if a local HTML file is changed and updated, the file isn't automatically reloaded when the timestamp has been modified. Manually having to go and refresh the file or switch scenes to get it to reload isn't fitting our use case. We stream a lot of X-Wing Miniatures games, and are updating on screen information about ships and stats and storing them in HTML files. It would be nice to have an option to force the files to reload if they have changed on disk, like the Text Source files do.

Also, I have tried using the META tags and javascript to force a refresh but the browser source seems to always load a cached version and only reloads if you force it to through the properties or through switching scenes.

A sample is attached to the OBS studio bug report that can be used.

Console logging

Any chance of forwarding console output into the OBS log file?

Was implemented in the browser plugin for OBS classic, and is useful for determining unique issues when a page is loaded with CEF.

Make FPS field as an expression

I want to be able to type fps text in FPS field of browser layer, that way fps of this layer will be the same as set in OBS settings

And if its possible, it also would be handy to type something simple like this fps / 2, so if OBS fps settings is set to 60, browser layer will render at 30

This days we have more and more browser layers in OBS, and if I need to change FPS of OBS studio, to free some performance, I also want to go through all the browser layers and change FPS field

Thanks.

StreamLabs Bit Cup / Tip Jar Performance with Browser Source

Browser Source : 1.29
OBS Studio : 18.0.1 64bit

Processor : Core i7 860 (old, yes, but this is in a dedicated Broadcasting system. games are on a different PC and I capture via HDMI)

I noticed that while broadcasting, OBS said it was using around 60% - 70% CPU, but that my CPU itself was getting pegged at around 95% - 100%

Investigating, I narrowed it down to a cef-bootstrap.exe process that was handling our StreamLabs Bit Cup / Tip Jar.

Every other browser source that I use (hell, I wrote all of them but the Bit Cup) use around 1% MAX each when in idle. The bit cup, however, is using around 20% when in idle. When I run the same Bit Cup source directly in a browser (not identical to CEF, but it is a way to test it at least), it uses 1% - 2% when idle.

Has anyone else noticed any performance issues like this with the Muxy and StreamLabs bit cups, or is this more of a problem with the cups themselves not having good optimizations?

Draw different things on stream and in interact window?

I'm not sure how interacting with the browser source works internally (if it's drawn independently), but if it's possible, I would love to see a property window.obsstudio.isInteractive that could be used to let a web app draw different things in the window for interaction and the source as later seen on stream.

It could show additional (but perhaps confidential) info to the broadcaster, or simply to hide buttons to trigger actions on the page to the viewers.

BTW: Is there any chance that one could interact directly with the browser source preview instead of in a separate window? For certain applications it would probably be sufficient if the preview could receive left and right clicks to trigger actions (based on where you clicked, to simulate a button).

Download Files into a proper Location

At the moment files get downloaded into your temp folder with a random name. That is unfortunate for my use case, as users might want to save their changes.

Crash Report

Hey there!

As I was working today, I had OBS Studio crash on me, and the fault seems to have been in libcef.dll. Figured I'd share the log here just in case -- feel free to close the issue if this isn't particularly helpful.

When the crash happened, I had recently been opening and closing other apps on my PC (including the webserver which was serving the page loaded into obs-browser) to stress test a graphic. The crash didn't seem to happen in immediate response to any specific action though. It occurred a few seconds after I had last sent an input to my PC.

https://gist.github.com/Lange/7366a249a1c7f31241ffb18e8f661b84

Missing widevinecdm.dll

Hello! I'm from the Beam team working on OBS Studio FTL (our fork of OBS). I recent updated the browser plugin we include version to 1.29, but some of our users are reporting issues opening OBS. Before the main UI shows, they get an error dialog saying "widevinecdm.dll" is missing from their system.

(see this thread)
mixer/obs-studio-ftl#77

We use your prebuilt plugin, and I see in your package you include widevinecdmadapter.dll which depends on widevinecdm.dll. But what I can't figure out is why this causes a problem on some users computers and not others. Do you have any suggestions? Is there a reason you don't also package windevinecdm.dll?

getSceneName() ?

Hello,
can i get a scene name on page load? without changing the the scene event?

Obs browser wan't "loading" in obs-studio

Hello!
I'am trying make some changes in obs-studio+obs-browser and got problem:
After succefull build CEF and obs-studio (like described in README) I'am starting obs-studio (obs64.exe) and there is no plugin "BrowserSource"
(I'am set BUILD_BROWSER = true, and it's was in solution and also it's exists in compiled files)
Can't understand what's wrong =\

P.S. when I just load files from here https://github.com/kc5nra/obs-browser/releases in plugin folder - all work's fine

It's 2017 can we --enable-gpu by default yet?

We have a "soon-to-launch" service which enables users to display webGL based content using OBS and other streaming applications. OBS unfortunately still forces users to set a flag in their startup links --enable-gpu.

Making this flag a manual setting is hindering innovation by forcing services to use deprecated fallbacks like Canvas for users not knowledgeable enough or willing to enable this setting manually.

PC's which are able and ready to use webGL are wasting CPU cycles and hurting the performance of OBS by using Canvas polyfills.

Just recently, Canvas renderer has been abstracted and marked as deprecated by the ThreeJS library, which means this polyfill will not even be an option for future ThreeJS versions to come - this will severally limit future development capabilities.

I think the majority of users now will have PC's well equipped for enabling GPU by default. I think, at this point in time we should be manually setting a flag that does quite the opposite...

--disable-gpu

Refresh page if server was not available

if i use local server, and launch obs first, and only then my local server
obs doesn't refresh page after some timeout, if server was not available

in chrome, it shows "This site can’t be reached" page, and after some timeout it tries again

i wish there would be the same behaviour

having trouble with OBS Mac 0.11.2 and multiple browser sources for twitchalerts.com

https://obsproject.com/mantis/view.php?id=286

I have the follow/donate/host alerts working just fine with browser source on the Mac 0.11.2. However, when I try to add the donation goal or recent donations widgets, they always just display as empty "black" boxes. I know the URLs work because I can open them in other browsers just fine. Any idea what is going on or how to solve it? I am not seeing any errors in the logs related to CEF at all. Thanks!

  1. Remove all of jobs-studio settings folder.
  2. Reinstall OBS 0.11.2 from home page.
  3. Reinstall Browser Plugin 1.0.10 from https://obsproject.com/forum/resources/browser-plugin.115/
  4. Add a new browser source and change URL to: http://www.twitchalerts.com/widgets/donation-goal?token=65C6E84B2D3011756789
  5. I only see a blank black box where I should see a donation goal widget.

Additional Information OS X 10.10.5 (14F27)
MacBook Pro (Retina, 15-inch, Mid 2015)
AMD Radeon R9 M370X 2048 MB

Browser sometimes showing last frame briefly when reactivating source

I've been working on a homemade scene overlay system to teach myself OBS and CSS/JS at the same time using the browser plugin. I have a simple HTML file that starts with the overlay elements offscreen that slide onto the screen when switching to its scene. I did this using the "Shutdown when not active" setting and it works well most of the time but will sometimes flash the last frame shown before the source disabled when disabling and reactivating the plugin. I tested this with my overlay by disabling it, changing some text and re-enabling it. When it flashes, it shows the text from before I made the changes.
I don't know much about how OBS plugins or CEF work, but it looks like the plugin is giving OBS an old frame before the browser can render a new one. Here's a video.
At the end of the video, I changed the text on the overlay and the flashed frame didn't have the new text.

I played with putting load on my computer and it happened more consistently when recording (which increased CPU usage to ~35-45% with a ton of videos on screen), so it might depend on how much load the computer is under.

Is this part of how CEF works? Is it possible to make the plugin wait until it has a fresh browser frame? Is this intended?

This happens when going between scenes and when manually toggling the source.
Windows 10 w/ Anniversary update (though I had the issue before the Anniversary update)
Intel i7-4702MQ kept at 2.5GHz because it's a poorly-cooled laptop in Summer (~3.2GHz boost, 2.2GHz base)
Tested in OBS Studio 0.15.4 and 0.15.2 with bundled browser plugin and 1.24 downloaded straight from Github

I'll do my best to provide more information if any is needed.

Also, I think "shutdown" is used as a noun and "shut down" is used as a verb. Just a minor gripe, though.

Getting the OBS name of the source

The getCurrentSource() method gives info on the current OBS scene, but is there any way to get the name in OBS of the BrowserSource itself? Not the <title> or the url of the html file but the name it has been given in the Sources listing.

Elements are clipped to their bounding box when promoted to a new layer.

When an element is promoted to its own compositing layer (via will-change, transform, or otherwise), its rendering becomes clipped to its bounding box. This can often break effects such as drop shadows, as seen in the image below:

demo
JSBin used to test

Interestingly, this problem is not present in the sample cefclient.exe provided on CEFBuilds.com. Does this indicate that it is a problem in obs-browser's specific implementation of CEF, and not a problem in CEF itself?

Additionally, this exact same issue also happens in vMix, which uses the same build of CEF as far as I can tell. I find it odd that both vMix and obs-browser would somehow arrive at this same problem independently, if it indeed is not a problem in CEF itself.

IME can't input chinese or japanese except ascii characters

Version:
Windows 7
cef_binary_3.2987.1592.gfbafd4e_windows64
obsstudio 17.0.2
pluginVersion 1.24.0
I can't input any asia characters(chinese or japanese) by IME. In the browser, it's only show ascii characters, not right word.When I press keys, in obs ui there is a label for preview. But in browser plugin the label is never popup. please see attach pic/
obs ui:
image
Browser plugin:
image

I found that cef has been sopport for all text input types. see attach thread
https://bitbucket.org/chromiumembedded/cef/issues/1610/ime-not-positioned-correctly-in-windows

Problems with local files with diacritic chars in path

Hello.

Problem: OBS BrowserSource source local file with diacritic chars in path are empty.

Behaviour example: I have two files somepage.html and image.png, copied both in two folders, D:\Video and D:\Vídeo, resulting four files (D:\Video\image.png, D:\Video\somepage.html, D:\Vídeo\image.png, D:\Vídeo\somepage.html) which all of them are added to a scene in lastest OBS Studio with the corresponding adding source -> image in case of pngs, and BrowserSource in case of htmls, both with the same configuration of size and CSS.

Result example: D:\Video\image.png, D:\Video\somepage.html and D:\Vídeo\image.png sources are showing normal in previsualization, but D:\Vídeo\somepage.html source is empty.

Details:

  • This need to be a problem with BrowserSource because with image sources in OBS doesn't happen, related with character codification what are not accepting well diacritic characters and maybe other international characters.
  • Maybe related in log (should be it 'es-ES' in my case?):
Loading module: obs-browser.dll
Failed to load 'en-US' text for module: 'obs-browser.dll'
  • "Vídeo" is the correct spanish word for "Video", i only use it as example of acute in a typical spanish word used with OBS.

Full log:

22:01:28.400: CPU Name: Intel(R) Pentium(R) 4 CPU 3.06GHz
22:01:28.401: CPU Speed: 3065MHz
22:01:28.401: Physical Cores: 1, Logical Cores: 2
22:01:28.401: Physical Memory: 1023MB Total, 314MB Free (NOTE: 4 gigs max is normal for 32bit programs)
22:01:28.401: Windows Version: 6.1 Build 7601 (revision: 23392)
22:01:28.401: Aero is Enabled
22:01:28.608: OBS 0.14.2 (windows)
22:01:28.609: ---------------------------------
22:01:28.611: ---------------------------------
22:01:28.611: audio settings reset:
22:01:28.611:   samples per sec: 44100
22:01:28.611:   speakers:        2
22:01:28.616: ---------------------------------
22:01:28.616: Initializing D3D11..
22:01:28.616: Available Video Adapters: 
22:01:28.671:   Adapter 1: NVIDIA GeForce 8600 GT 
22:01:28.671:     Dedicated VRAM: 1058603008
22:01:28.671:     Shared VRAM:    268103680
22:01:28.672:     output 1: pos={0, 0}, size={1280, 1024}, attached=true
22:01:28.691: Loading up D3D11 on adapter NVIDIA GeForce 8600 GT  (0)
22:01:28.739: D3D11 loaded sucessfully, feature level used: 40960
22:01:32.336: ---------------------------------
22:01:32.337: video settings reset:
22:01:32.337:   base resolution:   1280x720
22:01:32.337:   output resolution: 1280x720
22:01:32.337:   fps:               30/1
22:01:32.337:   format:            NV12
22:01:32.348: ---------------------------------
22:01:32.364: Loading module: coreaudio-encoder.dll
22:01:32.366: [CoreAudio encoder]: Failed loading library 'CoreAudioToolbox.dll'
22:01:32.366: [CoreAudio encoder]: Couldn't load CoreAudio AAC encoder
22:01:32.366: ---------------------------------
22:01:32.377: Required module function 'obs_module_load' in module '../../obs-plugins/32bit/ffmpegsumo.dll' not found, loading of module failed
22:01:32.377: ---------------------------------
22:01:32.388: Loading module: image-source.dll
22:01:32.389: ---------------------------------
22:01:33.928: Required module function 'obs_module_load' in module '../../obs-plugins/32bit/libcef.dll' not found, loading of module failed
22:01:33.928: ---------------------------------
22:01:33.939: Required module function 'obs_module_load' in module '../../obs-plugins/32bit/libEGL.dll' not found, loading of module failed
22:01:33.939: ---------------------------------
22:01:33.955: Required module function 'obs_module_load' in module '../../obs-plugins/32bit/libGLESv2.dll' not found, loading of module failed
22:01:33.955: ---------------------------------
22:01:33.969: Loading module: obs-browser.dll
22:01:33.969: Failed to load 'en-US' text for module: 'obs-browser.dll'
22:01:33.969: ---------------------------------
22:01:33.979: Loading module: obs-ffmpeg.dll
22:01:33.998: LoadLibrary failed for 'nvEncodeAPI.dll', error: 126
22:01:33.998: ---------------------------------
22:01:34.014: Loading module: obs-filters.dll
22:01:34.047: ---------------------------------
22:01:34.060: Loading module: obs-outputs.dll
22:01:34.062: ---------------------------------
22:01:34.077: Loading module: obs-qsv11.dll
22:01:35.110: ---------------------------------
22:01:35.155: Loading module: obs-transitions.dll
22:01:35.158: ---------------------------------
22:01:35.165: Loading module: obs-x264.dll
22:01:35.167: ---------------------------------
22:01:35.198: Loading module: rtmp-services.dll
22:01:35.207: ---------------------------------
22:01:35.221: Loading module: text-freetype2.dll
22:01:35.276: ---------------------------------
22:01:35.302: Loading module: win-capture.dll
22:01:36.721: load_graphics_offsets: Failed to start 'get-graphics-offsets64.exe'
22:01:36.721: ---------------------------------
22:01:36.763: Loading module: win-decklink.dll
22:01:36.796: No blackmagic support
22:01:36.796: Failed to start search for DeckLink devices
22:01:36.796: ---------------------------------
22:01:36.816: Loading module: win-dshow.dll
22:01:36.864: ---------------------------------
22:01:36.900: Loading module: win-mf.dll
22:01:36.916: [Media Foundation encoder]: plugin is disabled for performance reasons on Windows versions less than 8
22:01:36.918: ---------------------------------
22:01:36.931: Loading module: win-wasapi.dll
22:01:36.934: =====================================================================
22:01:36.934: output 'simple_stream' (rtmp_output) created
22:01:36.934: encoder 'simple_h264_stream' (obs_x264) created
22:01:36.935: AAC encoder bitrate mapping:
22:01:36.935:    32 kbit/s: 'Codificador AAC FFmpeg predeterminado' (ffmpeg_aac)
22:01:36.935:    64 kbit/s: 'Codificador AAC FFmpeg predeterminado' (ffmpeg_aac)
22:01:36.935:    96 kbit/s: 'Codificador AAC FFmpeg predeterminado' (ffmpeg_aac)
22:01:36.935:   128 kbit/s: 'Codificador AAC FFmpeg predeterminado' (ffmpeg_aac)
22:01:36.935:   160 kbit/s: 'Codificador AAC FFmpeg predeterminado' (ffmpeg_aac)
22:01:36.935:   192 kbit/s: 'Codificador AAC FFmpeg predeterminado' (ffmpeg_aac)
22:01:36.935:   224 kbit/s: 'Codificador AAC FFmpeg predeterminado' (ffmpeg_aac)
22:01:36.935:   256 kbit/s: 'Codificador AAC FFmpeg predeterminado' (ffmpeg_aac)
22:01:36.935:   288 kbit/s: 'Codificador AAC FFmpeg predeterminado' (ffmpeg_aac)
22:01:36.935:   320 kbit/s: 'Codificador AAC FFmpeg predeterminado' (ffmpeg_aac)
22:01:36.935: encoder 'simple_aac' (ffmpeg_aac) created
22:01:36.935: output 'simple_file_output' (ffmpeg_muxer) created
22:01:36.936: service 'default_service' (rtmp_custom) created
22:01:36.948: All scene data cleared
22:01:36.948: ------------------------------------------------
22:01:37.086: WASAPI: Device 'Altavoces (Realtek High Definition Audio)' initialized
22:01:37.086: source 'Audio del escritorio' (wasapi_output_capture) created
22:01:37.139: adding 23 milliseconds of audio buffering, total audio buffering is now 23 milliseconds
22:01:37.178: WASAPI: Device 'Micrófono (Realtek High Definition Audio)' initialized
22:01:37.178: source 'Mic/Aux' (wasapi_input_capture) created
22:01:37.243: adding 46 milliseconds of audio buffering, total audio buffering is now 69 milliseconds
(...)
22:01:38.469: source 'Test Acentos' (scene) created
22:01:38.718: source 'Imagen' (image_source) created
22:01:38.840: source 'Imagen 1' (image_source) created
22:01:38.960: source 'BrowserSource' (browser_source) created
22:01:38.967: source 'BrowserSource 1' (browser_source) created
22:01:39.729: == Profiler Results =============================
22:01:39.729: run_program_init: 11676.1 ms
22:01:39.729:  ┣OBSApp::AppInit: 10.882 ms
22:01:39.729:  ┃ ┗OBSApp::InitLocale: 7.751 ms
22:01:39.729:  ┗OBSApp::OBSInit: 11415.9 ms
22:01:39.729:    ┣obs_startup: 3.612 ms
22:01:39.730:    ┗OBSBasic::OBSInit: 11122.2 ms
22:01:39.730:      ┣OBSBasic::InitBasicConfig: 1.933 ms
22:01:39.730:      ┣OBSBasic::ResetAudio: 0.907 ms
22:01:39.730:      ┣OBSBasic::ResetVideo: 3733.89 ms
22:01:39.730:      ┣OBSBasic::InitOBSCallbacks: 0.037 ms
22:01:39.730:      ┣OBSBasic::InitHotkeys: 0.166 ms
22:01:39.730:      ┣obs_load_all_modules: 4591.06 ms
22:01:39.731:      ┃ ┣obs_init_module(coreaudio-encoder.dll): 1.327 ms
22:01:39.731:      ┃ ┣obs_init_module(image-source.dll): 0.008 ms
22:01:39.731:      ┃ ┣obs_init_module(obs-browser.dll): 0.208 ms
22:01:39.731:      ┃ ┣obs_init_module(obs-ffmpeg.dll): 2.754 ms
22:01:39.731:      ┃ ┣obs_init_module(obs-filters.dll): 0.027 ms
22:01:39.731:      ┃ ┣obs_init_module(obs-outputs.dll): 0.014 ms
22:01:39.731:      ┃ ┣obs_init_module(obs-qsv11.dll): 1029.84 ms
22:01:39.731:      ┃ ┣obs_init_module(obs-transitions.dll): 0.055 ms
22:01:39.731:      ┃ ┣obs_init_module(obs-x264.dll): 0.017 ms
22:01:39.731:      ┃ ┣obs_init_module(rtmp-services.dll): 4.398 ms
22:01:39.732:      ┃ ┣obs_init_module(text-freetype2.dll): 52.321 ms
22:01:39.732:      ┃ ┣obs_init_module(win-capture.dll): 1385.67 ms
22:01:39.732:      ┃ ┣obs_init_module(win-decklink.dll): 31.736 ms
22:01:39.732:      ┃ ┣obs_init_module(win-dshow.dll): 30.092 ms
22:01:39.732:      ┃ ┣obs_init_module(win-mf.dll): 3.606 ms
22:01:39.732:      ┃ ┣obs_init_module(win-wasapi.dll): 0.036 ms
22:01:39.732:      ┃ ┗reset_win32_symbol_paths: 1.046 ms
22:01:39.732:      ┣OBSBasic::ResetOutputs: 1.182 ms
22:01:39.732:      ┣OBSBasic::CreateHotkeys: 0.082 ms
22:01:39.733:      ┣OBSBasic::InitService: 0.907 ms
22:01:39.733:      ┣OBSBasic::InitPrimitives: 1.1 ms
22:01:39.734:      ┗OBSBasic::Load: 2331.74 ms
22:01:39.736: adding 92 milliseconds of audio buffering, total audio buffering is now 162 milliseconds
22:01:39.737: =================================================
22:01:40.830: Update check: last known remote version is 0.14.2
22:01:49.802: adding 23 milliseconds of audio buffering, total audio buffering is now 185 milliseconds
22:01:51.103: adding 46 milliseconds of audio buffering, total audio buffering is now 232 milliseconds

PD.: I know the test computer is old, i use it only for testing purposes. In my full work computer for OBS Studio i have the same problem.

Thanks in advance.

Per-instance BrowserSource Chromium Flags

I know that you can pass flags to the Chromium instance via opening obs with them but this isn't ideal from a security standpoint.

My current use case is I have two BrowserSource instances, one for a local page that can be whole-heartedly trusted while another, which points to a remote site, that can't be. I'd like to be able to pass the --disable-web-security flag to the local-page's instance, while the remote-page instance would still enforce such.

I'd suggest an additional input box for specifying flags below the custom CSS input.

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.