charlielee / boats-animator

Stop motion animation program created using Electron
http://charlielee.uk/boats-animator
GNU General Public License v3.0
116 stars 18 forks source link

DSLR support #276

Open FinixFighter opened 3 years ago

FinixFighter commented 3 years ago

Hi! Are there any news about DSLR support? It would be great if I could use my Canon reflex, being able to trigger the shutter etc... I noticed that some software already do that, like for example Entangle (this is their website: https://entangle-photo.org/). I'm not highly skilled on these matters, but I know that Entangle is open source too, and if they implemented this, maybe Boats Animator could do something similar, taking inspiration from that software. What do you think?

charlielee commented 3 years ago

Hi @FinixFighter, I have looked into DSLR support before and unfortunately there isn't an easy cross-platform way of implementing this.

libgphoto2 has a wrapper for Node.js, but that's only supported on macOS/Linux and the majority of the app's users are on Windows.

https://github.com/lwille/node-gphoto2

Maybe one day, but for now the focus of the app is on webcams and other lower end devices.

charlielee commented 3 years ago

I have done some more research on DSLR support, and as a result will mark this issue as "long term". If this is ever implemented, it won't be for a long while. Some notes for the future:

Linux and macOS

Windows

A few possible approaches. All of which would require substantial development:

digiCamControl

Live view

There is a setting to enable a camera's live view feed to be streamed to a port. It is probably possible to embed this stream into Boats Animator.

Would need to run a check to see that this setting is set. Alternatively, it can be manually changed when the app isn't running via a JSON settings file.

Note: the live view stream only works while the GUI app is open, however the app can be set to minimised and as a tray icon.

Camera control

This is possible in a few different ways, but the best approach seems to be digiCamControl's single command system. This can be accessed in a few different ways, but the Remote Utility seems to offer better responses and error handling.

As with live view, the Remote Utility only works while the GUI app is open. I guess

Distribution

Using the remote utility, live view streaming and running the GUI app minimised to a tray icon, digiCamControl could be a very viable solution for Boats Animator, although a bit hacky. To make life easier, I would probably develop a separate digiCamControl Node.js wrapper.

I would distribute the app without digiCamControl included, and then prompt users to download digiCamControl when they try to select a non WebRTC device. A way of detecting these could be node-usb-detection.

gphoto2

gphoto2 has been ported as an msys2 package so in theory it should work on Windows. It would need to researched how to correctly generate a portable binary from this environment.

gphoto2 utilises libusb drivers which would complicate matters. A common way of installing libusb drivers for a given device is with Zadig. However, this would not be user-friendly at all. Downloading a separate application to install some random driver is not really in Boats Animator's spirit of being simple!

I would prefer it if the app automatically installed the correct driver for the user. Zadig's underlying library libwdi looks like it could do this, but would require a bunch of research to get to grips with.

It looks like darktable implements its Windows camera support in this way. https://www.darktable.org/about/faq/

Camera vendor SDKS

The final way I can see of implementing DSLR support is via each camera vendor's SDK. This is least desirable to me as the SDKs seem to be notoriously difficult to use, and I can't find any Node.js wrappers/bindings for them.

Plus I only have access to Canon hardware, so Canon cameras would probably be the only ones that could be supported if this approach was taken.

charliemartinez commented 2 years ago

Implementing compatibility with reflex cameras is necessary if you want to access professional animators in GNU/Linux (most don't use webcams)

If it helps to look at their codes, there are two applications that have achieved it:

https://github.com/wentasah/qstopmotion

https://salsa.debian.org/debian-phototools-team/entangle

All the best