{"id":16153336,"url":"https://github.com/danielesteban/goprodump","last_synced_at":"2025-04-06T23:38:35.951Z","repository":{"id":207868487,"uuid":"720300854","full_name":"danielesteban/goprodump","owner":"danielesteban","description":"Dump camera files over WIFI","archived":false,"fork":false,"pushed_at":"2023-11-20T15:17:22.000Z","size":12,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-13T05:34:39.954Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/danielesteban.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}},"created_at":"2023-11-18T03:58:53.000Z","updated_at":"2024-01-05T02:47:14.000Z","dependencies_parsed_at":"2023-11-18T05:22:10.486Z","dependency_job_id":"a1da6a45-959c-4e24-83a6-8015c4dc5580","html_url":"https://github.com/danielesteban/goprodump","commit_stats":null,"previous_names":["danielesteban/goprodump"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielesteban%2Fgoprodump","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielesteban%2Fgoprodump/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielesteban%2Fgoprodump/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielesteban%2Fgoprodump/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/danielesteban","download_url":"https://codeload.github.com/danielesteban/goprodump/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247569138,"owners_count":20959758,"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":[],"created_at":"2024-10-10T01:11:22.500Z","updated_at":"2025-04-06T23:38:35.927Z","avatar_url":"https://github.com/danielesteban.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"goprodump\n==\n\nI bought myself a GoPro camera as an incentive for going outside and touch grass.\n\nBut apparently the only ways to transfer the camera files over WIFI are to use a proprietary mobile app and, of course, a paid cloud subscription without an option to host your own server.\n\nJust when I thought I was out, they pull me back in.\n\nThankfully, most of the firmware is opensource and the APIs are pretty well documented:\n\n * [Bluetooth Low Energy (BLE) Specification v2.0](https://gopro.github.io/OpenGoPro/ble_2_0)\n * [HTTP Specification v2.0](https://gopro.github.io/OpenGoPro/http_2_0)\n\nSo... I wrote [this nodejs script](src/main.js) to dump the camera files over WIFI into a computer:\n\n * Connects to the camera through BLE\n * Enables the camera WIFI access point\n * Connects the computer to the camera through WIFI\n * Lists all the media in the camera\n * Sets the camera into TurboTransfer mode\n * Downloads all the files skipping the already downloaded ones\n * Disconnects everything and puts the camera to sleep\n\n\u003e The camera needs be at the \"Pair Device\" screen the first time the script runs or the BLE connection won't work.\n\nThis has only been tested on a Windows 10 computer with a CSR4.0 bluetooth dongle with the [WinUSB drivers](https://zadig.akeo.ie/).\n\n```bash\n# clone repo:\ngit clone https://github.com/danielesteban/goprodump.git\ncd goprodump\n# install dependencies:\npnpm install\n# set camera at \"Pair Device\" screen\n# dump all files:\npnpm start --id \"Last 4 digits from the camera serial number\"\n# print out usage options:\npnpm start --help\n```\n\nIf everything worked out, it should print out something like this:\n```bash\n$ pnpm start --id \"0123\"\n\n\u003e goprodump@ start C:\\Users\\dani\\Code\\goprodump\n\u003e node src/main.js \"--id\" \"0123\"\n\nConnecting BLE...\n[0123] HERO12 Black\nEnabling AP...\nConnecting WIFI...\nListing media...\n7 files on camera\nDownloading 3 new files to:\nC:\\Users\\dani\\Code\\goprodump\\output\\0123\n[3/3] |\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e\u003e|    100%\nGX010007.MP4 |████████████████████████| 100% [27.41mb/s]\nShutting down...\nDone!\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanielesteban%2Fgoprodump","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdanielesteban%2Fgoprodump","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanielesteban%2Fgoprodump/lists"}