{"id":24329863,"url":"https://github.com/petabyt/vcam","last_synced_at":"2025-09-27T16:31:11.539Z","repository":{"id":187811204,"uuid":"673392744","full_name":"petabyt/vcam","owner":"petabyt","description":"Reimplementation of proprietary MTP responders for black-box testing","archived":false,"fork":false,"pushed_at":"2025-01-05T00:33:12.000Z","size":7198,"stargazers_count":8,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-12T22:15:07.021Z","etag":null,"topics":["mtp","ptp","reverse-enginnering","spoof"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-2.1","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/petabyt.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-08-01T14:18:55.000Z","updated_at":"2025-01-06T03:48:54.000Z","dependencies_parsed_at":"2024-04-21T06:27:47.552Z","dependency_job_id":"d8e634bc-a25a-410c-8e28-bf49257adfa7","html_url":"https://github.com/petabyt/vcam","commit_stats":null,"previous_names":["petabyt/libusb-fake-ptp","petabyt/vusb","petabyt/vcam"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/petabyt%2Fvcam","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/petabyt%2Fvcam/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/petabyt%2Fvcam/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/petabyt%2Fvcam/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/petabyt","download_url":"https://codeload.github.com/petabyt/vcam/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":234448355,"owners_count":18834213,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["mtp","ptp","reverse-enginnering","spoof"],"created_at":"2025-01-18T00:33:04.907Z","updated_at":"2025-09-27T16:31:11.532Z","avatar_url":"https://github.com/petabyt.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# vcam\nThis is a PTP (Picture Transfer Protocol) responder that reimplements the proprietary vendor extensions found in digital cameras.\nEverything from filesystem access to remote capture, vcam tries to mimic the exact behavior of a camera. It also replicates\nthe USB and WiFi stack well enough that it can spoof official camera software:\n\n\u003cimg title=\"Fujifilm Camera Connect connected to spoofed X-H1-ABCD\" src=\"bin/Screenshot_20240402-140041.png\" width=\"300\"\u003e\u003cimg src=\"bin/Screenshot_20240402-140506.png\" width=\"300\"\u003e\n\nAll of this can be easily run on Linux - see below on instructions on how to run it.\n\n---\n\n*This started out as a fork of gphoto's [vcamera](https://github.com/gphoto/libgphoto2/tree/master/libgphoto2_port/vusb) regression tester.\nSince then it has been heavily modified and improved to more closely replicate the PTP responders found in camera firmware.*\n\n## Why\n- Regression testing - Do extensive client testing in CI that can check for runtime bugs\n- For easier prototyping - vcam can be used instead of a physical camera (no need to wait for a camera to recharge or reconnect to continue testing)\n- [Black box testing](https://en.wikipedia.org/wiki/Black-box_testing) - test against vendor software without disassembling\n- Reference - vcam tries to be a reference implementation of proprietary vendor functionality, showing what is happening behind the scenes (and sometimes why)\n\n## Roadmap\n- [x] Basic PTP responder implementation (thanks [Marcus Meissner](https://github.com/msmeissn))\n- [x] Canon EOS implementation (WIP, Digic 4+, see canon.c)\n- [x] libusb and vhci backends - see usb/\n- [x] PTP/IP packet support\n- [x] Fujifilm X TCP implementation (2015-2020)\n- [x] Spoof [Fujifilm Camera Connect](https://play.google.com/store/apps/details?id=com.fujifilm_dsc.app.remoteshooter\u0026hl=en_US\u0026gl=US)\n- [x] Spoof [EOS Connect](https://play.google.com/store/apps/details?id=jp.co.canon.ic.cameraconnect\u0026hl=en_US\u0026gl=US)\n- [x] [Spoof Windows 11](https://x.com/danielcdev/status/1867440146389295532)\n- [ ] Complete ISO MTP implementation\n- [ ] open-source extensions (chdkptp, ML)\n- [ ] DX + other mirrorless EOS implementation\n- [ ] Canon Powershot (non-EOS) implementation\n- [ ] Sony implementation? [pmca](https://github.com/ma1co/Sony-PMCA-RE)\n\n## Compiling\n```\nsudo apt install libusb-1.0-0-dev libexif-dev # Ubuntu\ncmake -G Ninja -B build \u0026\u0026 cmake --build build\n```\n\n## VHCI backend\nThis will connect the camera to your Linux PC through a virtual host controller:\n```\nsudo modprobe vhci-hcd\nsudo ./vcam canon_1300d vhci\n```\n\n## libusb backend\nThe libusb API is hardly implemented, PRs improving this are welcome.\n```\nmake libusb-vcam.so\n```\n\n## Running an access point\n```\nsudo apt install haveged hostapd\n```\nPower saving mode can make the TCP handshake way too slow:\n```\n# Doesn't last a reboot (I think)\nsudo iw dev wlan0 set power_save off\n```\nSee the makefile for more info on starting access points.\n```\nmake ap-canon WIFI_DEV=wlan0\n```\n\n## Credits\nOriginal Author (vusb): Marcus Meissner \u003cmarcus@jet.franken.de\u003e  \nForked from https://github.com/gphoto/libgphoto2/tree/master/libgphoto2_port/vusb  \ncreate_ap scripts from https://github.com/oblique/create_ap  \nLicensed under the GNU Lesser General Public License v2.1  \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpetabyt%2Fvcam","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpetabyt%2Fvcam","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpetabyt%2Fvcam/lists"}