{"_id":"@airplanegobrr/camera-capture","_rev":"3-426f9702a4fff5dffe8929ddc4a343b2","name":"@airplanegobrr/camera-capture","dist-tags":{"latest":"1.0.2"},"versions":{"0.0.11":{"name":"@airplanegobrr/camera-capture","version":"0.0.11","keywords":["Node.js","camera","webcam","video","capture","record","camera","audio","video record","camera capture","audio capture","screenshot","desktop"],"author":{"url":"http://sgurin.com","name":"Sebastian Gurin","email":"sebastigurin@gmail.com"},"license":"MIT","_id":"@airplanegobrr/camera-capture@0.0.11","maintainers":[{"name":"airplanegobrr","email":"airplanegobrrfeedback@gmail.com"}],"homepage":"https://www.npmjs.com/package/camera-capture","bugs":{"url":"https://github.com/cancerberoSgx/camera-capture"},"dist":{"shasum":"bb2bfe068a1ddf68c2d4ebbf88e04688329e9778","tarball":"https://registry.npmjs.org/@airplanegobrr/camera-capture/-/camera-capture-0.0.11.tgz","fileCount":24,"integrity":"sha512-RKOiEZ2kIX2zhU40F9iTznodNRSgzf/WkD+woPeBdiUmsQS9uPU8nUmFKvnq5ciu6u3GiFjYl6PH7D2mDO2WRw==","signatures":[{"sig":"MEYCIQCIBFF0uIurGqNePff0q2I2pUx8gAFvHu+Fc+WE9azMAwIhAJL4FbWDjjOK/wsoKp8CwN2N+VJ4U2zEq4UP9gvaDfky","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":104917},"main":"dist/src/index.js","_from":"file:airplanegobrr-camera-capture-0.0.11.tgz","types":"dist/src/index.d.ts","scripts":{"test":"ava ./dist/test/captureTest.js","build":"tsc","clean":"rm -rf tmp* dist test-browser-outdir working_tmp ../docs","test-js":"npm run build && npx ava --serial --concurrency 1 --config ava.config-js.js"},"_npmUser":{"name":"airplanegobrr","email":"airplanegobrrfeedback@gmail.com"},"_resolved":"C:\\Users\\AIRPLA~1\\AppData\\Local\\Temp\\f4efa8034e51b6d6c886285489517108\\airplanegobrr-camera-capture-0.0.11.tgz","_integrity":"sha512-RKOiEZ2kIX2zhU40F9iTznodNRSgzf/WkD+woPeBdiUmsQS9uPU8nUmFKvnq5ciu6u3GiFjYl6PH7D2mDO2WRw==","repository":{"url":"git+https://github.com/cancerberoSgx/camera-capture.git","type":"git"},"_npmVersion":"10.8.2","description":"Super portable, fast camera capture library for node.js (server). TypeScript/JavaScript easy to use APIs. Uses puppeteer headless browser to capture webcam video (audio/desktop, recording, etc) and stream back to node.js frame by frame in plain image data","directories":{},"_nodeVersion":"20.18.0","dependencies":{"ava":"^6.2.0","file-type":"^20.4.0","typescript":"^5.7.3","misc-utils-of-mine-generic":"^0.2.34"},"_hasShrinkwrap":false,"peerDependencies":{"puppeteer":"^1.20.0"},"_npmOperationalInternal":{"tmp":"tmp/camera-capture_0.0.11_1740605033398_0.3983438589711146","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@airplanegobrr/camera-capture","version":"1.0.0","keywords":["Node.js","camera","webcam","video","capture","record","camera","audio","video record","camera capture","audio capture","screenshot","desktop"],"author":{"url":"http://sgurin.com","name":"Sebastian Gurin","email":"sebastigurin@gmail.com"},"license":"MIT","_id":"@airplanegobrr/camera-capture@1.0.0","maintainers":[{"name":"airplanegobrr","email":"airplanegobrrfeedback@gmail.com"}],"homepage":"https://www.npmjs.com/package/camera-capture","bugs":{"url":"https://github.com/cancerberoSgx/camera-capture"},"dist":{"shasum":"95f1c0e2ba7d795b998f4732f7508c2fb7b437f0","tarball":"https://registry.npmjs.org/@airplanegobrr/camera-capture/-/camera-capture-1.0.0.tgz","fileCount":24,"integrity":"sha512-VdkJeZbNqNyQA8S9QcZtEw6an7vbIwg6gZuOLYih5S9bDlQxWXTulGIlC70RJIB/2rHxc4PIFEfmgo8cvOoR2w==","signatures":[{"sig":"MEUCIQD6Gu6wvU44PPcPfzD1SClTLHDXbq7KHPmy0YiRVusVtAIgEKN8yVOM4srIinqJZr4eFjpKc31yt+T5cUDPamGZfbI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":104681},"main":"dist/src/index.js","_from":"file:airplanegobrr-camera-capture-1.0.0.tgz","types":"dist/src/index.d.ts","scripts":{},"_npmUser":{"name":"airplanegobrr","email":"airplanegobrrfeedback@gmail.com"},"_resolved":"C:\\Users\\AIRPLA~1\\AppData\\Local\\Temp\\30d5a9470a69ffb80b6e9d14ad3f95bc\\airplanegobrr-camera-capture-1.0.0.tgz","_integrity":"sha512-VdkJeZbNqNyQA8S9QcZtEw6an7vbIwg6gZuOLYih5S9bDlQxWXTulGIlC70RJIB/2rHxc4PIFEfmgo8cvOoR2w==","repository":{"url":"git+https://github.com/cancerberoSgx/camera-capture.git","type":"git"},"_npmVersion":"10.8.2","description":"Super portable, fast camera capture library for node.js (server). TypeScript/JavaScript easy to use APIs. Uses puppeteer headless browser to capture webcam video (audio/desktop, recording, etc) and stream back to node.js frame by frame in plain image data","directories":{},"_nodeVersion":"20.18.0","dependencies":{"ava":"^6.2.0","file-type":"^20.4.0","typescript":"^5.7.3","misc-utils-of-mine-generic":"^0.2.34"},"_hasShrinkwrap":false,"peerDependencies":{"puppeteer":"^1.20.0"},"_npmOperationalInternal":{"tmp":"tmp/camera-capture_1.0.0_1740605185595_0.5802567751791015","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@airplanegobrr/camera-capture","version":"1.0.1","keywords":["Node.js","camera","webcam","video","capture","record","camera","audio","video record","camera capture","audio capture","screenshot","desktop"],"author":{"url":"http://sgurin.com","name":"Sebastian Gurin","email":"sebastigurin@gmail.com"},"license":"MIT","_id":"@airplanegobrr/camera-capture@1.0.1","maintainers":[{"name":"airplanegobrr","email":"airplanegobrrfeedback@gmail.com"}],"homepage":"https://www.npmjs.com/package/camera-capture","bugs":{"url":"https://github.com/cancerberoSgx/camera-capture"},"dist":{"shasum":"5fb7a92f5ce84e1f4ad11f530efca3c960d3dfe4","tarball":"https://registry.npmjs.org/@airplanegobrr/camera-capture/-/camera-capture-1.0.1.tgz","fileCount":24,"integrity":"sha512-MXaq1O0eK7G63eti6s59iowcsXMpMgvHFLF7lh/+cKDaN/ND/6eyzrVxx4KL2m+awfmOlixczzJ6snNswQP4cA==","signatures":[{"sig":"MEQCIDAydhPB8rm4eoN0PGUaOYUxbyKW0TX3Qa3kNGDfXnlCAiAHj4z4aV4zPG6vxT6X9lmkzrrruLi/eO4lvVpoqjVVJA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":104708},"main":"dist/src/index.js","_from":"file:airplanegobrr-camera-capture-1.0.1.tgz","types":"dist/src/index.d.ts","scripts":{},"_npmUser":{"name":"airplanegobrr","email":"airplanegobrrfeedback@gmail.com"},"_resolved":"C:\\Users\\AIRPLA~1\\AppData\\Local\\Temp\\2ba471cd8906bc3df724982f3da306cb\\airplanegobrr-camera-capture-1.0.1.tgz","_integrity":"sha512-MXaq1O0eK7G63eti6s59iowcsXMpMgvHFLF7lh/+cKDaN/ND/6eyzrVxx4KL2m+awfmOlixczzJ6snNswQP4cA==","repository":{"url":"git+https://github.com/cancerberoSgx/camera-capture.git","type":"git"},"_npmVersion":"10.8.2","description":"Super portable, fast camera capture library for node.js (server). TypeScript/JavaScript easy to use APIs. Uses puppeteer headless browser to capture webcam video (audio/desktop, recording, etc) and stream back to node.js frame by frame in plain image data","directories":{},"_nodeVersion":"20.18.0","dependencies":{"file-type":"^20.4.0","misc-utils-of-mine-generic":"^0.2.34"},"_hasShrinkwrap":false,"devDependencies":{"ava":"^6.2.0","typescript":"^5.7.3"},"peerDependencies":{"puppeteer":"^1.20.0"},"_npmOperationalInternal":{"tmp":"tmp/camera-capture_1.0.1_1740605228409_0.9908890776941568","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@airplanegobrr/camera-capture","version":"1.0.2","description":"Super portable, fast camera capture library for node.js (server). TypeScript/JavaScript easy to use APIs. Uses puppeteer headless browser to capture webcam video (audio/desktop, recording, etc) and stream back to node.js frame by frame in plain image data","main":"dist/src/index.js","types":"dist/src/index.d.ts","license":"MIT","dependencies":{"file-type":"^20.4.0","misc-utils-of-mine-generic":"^0.2.34"},"devDependencies":{"@types/node":"^22.13.5","ava":"^6.2.0","typescript":"^5.7.3"},"peerDependencies":{"puppeteer":"^1.20.0"},"keywords":["Node.js","camera","webcam","video","capture","record","camera","audio","video record","camera capture","audio capture","screenshot","desktop"],"contributors":[{"name":"Sebastian Gurin","email":"sebastigurin@gmail.com","url":"http://sgurin.com"},{"name":"AirplaneGobrr","email":"airplane@airplanegobrr.xyz","url":"https://airplanegobrr.xyz"}],"homepage":"https://www.npmjs.com/package/@airplanegobrr/camera-capture","repository":{"type":"git","url":"git+https://github.com/AirplaneGobrr-Trash/camera-capture.git"},"bugs":{"url":"https://github.com/AirplaneGobrr-Trash/camera-capture/issues"},"scripts":{"build":"tsc"},"_id":"@airplanegobrr/camera-capture@1.0.2","_integrity":"sha512-T+MZQ+FnnSB6NlfZSr6wqtUoIjZ7A+GLp9zSFBFaG3/7Pae9vmILKC43S3X1Tb1laFNuyAIi8OTeqN+LRpfNMA==","_resolved":"C:\\Users\\AIRPLA~1\\AppData\\Local\\Temp\\41cae30f3adada300a7b08d88acf71aa\\airplanegobrr-camera-capture-1.0.2.tgz","_from":"file:airplanegobrr-camera-capture-1.0.2.tgz","_nodeVersion":"20.18.0","_npmVersion":"10.8.2","dist":{"integrity":"sha512-T+MZQ+FnnSB6NlfZSr6wqtUoIjZ7A+GLp9zSFBFaG3/7Pae9vmILKC43S3X1Tb1laFNuyAIi8OTeqN+LRpfNMA==","shasum":"36ab2ff5174d20c52124af7fd053a8c138d2e382","tarball":"https://registry.npmjs.org/@airplanegobrr/camera-capture/-/camera-capture-1.0.2.tgz","fileCount":25,"unpackedSize":107300,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIF8G6Z3sYVj91gmIFkv5W8npnpWFb8fSSgDzxiiJNQ3hAiEAyKdDMSUIR7keYF6g+QeyBzmPEXHWNbKpO3VKjOBEvtw="}]},"_npmUser":{"name":"airplanegobrr","email":"airplanegobrrfeedback@gmail.com"},"directories":{},"maintainers":[{"name":"airplanegobrr","email":"airplanegobrrfeedback@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/camera-capture_1.0.2_1740679931239_0.7972315052571768"},"_hasShrinkwrap":false}},"time":{"created":"2025-02-26T21:23:53.275Z","modified":"2025-02-27T18:12:11.636Z","0.0.11":"2025-02-26T21:23:53.581Z","1.0.0":"2025-02-26T21:26:25.834Z","1.0.1":"2025-02-26T21:27:08.627Z","1.0.2":"2025-02-27T18:12:11.447Z"},"bugs":{"url":"https://github.com/AirplaneGobrr-Trash/camera-capture/issues"},"license":"MIT","homepage":"https://www.npmjs.com/package/@airplanegobrr/camera-capture","keywords":["Node.js","camera","webcam","video","capture","record","camera","audio","video record","camera capture","audio capture","screenshot","desktop"],"repository":{"type":"git","url":"git+https://github.com/AirplaneGobrr-Trash/camera-capture.git"},"description":"Super portable, fast camera capture library for node.js (server). TypeScript/JavaScript easy to use APIs. Uses puppeteer headless browser to capture webcam video (audio/desktop, recording, etc) and stream back to node.js frame by frame in plain image data","maintainers":[{"name":"airplanegobrr","email":"airplanegobrrfeedback@gmail.com"}],"readme":"# @airplanegobrr/camera-capture\n\nThis is a \"fork\" of a fork Please see below\n\nThe base of the code is bassed off of [cancerberoSgx/camera-capture](https://github.com/cancerberoSgx/camera-capture)\n\nThere is a fork that adds a \"getDevicesList\" from [zjffun/camera-capture#feat-get-devices-list](https://github.com/zjffun/camera-capture/tree/feat-get-devices-list)\n\nThis repo was made because the format of BOTH the above is... messy.\n\nBoth projects are dead! I plan to use this as this is supper nice, not sure why its not used/updated more.\n\nA rewrite will happen as I want to make a better API/layout of everything, and CJS.\n\nOnce this is rewritten I'll change the package name so its not stupid and drops the `@airplanegobrr/` part\n\n# Using\n\n1. Install.\n\n`pnpm add @airplanegobrr/camera-capture`\n\n2. Use it.\n\n```js\nconst { VideoCapture } = require(\"@airplanegobrr/camera-capture\");\n\n(async () => {\n\n    const videoCapture = new VideoCapture({\n        video: true,\n        mime: \"image/png\",\n    });\n    await videoCapture.initialize();\n\n    const devicesList = await videoCapture.getDevicesList();\n    const videoDevices = devicesList.filter(v => v.kind === \"videoinput\")\n    \n    await videoCapture.startCamera({\n        video: {\n            deviceId: videoDevices[0].deviceId\n        }\n    })\n\n    let frame = await videoCapture.readFrame() // Extracts frame one by one. (AKA, Take picture)\n    console.log(frame)\n})();\n```\n\n# If building\n\nIf your building this make sure to copy `src/assets` to `dist/src/assets`\n\n## TODO / Road map\n\n### performance\n- [ ] performance 2: sharing a webrtc session between node and browser, this could imply not having to read/write image data at all just consuming a video stream ?\n- [ ] ~~test if toDataUrl is faster than toBlob~~ [See here](https://stackoverflow.com/a/59025746)\n- [ ] perhaps is faster to do the capture loop all together inside the DOM, instead calling evaluate() on each iteration?\n- [ ] performance 1 post frames to a node.js server, possibly using websockets\n\n## misc\n\n- [ ] supposedly qt supports webrtc natively - oerhaos a demo connecting pptr and qt desktop app ? \n- [ ] probably for frames a generator / or observable is more appropriate than even listeners.\n- [ ] CLI\n- [ ] demo - stream local camera capture on a server web page.\n- [ ] stopVideo refactor TODOs\n- [ ] ~~a free port number resolver - try until one is available (conection successful)~~ [get-port](https://www.npmjs.com/package/get-port)\n- [ ] pause/resume / start/stop should work for recording too. \n- [ ] do we really need to serialize constrains ? \n- [ ] performance tests (fps raw image data and encoded images)\n- [ ] video recording formats other than webm?\n- [ ] video recording constraints - size - \n- [ ] audio recording only API\n- [ ] record desktop ? ~~possible ?~~ - [Screen_Capture_API](https://developer.mozilla.org/en-US/docs/Web/API/Screen_Capture_API)\n- [ ] desktop screenshot only API\n- [ ] browser screenshot only API\n- [ ] webcam screenshot only API\n- [ ] geo location (get the coords) ? (need https? - Should work as the webcam also need HTTPS)\n- [ ] change video size dynamically ?\n- [x] investigate why/how to pass the buffer / array buffer view  directly without transforming it to number[] / and array buffer views\n  -  using Buffer (TextEncoder/TextDecoder to serialize the data as a single char-per-byte string (using windows-1252 encoding) and deserialize it in Node on the other side which is fast (since passing strings is much faster).\n- [x] check c.addFrameListener() with encoded images\n- [x] real world example: native app\n- [x] encode in browser supported formats (png, jpg)\n- [x] c.readFrame() users read manually instead listener - loop controlled by users.\n- [x] listener API managed  loop\n- [x] API docs\n- [x] add api docs descriptions to class, options and\n- [x] record capture using dom api (output is mp4/avi video)\n\n### low priority\n- [ ] research how fast/slow is painting canvas pixel by pixel from image data than showImage in node-gui\n- [ ] TODO: support fps control like in opencv\n\n## ideas\n- use a desktop GUI library like node-gui to render a node.js canvas  - target users: people using jsdom / node canvas for testing canvas based apps headless have the possibility to render it (not just a screenshot but as actual stream of frames natively in the desktop)idea for for a project node-gui : a jsdom-node-canvas renderer: use jsdom+node-canvas to real-time render the canvas element in a view.","readmeFilename":"README.md","contributors":[{"name":"Sebastian Gurin","email":"sebastigurin@gmail.com","url":"http://sgurin.com"},{"name":"AirplaneGobrr","email":"airplane@airplanegobrr.xyz","url":"https://airplanegobrr.xyz"}]}