Micro-service for file storage and processing written in Go
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
Roman Zipp 88230d5109 Fix main app settings variable name collision 3 years ago
.github/workflows Add CI 3 years ago
auth Add additional test for AuthenticationMiddleware that checks for Bearer prefix 3 years ago
config Add missing flip direction field in example pipeline config 3 years ago
pipelines Fix various formatting 3 years ago
settings Add LoadSettings function error handling 3 years ago
storage Add storage provider open method 3 years ago
tests/files Add pipeline test image dimension assertions 3 years ago
.gitignore Add settings.json to .gitignore 3 years ago
README.md Add required authorization header for endpoints to readme 3 years ago
go.mod Add resizing images 3 years ago
go.sum Add resizing images 3 years ago
main.go Fix main app settings variable name collision 3 years ago
main_test.go Fix flipped expected and actual parameters in main tests 3 years ago

README.md

Lithium

Micro-service for file storage and processing written in Go.

Features

  • Image processing pipelines for various transformations
  • Web API for storing & retrieving files

Requirements

Setup

1. Clone repository

git clone git@gogs.informatik.hs-fulda.de:FabianVowie/Lithium.git

2. Pull dependencies

go get

3. Build & start application

go run .

Run using Docker container

docker run --rm -p 8000:8000 -v "$PWD":/usr/src/lithium -w /usr/src/lithium golang:1.17 go run .

Testing

go test ./...

Run tests in verbose logging mode

go test ./... -v

Run tests in Docker container

docker run --rm -v "$PWD":/usr/src/lithium -w /usr/src/lithium golang:1.17 go test ./...

API

GET /

Show application information.

Required headers:

Authorization: Bearer <Token>

Example response:

{
  "name": "Lithium",
  "version": "0.1.0"
}

GET /{pipeline}

Show pipeline information.

Required headers:

Authorization: Bearer <Token>

Example response:

{
  "name": "example pipeline",
  "slug": "example",
  "type": 0,
  "remove_metadata": false,
  "steps": [
    {
      "name": "resize image",
      "type": 0,
      "options": {
        "width": 1280,
        "height": 720,
        "upscale": false
      }
    }
  ],
  "output": {
    "format": 0,
    "quality": 90
  }
}

Configuration

Config options can be adjusted via the settings.json file in the root directory.

{
  "endpoint": "0.0.0.0:8000",
  "token": "changeme",
  "storage_provider": {
    "type": 0,
    "base_path": "assets"
  }
}

Pipelines

The project uses a pipeline system defined by JSON files located in the config folder. Take a look at the example pipeline configuration file.

Available pipeline types: 0 (Image), 1 (Video)

{
  "name": "example pipeline",
  "slug": "example",
  "type": 0,
  "removeMetadata": false,
  "steps": [],
  "output": {}
}

Images pipeline

The image pipeline offers the following additional output options.

Available format types: 0 (jpeg)
The quality field can contain any integer between 1 and 100.

{
  "output": {
    "format": 0,
    "quality": 90
  }
}

Available pipeline steps

Each pipeline step consists of an optional name, a predefined type and configurable options. See the available options below for more information.

{
  "name": "step name",
  "type": 0,
  "options": {}
}

Resizing images

Resize an image by a given width and height.

Step definition:

{
  "type": 0,
  "options": {
    "width": 1280,
    "height": 720
  }
}

Rotating images

Rotate an image with a given angle in degrees.

Step definition:

{
  "type": 1,
  "options": {
    "angle": 90.0
  }
}

Flipping images

Flip an image with a given direction. Allowed values for the direction option are "h" (horizontal), "v" (vertical)

Step definition:

{
  "type": 2,
  "options": {
    "direction": "h"
  }
}

Grayscale

Convert the colorspace of an image into grayscale.

Step definition:

{
  "type": 3
}

Authors