macos-defaults/record/readme.md

88 lines
3.8 KiB
Markdown
Raw Normal View History

# macos-defaults recorder 📷
**Stability: 1 - Experimental**
All the images and videos you will find on **macos-defaults** are built programmatically. It's done using **Node.js** scripts found in this folder subfolders.
Programmatic record serves 2 goals:
2020-11-27 12:45:16 +00:00
- Record similar actions with different `defaults` config.
- Make it easy to replay when a new version comes out.
## Technical overview
2020-11-27 12:45:16 +00:00
The [record.js](./record.js) file launches subfolders' recording scripts.
The scripts are all the `.js` files in this folder subfolders. There is one script per screenshot/video. These scripts share the same workflow:
2020-11-27 12:45:16 +00:00
1. Set a `defaults` command value
2. Prepare the recording using [robot.js](https://github.com/octalmage/robotjs)
3. Record using [Aperture](https://github.com/wulkano/aperture-node)
4. Post production (resize, compress, move)
5. Reset the `defaults` value
2020-11-27 12:45:16 +00:00
I try to keep as much similarity as possible for same-command examples.
Some [utils](./utils.js) are available to simplify scripts dev:
2020-11-27 12:45:16 +00:00
- `captureImage(x, y, width, height)` capture a screenshot using [jimp](https://github.com/oliver-moran/jimp)
- `x`: position from the left border of the screen.
- `y`: position from the bottom border of the screen.
- `width`: the width of the image.
- `height`: the height of the image.
- `async compressPngImage(inputPath, outputFolder, outputName)` try to resize the image to a max width of 740 (VuePress page width) using [sharp](https://github.com/lovell/sharp) and compress it using [pngquant](https://github.com/xiangshouding/node-pngquant-native)
- `inputPath`: the original image path.
- `outputFolder`: where the compressed image should be placed.
- `outputName`: what the compressed image file should be called.
- `async compressVideo(inputPath, outputFolder, outputName)` resize and compress the video using [ffmpeg](https://ffmpeg.org)
- `inputPath`: the original video path.
- `outputFolder`: where the compressed video should be placed.
- `outputName`: what the compressed video file should be called.
- `async makeAppActive(appName)` open an App and set it as active using AppleScript
- `appName`: the app name.
- `async moveAndResizeApp(appName, cropArea, screenHeight)` move and resize an App using AppleScript
- `appName`: the app name.
- `cropArea`: the cropArea used by Aperture (`{ x ,y , width, height }`).
- `screenHeight`: the screen height.
I consider removing the resize/compression part and upload these assets to a media CDN like [Cloudinary](https://cloudinary.com) to serve optimal resources based on user preferences.
## Launch locally
2020-11-27 12:45:16 +00:00
This part is only useful if you want to add a command. I **strongely recommand** not to launch the scripts locally if you don't want to mess up your config.
### 💻 My setup
2020-11-27 12:45:16 +00:00
I'm personally launching these scripts on a 15" 2015 MacBook Pro running the latest macOS developer beta version. I log in as another account when I want to work on the scripts. The scripts should be agnostic from the hardware they run on, please let me know if some of them do not by [opening an issue](https://github.com/yannbertrand/macos-defaults/issues/new).
### 🏗 Install
```sh
yarn install
```
### 🚀 Usage
⚠️ **Do not launch these commands on your daily user account!** The scripts override your user config.
When launching for the first time, you'll have some security prompts to confirm.
Hope you'll have as much fun as I had when I launched it for the first time 😊.
```sh
# Launch all recording
yarn record
# Launch a specific command script recording
yarn record screenshots/disable-shadow/false.js
# Launch all scripts of a command recording
yarn record dock/autohide-delay/*
# Launch a whole category recording
yarn record dock/*/*
```
### 🚧 Run unit tests
I couldn't find a way to unit test these scripts. If you have an idea, I'm really interested.