Metadata-Version: 2.1
Name: kodak
Version: 0.1.0
Summary: HTTP server for uploading images and generating thumbnails
Home-page: https://github.com/enpaul/kodak/
License: MIT
Keywords: flask,image,thumbnail,hosting
Author: Ethan Paul
Author-email: 24588726+enpaul@users.noreply.github.com
Requires-Python: >=3.7,<4.0
Classifier: Development Status :: 2 - Pre-Alpha
Classifier: Environment :: Web Environment
Classifier: Framework :: Flask
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Information Technology
Classifier: Intended Audience :: System Administrators
Classifier: License :: OSI Approved :: MIT License
Classifier: Natural Language :: English
Classifier: Operating System :: OS Independent
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
Classifier: Topic :: Multimedia :: Graphics
Classifier: Topic :: Multimedia :: Graphics :: Graphics Conversion
Provides-Extra: deployment
Requires-Dist: Pillow (>=8.3.2,<9.0.0)
Requires-Dist: flask (>=1.1.2,<2.0.0)
Requires-Dist: flask-restful (>=0.3.8,<0.4.0)
Requires-Dist: gunicorn (>=20.1.0,<21.0.0); extra == "deployment"
Requires-Dist: peewee (>=3.13.3,<4.0.0)
Requires-Dist: ruamel.yaml (>=0.16.12,<0.17.0)
Project-URL: Repository, https://github.com/enpaul/kodak/
Description-Content-Type: text/markdown

# 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/<name>/foobar

  GET /image/<name>/black+white
  ```

- Support optionally exposing full-resolution source images

  ```
  GET /image/<name>/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.

