Hacker News new | past | comments | ask | show | jobs | submit login
How to use your DSLR from 2008 as a webcam in 2022 (NixOS) (tomoliver.net)
179 points by revilotom on Nov 13, 2022 | hide | past | favorite | 64 comments



Note if the author reads this (perfect is the enemy of good, feel free to ignore): You can make udev run systemd services directly, replacing RUN=... by e.g. TAG+="systemd", ENV{SYSTEMD_WANTS}+="foo.service"

That might require you also remove the 'enabled = true' for the service, and make sure gphoto2 dies when the camera is unplugged?

Anyway, it was a nice read :)


Using your suggestion I ended up with the following for a Canon 7D:

  services.udev.extraRules = ''
    ACTION=="add", \
    ATTR{idVendor}=="04a9", \
    ATTR{idProduct}=="319a", \
    ENV{SYSTEMD_WANTS}+="external_webcam.service", \
    SUBSYSTEM=="usb", \
    TAG+="systemd"
  '';

  systemd.services.external_webcam = {
    enable = true;
    script = ''
      ${pkgs.gphoto2}/bin/gphoto2 --stdout --capture-movie |
        ${pkgs.ffmpeg}/bin/ffmpeg -i - -vcodec rawvideo -pix_fmt yuv420p -f v4l2  /dev/video0
    '';
    wantedBy = ["multi-user.target"];
  };
Worked first try! [1]

[1] https://gitlab.com/engmark/root/-/commit/ae59aad118e6effcf47...


Wow thanks for the suggestion! I knew there must be some way to do it with fewer steps but didn't quite figure out what it was so I really appreciate this comment. When I get a chance I'll test what you said out!


Make sure it doesn't end up stopping the service on system activation, if you do that.


Huh, I was solving similar problem some time ago. I needed to run some pulseaudio commands (to split stereo input into 2 mono ones) after USB device was reconnected and my solution was RUN script adding a systemd timer (the commands had to be ran after pulseaudio registered new device) that just ran it few seconds after device was connected


Is BindsTo= the right way to have systemd shut the service down if the device disappears?


It's been a while but yes BindsTo is a good idea if you can express the device in a reliable way. Unfortunately for USB devices the path will look like something that depends on the USB port it's been plugged in (I only have a sound card on my hands, but something like these two alternatives on two different ports):

    sys-devices-pci0000:00-0000:00:14.0-usb1-1\x2d4-1\x2d4:1.0-sound-card1-controlC1.device
    sys-devices-pci0000:00-0000:00:14.0-usb1-1\x2d1-1\x2d1:1.0-sound-card1-controlC1.device
notice the usb-`1-1:4` became `1-1:1`

That makes BindsTo unpractical unless you're sure you'll always plug in the camera on the same port everytime, so it might not be best.

This made me look up how I'd do this if the needs arise, so I haven't tried, but `StopWhenUnneeded=true` in the service definition looks like it would stop it properly when the device "wanting" it is gone? cf. https://unix.stackexchange.com/questions/528803/systemd-does...

I learned something new :)


If you have an iPhone+mac you can use continuity camera which is pretty seamless in comparison: https://support.apple.com/en-us/HT213244


There are lots of solutions that are more seamless than the DSLR, but which are vastly more expensive, including just buying a webcam proper. But the fact that you _can_ use the DSLR as your webcam is cool, and may save some folks money if they happen to have a DSLR laying around.


The problem with buying a webcam proper is that the industry has reached a "good enough" point where manufacturers will re-release essentially the same camera with no real improvements in resolution, hardware, or software.

I bought a Logitech webcam during the pandemic. Imagine my surprise when the webcam resolution was worse than the one built into my XPS 13.


This is frustrating, I thought that the pandemic was going to create a demand for high quality webcams. I'd settle for a 4K phone quality. I bought the Logitech Brio thinking I'd get better picture than my phone (since it's a dedicated camera), which was a bit of a disappointment. I don't think it's terrible, but I had higher expectations of it.


Smartphone's outer camera quality is what every manufacturer invest much now. It looks impossible to compete with, unless the sensor and lens are big.


thats exactly how i feel over the brio, picture is greate but i hoped for more


The XPS has a 1080p camera. Were you trying to buy a 4K webcam and accidentally bought the super cheap 720p Logitech sells?

Opal C1, Instalink, continuity cam/droidcam, and a DSLR/mirrorless setup like in this article are essentially your upgrade options if you don’t want to pay for a 4k Logitech.


There is DroidCam which works with an Android phone and Linux. The set-up is straightforward and it works great.

https://www.dev47apps.com/


Mine keeps disconnecting after a few seconds. DroidCam has never worked well for more than a minute for me.

Wish there was a FOSS alternative.


Not FOSS, but try also IP Webcam, it gives you a MJPEG stream and you can set it up on your computer.

I use https://github.com/agarciadom/ipwebcam-gst as a way to turn the MJPEG into a video device.


I've created PTP Webcam [1] during COVID to get DSLRs working for video conferencing on the Mac.

[1] https://ptpwebcam.org/


This works better than the Canon EOS Webcam utility for me, even though my DSLR isn't officially supported. It works fine in Zoom. Unfortunately it doesn't work in Quicktime. I'll take a look at some of the code signing info in your docs and see if I can fix it.


My understanding is that Quicktime Player has been in the SIP domain for recent OS releases, so it just won't load 3rd party libraries at all :/


If you have {Windows, Mac Linux} and {Android, iOS}, you can use Iriun: https://iriun.com


I kept trying to get this to work and failing. If others run into problems like me, note that this feature requires macOS Ventura, release last month.


If you have an iPhone and Windows PC, iVCam works great.


Similarly, I can recommend Reincubate Camo, works on macOS/Linux/Windows. It also has plenty manual camera settings to play around with to get the exact view you want, including focus/white balance/exposure/cropping and tons more that the Apple's official continuity functionality lacks.

Disclaimer: zero affiliation with the product (outside of being their happy customer). I simply found it way before the official continuity feature was even announced for macOS+iOS.


Also - discovered you can make an old iphone stream rtsp via app periscope HD.

Only gotcha is thermals...don't think it can run like that long term without active cooling


Any restrictions about how long you can keep it turned on? I tried to do this but found I'd need to flash the cam's firmware to override the 10min recording limit.

(I read that cameras which can record longer are taxed as video cameras, so they're deliberately crippled)


Magic Lantern will take care of that.

To accomplish what the OP does, I use a USB HDMI in, a mini HDMI to HDMI cable, and Magic Lantern on my Rebel. It works well.

Magic Lantern allows me to leave the camera in preview without overlays for indefinite time periods. It can also provide video this way, but heat can be an issue there…


Magic Lantern was a game changer that really helped expose thousands to amateur videography. The Canon 5D MkII was the start of a revolution (an to a lesser extend, the T3i+) and the Panasonic GH4 and then Sony Alpha lines really played a role in pushing those young people from hobby to actual product videos and commercials.


Normally you can leave live view (768x512 resolution, 0.4 MP in this case, usually not much higher for modern cameras) running indefinitely. Besides the low resolution especially on older cameras the readout for live view will use pixel skipping to conserve power at the expense of quality. This is why "the pro streamers" don't use the live view image, but instead go the HDMI-to-UVC route using the camera's video mode.


Unfortunately most cameras do not provide "clean" HDMI output. That is, the HDMI output contains camera UI symbols like focus points, battery state, lighting, etc. Configuration options to disable those UI symbols are generally not available, at best one can disable some of them. A model with "clean" HDMI is usually more expensive and you have to explicitly look for it as a feature.

Live view readout via USB is something that works far more often than HDMI.


You can sort-of "clean" whatever output you get from your camera because the symbols are typically around the periphery. Adjust focus+zoom so that your subject is within the rectangle that doesn't have symbols, take the camera output and put it through OBS with a crop filter and you've got something that's clean.


I’d expect pretty much any system camera from the last decade should include it


You are definitely expecting something that the camera makers' market segmentation does not provide. If you need clean HDMI, you can buy a camera that has it, but I estimate only a quarter of currently available DSLRs do.


Most cameras do? Especially if bought in the last ~5 years.

Nikon D750 also can do it, 2014.


Why recording limit? Leave it in live view, no need to record. Or is the HDMI output not active then?

I don't think this tax applies anymore.


Live view turns itself off after a period of time. I believe with my Nikon it's 30min.

For me, having to press the LV button twice an hour seemed more preferable than flashing the firmware.


Can be disabled


Live view auto shutoff can be disabled? No it can't[1], not without modified firmware that either doesn't exist[2] or is only available from sketchy mega uploads[3]. There are other[4] hacky workarounds, but nothing clean.

[1] https://www.reddit.com/r/Nikon/comments/c5wjg6/how_to_turnof...

[2] https://www.reddit.com/r/Nikon/comments/hqp2wu/any_way_to_tu...

[3] https://www.youtube.com/watch?v=gKSY0eEC5gM

[4] https://www.youtube.com/watch?v=jUrPd4b22Y4


You forgot to specify what camera you use. No need to extrapolate from your camera to all Nikons.


I said "with my Nikon". You said definitively that it "can be disabled". Your statement was incorrect - you were the one extrapolating.


Yes, because you didn't mention any camera model.


The webcam described in the article is so old, it has PAL/NTSC video out. Later generations switched to HDMI, but not all of them have a 'clean feed', so some information regarding exposure settings, battery level etc will remain in the picture.


I believe that the tax law changed in the last few years. Most cameras in use today still have the limit, even though many new (especially higher end) models have unlimited recording.


Even on long video calls (1-2 hours) I haven't had any problems but have not tested anything longer than that.


Did you read the article? The author's camera can't record video at all. He uses software that creates video from static images taken by the camera.


Hmm but what's so wrong with a DSLR from 2008 that he wants to throw it away?

Recent cameras may have a lot more pixels but the optics should still be just as good.


MILC's have shorter flange distance therefore more weird lenses can be created. Also they're smaller, lighter, and quieter due to the elimination of the moving mirror.


New cameras are much much better. There's a lot more to quality than just optics and pixels


Using a DSLR as a webcam is pretty straightforward with other Linux distros: https://www.crackedthecode.co/how-to-use-your-dslr-as-a-webc...

I've been using this for ~2 years now, and it's been rock solid.


I've been using an old Android phone as a webcam for a while, it's very good and latency is minimal, but conferencing software will just kill your stream. There's no reason to have even an HD webcam when your fellow participants will see a very compressed 0.4 Mpixel stream.


A normal lens in the 50mm to 85mm range farther away will show your features much less distorted than the typical wide-angle lenses of webcams. Wide-angle lenses close to your face will make your closer features like your nose look bigger. It's basically very ugly.

Doing this is less for the image quality and more for the natural representation of your face.


I don't think resolution is everything, I can definitely notice that the image is "better" in other ways when people are using proper cameras (whereas for a phone camera the resolution is a bigger part of what makes it better than a webcam), I'm quite happy with my own webcam being clear but not too clear though, it's a meeting not Instagram.


This should work with a ton of other cameras from roughly 2008 onwards. So long as it supports live view over usb with gphoto.

The camera from this article is also known as the Canon 500 or 1000D in other parts of the world.


Coincidentally, I read about the v4l2loopback driver which enables this yesterday. It was in an article about how it it a PITA to get working on Fedora due to the requirement for signed kernel modules. Glad to see it's easier on NixOS. https://dev.to/archerallstars/i-am-no-longer-use-fedora-36-t...


It's in rpmfusion, so pretty much plug and play.


I literally tried this yesterday (with official Canon Webcam software) and gave up. I think I’ll give it another go.


I've also heard colleagues struggling with the manufacturer software. Many of them resorted to buying HDMI capture cards which seem to be working a bit more seamless (also a nice plus if your software installation abilities on your work laptop are limited)


whole guide about using some gphoto software, yet not a single link in article

btw it's only for Linux, so don't even bother reading the linked web, if you are in windows

http://www.gphoto.org/

Correct title:

How to use your DSLR from 2008 as a webcam IN LINUX in 2022 (NixOS)

I wished people would not omiss such important information in title when writing articles or linking them wasting everyone's time including server traffic


NixOS is Linux


Which may someday replace Arch in the saying that Arch people never forget to mention they are using Arch :-).


Throughout the article, they use NixOS specific features.

You can't really follow this in Arch without installing Nix and changing some parts of the instructions.


Yes but those are fairly straightforward commands that are not really relevant (the post is about using v4l2 and gphoto).


How am I supposed to know that? I assumed it's some special custom firmware/OS for Nikon cameras before opening the link.

You way overestimate popularity and general knowledge of some rare Linux distros even among IT guys.


The package is obtained via your package manager, so you do not need to use your web browser to get it.




Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: