/kinu

Primary LanguageGoMIT LicenseMIT

Kinu

Kinu is the server that resizing images. Inspired by cookpad's image server Tofu.

Status

It's development now for first alpha release.

Dependency

  • ImageMagick >= 6.8.9-9 && < 7.0.0

Installation

# Please to Install the ImageMagick before this
go get github.com/tokubai/kinu

or

docker pull tokubai/kinu:1.0.0.alpha13

Startup

go get

$ export KINU_LOG_LEVEL=info
$ export KINU_RESIZE_ENGINE=ImageMagick
$ export KINU_STORAGE_TYPE=File 
$ export KINU_FILE_DIRECTORY=/tmp/kinu
$ kinu
INFO[0000] setup resize engine                           resize_engine_type=ImageMagick
INFO[0000] setup storage                                 storage_type=File
INFO[0000] [starting kinu on 127.0.0.1:8080]
$ curl http://localhost:8080/version

docker run

$ docker run tokubai/kinu:1.0.0.alpha13
INFO[0000] setup resize engine                           resize_engine_type=ImageMagick
INFO[0000] setup storage                                 storage_type=File
INFO[0000] [starting kinu on 0.0.0.0:80]
$ curl http://localhost/version

Usage

ImageUpload

kinu.gem(Recommended)

require 'kinu'
Kinu::Resource.new(:foods, 1).upload(open('/path/to/image.jpg'))

curl

$ curl -X POST -F id=1 -F name=foods -F image=@/path/to/image http://localhost/upload

GetResizedImage

kinu.gem(Recommended)

require 'kinu'
require 'open-uri'
uri = Kinu::Resource.new(:foods, 1).uri(width: 280, height: 300) #<URI::HTTP http://localhost/images/foods/w=280,h=300/1.jpg>
open(uri).read

curl

$ curl http://localhost/images/foods/w=280,h=300/1.jpg

UploadToSandbox(Temporary)

kinu.gem(Recommended)

require 'kinu'
Kinu::Sandbox.upload(open('/path/to/image.jpg')) #<Kinu::Sandbox:0x007fdf92bdc490 @id="db4f1509-e2f5-40a7-9944-a6b0024f2a24", @name="__sandbox__">

curl

$ curl -X POST -F image=@/path/to/image http://localhost/sandbox

Attach from Sandbox

kinu.gem(Recommended)

require 'kinu'
Kinu::Sandbox.upload(open('/path/to/image.jpg')).attach_to(:foods, 1) #<Kinu::Resource:0x007fdf92b44a00 @id="1", @name="foods">

curl

$ curl -X POST -F sandbox_id=db4f1509-e2f5-40a7-9944-a6b0024f2a24 -F name=foods -F id=1 http://localhost/sandbox

Specification

Endpoints

now writing

Image resize query

now writing

Environment variables

name required default value valid value type note
KINU_BIND 127.0.0.1:80 IP:PORT / unix domain socket path / Einhorn(einhorn@[num]) / FileDescripter(fd@[num]) Compliance with the specifications of the goji/bind package.
KINU_DEBUG none true enable pprof
KINU_RESIZE_ENGINE none ImageMagick
KINU_LOG_LEVEL none panic / fatal / error / warning / info / debug
KINU_LOG_FORMAT text ltsv / json / text
KINU_RESIZE_WORKER_MODE none true
KINU_RESIZE_WORKER_MAX_SIZE cpu num * 10 Integer
KINU_RESIZE_WORKER_WAIT_BUFFER KINU_RESIZE_WORKER_SIZE * 3 Integer
KINU_STORAGE_TYPE none File / S3
KINU_FILE_DIRECTORY none directory path When the File has been set in a KINU_STORAGE_TYPE\ you must set this variable.
KINU_S3_REGION none AWS Region When the S3 has been set in a KINU_STORAGE_TYPE\ you must set this variable.
KINU_S3_BUCKET none Amazon S3 bucket When the S3 has been set in a KINU_STORAGE_TYPE\ you must set this variable.
KINU_S3_BUCKET_BASE_PATH none
AWS_ACCESS_KEY_ID none Compliance with the specifications of the aws-sdk-go package.
AWS_SECRET_ACCESS_KEY none Compliance with the specifications of the aws-sdk-go package.

Directory structure of the image storage.

now writing

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/tokubai/kinu

Thanks

Author