Open FinixFighter opened 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.
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:
A few possible approaches. All of which would require substantial development:
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.
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
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 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/
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.
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
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?