https://github.com/danielroe/ipx
https://github.com/danielroe/ipx
Last synced: 8 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/danielroe/ipx
- Owner: danielroe
- License: mit
- Archived: true
- Created: 2020-10-11T23:16:20.000Z (over 5 years ago)
- Default Branch: use-siroc
- Last Pushed: 2024-04-13T08:46:32.000Z (about 2 years ago)
- Last Synced: 2024-12-16T14:13:14.287Z (over 1 year ago)
- Language: TypeScript
- Homepage:
- Size: 563 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[](https://hub.docker.com/r/pooya/ipx)
[](https://www.npmjs.com/package/ipx)
[](https://www.npmjs.com/package/ipx)
[](https://packagephobia.now.sh/result?p=ipx)
High performance, secure and easy to use image proxy based on [sharp](https://github.com/lovell/sharp) and [libvips](https://github.com/jcupitt/libvips).
- Easy deployment
- Configurable operations
- Built-in secure cache with human readable entries and resistant against duplicates
- Adapter based cache and input
- Auto cache cleaner
- Twelve factor friendly
- Client SDK for URL generation
Usage
### Using NPM package
You can use `ipx` command to start server using:
```bash
$ npx ipx
```
### Docker Image
Latest docker image is automatically built under [pooya/ipx](https://hub.docker.com/r/pooya/ipx).
Run a test server:
```bash
docker run \
-it \
--rm \
--volume ./storage:/app/storage:ro \
--volume ./cache:/app/cache \
--port 3000:3000
pooya/ipx
```
Using docker-compose:
```yml
version: '3'
services:
ipx:
image: pooya/ipx
volumes:
- ./storage:/app/storage:ro
- ./cache:/app/cache
ports:
- 3000:3000
```
### Programatic Usage
You can use IPX as a Connect/Express middleware or directly use IPX class.
```js
import { IPX, IPXMiddleware } from 'ipx'
const ipx = new IPX(/* options */)
const app = express()
app.use('/image', IPXMiddleware(ipx))
```
Clients
See [JS Client](./packages/ipx-client/README.md) for Node.js and Browser SDK.
API
**`/{format}/{operations}/{src}`**
Operations are separated by a colon `,` (Example: `op1,op2`) and their arguments separated using underscore `_` (Example: `s_200_300`)
ََUse `_` value in place for `{format}` or `{operations}` to keep original values of source image.
Possible values for format: `jpeg`,`webp` or `png`.
### Examples
Just change format to `webp` and keep other things same as source:
`http://cdn.example.com/webp/_/avatars/buffalo.png`
Keep original format (`png`) and set width to `200`:
`http://cdn.example.com/_/w_200/avatars/buffalo.png`
Resize to `200x300px` using `embed` method and change format to `jpg`:
`http://cdn.example.com/jpg/s_200_300,embed/avatars/buffalo.png`
Operations
Operation | Arguments | Example | Description
-------------|-----------------------|-------------|---------------------------------------------------------
`s` | `width`, `height` | s_200_300 | Resize image.
`w` | `width` | w_200 | Change image with.
`h` | `height` | h_200 | Change image height.
`embed` | - | embed | Preserving aspect ratio, resize the image to the maximum `width` or `height` specified then embed on a background of the exact `width` and `height` specified.
`max` | - | max | Preserving aspect ratio, resize the image to be as large as possible while ensuring its dimensions are less than or equal to the `width` and `height` specified.
`min` | - | min | Preserving aspect ratio, resize the image to be as small as possible while ensuring its dimensions are greater than or equal to the width and height specified.
Config
Config can be customized using `IPX_*` environment variables.
- `IPX_PORT` (or `PORT`)
Default: `3000`
- `IPX_INPUT_ADAPTER`
- Default: `fs`
- `IPX_INPUT_DIR`
- Default: `storage`
- `IPX_CACHE_ADAPTER`
- Default: `fs`
- `IPX_CACHE_DIR`
- Default: `cache`
- `IPX_CACHE_CLEAN_CRON`
- Default: `0 0 3 * * *` (every night at 3:00 AM)
- `IPX_CACHE_CLEAN_MINUTES`
- Default: `24 * 60` (24 hours)
License
MIT - Pooya Parsa