node-libcamera 0.1.0 → 0.1.6

Sign up to get free protection for your applications and to get access to all the features.
package/README.md CHANGED
@@ -1,103 +1,55 @@
1
- # TSDX User Guide
1
+ # node-libcamera 📷
2
2
 
3
- Congrats! You just saved yourself hours of work by bootstrapping this project with TSDX. Let’s get you oriented with what’s here and how to use it.
3
+ A set of wrapper functions for the native [Raspberry Pi `libcamera` API](https://www.raspberrypi.com/documentation/accessories/camera.html).
4
4
 
5
- > This TSDX setup is meant for developing libraries (not apps!) that can be published to NPM. If you’re looking to build a Node app, you could use `ts-node-dev`, plain `ts-node`, or simple `tsc`.
5
+ _Open to any and all contributions!_
6
6
 
7
- > If you’re new to TypeScript, checkout [this handy cheatsheet](https://devhints.io/typescript)
8
-
9
- ## Commands
10
-
11
- TSDX scaffolds your new library inside `/src`.
12
-
13
- To run TSDX, use:
7
+ ## Installation
14
8
 
15
9
  ```bash
16
- npm start # or yarn start
10
+ npm install node-libcamera
17
11
  ```
18
12
 
19
- This builds to `/dist` and runs the project in watch mode so any edits you save inside `src` causes a rebuild to `/dist`.
20
-
21
- To do a one-off build, use `npm run build` or `yarn build`.
22
-
23
- To run tests, use `npm test` or `yarn test`.
24
-
25
- ## Configuration
26
-
27
- Code quality is set up for you with `prettier`, `husky`, and `lint-staged`. Adjust the respective fields in `package.json` accordingly.
28
-
29
- ### Jest
13
+ ## Usage
30
14
 
31
- Jest tests are set up to run with `npm test` or `yarn test`.
15
+ ### [`libcamera-still`](https://www.raspberrypi.com/documentation/accessories/camera.html#libcamera-still)
32
16
 
33
- ### Bundle Analysis
17
+ Capture an image!
34
18
 
35
- [`size-limit`](https://github.com/ai/size-limit) is set up to calculate the real cost of your library with `npm run size` and visualize the bundle with `npm run analyze`.
36
-
37
- #### Setup Files
38
-
39
- This is the folder structure we set up for you:
40
-
41
- ```txt
42
- /src
43
- index.tsx # EDIT THIS
44
- /test
45
- blah.test.tsx # EDIT THIS
46
- .gitignore
47
- package.json
48
- README.md # EDIT THIS
49
- tsconfig.json
19
+ ```js
20
+ const { still } = require('node-libcamera')
21
+
22
+ // basic example
23
+ still({ output: 'test.jpg' })
24
+ .then((result) => /* 📸 */ )
25
+ .catch((error) => /* 🐛 */ )
26
+
27
+ // example with options
28
+ still({
29
+ output: 'images/test.jpg', // output file path
30
+ timeout: 2000, // timeout before taking the picture
31
+ width: 640, // image width
32
+ height: 480, // image height
33
+ })
34
+ .then((result) => /* 📸 */ )
35
+ .catch((error) => /* 🐛 */ )
50
36
  ```
51
37
 
52
- ### Rollup
53
-
54
- TSDX uses [Rollup](https://rollupjs.org) as a bundler and generates multiple rollup configs for various module formats and build settings. See [Optimizations](#optimizations) for details.
55
-
56
- ### TypeScript
57
-
58
- `tsconfig.json` is set up to interpret `dom` and `esnext` types, as well as `react` for `jsx`. Adjust according to your needs.
59
-
60
- ## Continuous Integration
38
+ ### [`libcamera-vid`](https://www.raspberrypi.com/documentation/accessories/camera.html#libcamera-vid)
61
39
 
62
- ### GitHub Actions
63
-
64
- Two actions are added by default:
65
-
66
- - `main` which installs deps w/ cache, lints, tests, and builds on all pushes against a Node and OS matrix
67
- - `size` which comments cost comparison of your library on every pull request using [`size-limit`](https://github.com/ai/size-limit)
68
-
69
- ## Optimizations
70
-
71
- Please see the main `tsdx` [optimizations docs](https://github.com/palmerhq/tsdx#optimizations). In particular, know that you can take advantage of development-only optimizations:
40
+ Record a video!
72
41
 
73
42
  ```js
74
- // ./types/index.d.ts
75
- declare var __DEV__: boolean;
43
+ const { vid } = require('node-libcamera')
76
44
 
77
- // inside your code...
78
- if (__DEV__) {
79
- console.log('foo');
80
- }
45
+ // record a 10s video
46
+ vid({ output: 'test.h264', timeout: 10000, 'save-pts': 'timestamps.txt' })
47
+ .then((result) => /* 🎥 */ )
48
+ .catch((error) => /* 🐛 */ )
81
49
  ```
82
50
 
83
- You can also choose to install and use [invariant](https://github.com/palmerhq/tsdx#invariant) and [warning](https://github.com/palmerhq/tsdx#warning) functions.
84
-
85
- ## Module Formats
86
-
87
- CJS, ESModules, and UMD module formats are supported.
88
-
89
- The appropriate paths are configured in `package.json` and `dist/index.js` accordingly. Please report if any issues are found.
90
-
91
- ## Named Exports
51
+ Note: this will result in an unpackaged video bistream, it is not wrapped in any kind of container format (such as an mp4 file). The `save-pts` option can be used to output frame timestamps so that the bitstream can subsequently be converted into an appropriate format using a tool like `mkvmerge`.
92
52
 
93
- Per Palmer Group guidelines, [always use named exports.](https://github.com/palmerhq/typescript#exports) Code split inside your React app instead of your React library.
94
-
95
- ## Including Styles
96
-
97
- There are many ways to ship styles, including with CSS-in-JS. TSDX has no opinion on this, configure how you like.
98
-
99
- For vanilla CSS, you can include it at the root directory and add it to the `files` section in your `package.json`, so that it can be imported separately by your users and run through their bundler's loader.
100
-
101
- ## Publishing to NPM
102
-
103
- We recommend using [np](https://github.com/sindresorhus/np).
53
+ ```bash
54
+ mkvmerge -o test.mkv --timecodes 0:timestamps.txt test.h264
55
+ ```
package/dist/index.d.ts CHANGED
@@ -1,2 +1,4 @@
1
1
  import { LibCamera } from './options';
2
- export declare function snap(options: LibCamera.OptionsObject): Promise<unknown>;
2
+ export declare function jpeg(options: Partial<LibCamera.OptionsObject>): Promise<unknown>;
3
+ export declare function still(options: Partial<LibCamera.OptionsObject>): Promise<unknown>;
4
+ export declare function vid(options: Partial<LibCamera.OptionsObject>): Promise<unknown>;