https://github.com/enpaul/kodak
Serve auto-generated banners, previews, thumbnails, and more from any directory. Lightweight, simple, and designed for performance
https://github.com/enpaul/kodak
image-preview image-processing microservice thumbnails web
Last synced: about 1 year ago
JSON representation
Serve auto-generated banners, previews, thumbnails, and more from any directory. Lightweight, simple, and designed for performance
- Host: GitHub
- URL: https://github.com/enpaul/kodak
- Owner: enpaul
- License: mit
- Created: 2021-05-02T22:09:42.000Z (about 5 years ago)
- Default Branch: devel
- Last Pushed: 2022-03-10T01:16:51.000Z (over 4 years ago)
- Last Synced: 2025-02-22T21:35:25.868Z (over 1 year ago)
- Topics: image-preview, image-processing, microservice, thumbnails, web
- Language: Python
- Homepage:
- Size: 569 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# kodak
Web server for auto-generating banners, previews, thumbnails, and more from any directory.
Lightweight, simple, and designed for performance.
Developed with [Poetry 1.0+](https://python-poetry.org/)
## Goals
- Support defining server-side manipulation specifications
```
KODAK_MANIP_FOOBAR_CROP_VERTICAL=300
KODAK_MANIP_FOOBAR_SCALE_HORIZONTAL=1200
KODAK_MANIP_FOOBAR_SCALE_STRATEGY=absolute
KODAK_MANIP_FIZZBUZZ_NAME=black+white
KODAK_MANIP_FIZZBUZZ_BLACK_AND_WHITE=true
KODAK_MANIP_FIZZBUZZ_SCALE_HORIZONTAL=50
KODAK_MANIP_FIZZBUZZ_SCALE_STRATEGY=relative
```
- Support retrieving manipulated images based on server side configuration
```
GET /image//foobar
GET /image//black+white
```
- Support optionally exposing full-resolution source images
```
GET /image//original
```
- Support caching of generated image manipulations for reuse
- Support [HTTP 410](https://httpstatuses.com/410) for indicating removed images and
manipulations
- Support optional authentication with pre-generated access tokens
- Support static file tree management for exposure via external web server (which is faster
than serving files with python)
- Support automatic indexing of newly added image files
- Support automatic indexing of removed image files
- Support arbitrary source directory structure
- Support Dockerized deployment
- Support bare-metal deployment (via systemd)
## Non-goals
- Client-defined image manipulations through publicly exposed parameters
> Manipulating images is- in the grand scheme of things- pretty resource intensive. Exposing
> dynamic parameters that can be cycled through to generate hundreds or thousands of
> permutations for every known image on a server could be used to either consume the
> server's entire disk or server's entire CPU.
- Upload functionality
> This application should be as simple as possible. Lots of people have implemented file
> upload systems, synchronizers, and managers way better than I have.
- Robust and flexible access control
> See above. Complex authentication can be added using a reverse proxy or any one of several
> dozen options for 3rd party middleware. The provided authentication is supposed to be
> dead simple for people who absolutely need the server to be private but absolutely cannot
> implement something more complicated.
- Pre-creation of image manipulations
> The goal of this program is just-in-time creation of the manipulated assets with
> aggressive caching; first load is slow, subsequent loads are fast. For this use case
> there's no sense creating or storing an asset until it's known to be needed.