easel

package module
v0.0.0-...-3791a9b Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 13, 2022 License: AGPL-3.0 Imports: 9 Imported by: 0

README

easel - A remote image processing server

Aims & Background

In our datacenter, there are two kinds of machines. Machines with GPU, and those without GPU.

This library lets machines w/o GPU utilize remote GPU power via grpc protocol.

Croquis

design croquis

  • Server must be installed to machines with GPU.
    It accepts GLSL shaders, uniform variables (including textures), and vertexes, then render an image and send it back to clients.
  • Client CLI is a CLI version of client implementation.
  • Client Daemon is a daemon version of client implementation. It monitors a SQL table and process images according to table entries. This daemon could be useful for PHP front-ends.

Implementation

/easel-server the entrypoint of "server" executable.
/easel-client-cli: the entrypoint of "client-cli" executable.
/easel-client-daemon: the entrypoint of "client-daemon" executable.

/image-filters: GLSL shaders. Currently, there is only a lanczos10 filter.
/easel-server/impl:
/proto: grpc definitions.
/util: utility functions.

/test-images: image materials for testing.

Known Issues

How to run

Common Prerequirements
Server
Prerequirements
# GLFW
sudo apt install libglfw3-dev
#
go get -u "github.com/go-gl/gl/v4.1-core/gl"
go get -u "github.com/go-gl/glfw/v3.2/glfw"
go get -u "github.com/Sirupsen/logrus"
go get -u "github.com/golang/protobuf/protoc-gen-go"
go get -u "google.golang.org/grpc"
go get -u "github.com/chai2010/webp"
go get -u "github.com/go-sql-driver/mysql"
Build
go get -u -d "github.com/ledyba/easel/easel-server"
go generate "github.com/ledyba/easel/easel-server"
go install "github.com/ledyba/easel/easel-server"

or, to cross-compile,

mkdir -p $GOPATH/src/githuc.com/ledyba/
cd $GOPATH/src/githuc.com/ledyba/
git clone "git@github.com:ledyba/easel.git"
cd easel
go generate "github.com/ledyba/easel/easel-server"
GOOS=linux GOARCH=amd64 go build -o easel-server "github.com/ledyba/easel/easel-server"
Create Certificates
# create self-signed ca
openssl req -new -x509 -days 3650 -newkey rsa:2048 -nodes -keyout ca.key -out ca.crt
# create client key
openssl req -new -newkey rsa:2048 -nodes -keyout client.key -out client.csr
# sign
openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt
Command line flags
% ./bin/easel-server -h
Usage of ./easel-server:
  -cert string
    	cert file
  -cert_key string
    	private key file
  -help
    	Print help and exit
  -listen string
    	listen addr (default ":3000")
./easel-server \
    -cert=server.crt \
    -cert_key=server.key
    -listen "192.168.0.10:3000"
Client Daemon
Build
go get -u -d "github.com/ledyba/easel/easel-client-daemon"
go generate "github.com/ledyba/easel/easel-client-daemon"
go install "github.com/ledyba/easel/easel-client-daemon"

or, to cross-compile,

mkdir -p $GOPATH/src/githuc.com/ledyba/
cd $GOPATH/src/githuc.com/ledyba/
git clone "git@github.com:ledyba/easel.git"
cd easel
go generate "github.com/ledyba/easel/easel-client-daemon"
GOOS=linux GOARCH=amd64 go build -o easel-client-daemon "github.com/ledyba/easel/easel-client-daemon"
Command line flags
% ./easel-client-daemon -h
Usage of ./easel-client-daemon:
 -cert string
     cert file
 -cert_key string
     private key file
 -db string
     db address (default "user:password@tcp(host:port)/dbname")
 -filter string
     applied filter name. (default "lanczos")
 -filter_lobes int
     lobes parameter (default 10)
 -help
     Print help and exit
 -server string
     server to connect (default "localhost:3000")
 -workers int
     workers to run (default 10)

Example:

easel-client-daemon \
    -cert=client.crt \
    -cert_key=cert.key \
    -db="test:hoge@tcp(localhost:3306)/easel" \
    -server="192.168.0.10:3000"
Client CLI
Build
go get -u -d "github.com/ledyba/easel/easel-client-cli"
go generate "github.com/ledyba/easel/easel-client-cli"
go install "github.com/ledyba/easel/easel-client-cli"

or, to cross-compile,

mkdir -p $GOPATH/src/githuc.com/ledyba/
cd $GOPATH/src/githuc.com/ledyba/
git clone "git@github.com:ledyba/easel.git"
cd easel
go generate "github.com/ledyba/easel/easel-client-cli"
GOOS=linux GOARCH=amd64 go build -o easel-client-cli "github.com/ledyba/easel/easel-client-cli"
Command line flags
% ./easel-client-cli -h
Usage of ./easel-client-cli:
  -cert string
    	cert file
  -cert_key string
    	private key file
  -filter string
    	applied filter name. (default "lanczos")
  -filter_lobes int
    	lobes parameter (default 10)
  -help
    	Print help and exit
  -quality float
    	quality (default 95)
  -scale float
    	scale (default 2)
  -server string
    	server to connect (default "localhost:3000")

Example:

./easel-client-cli \
    -cert=client.crt \
    -cert_key=cert.key \
    test-images/momiji.png

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Easel

type Easel struct {
	// contains filtered or unexported fields
}

Easel ...

func NewEasel

func NewEasel() *Easel

NewEasel ...

func (*Easel) CompileProgram

func (e *Easel) CompileProgram(vertex, fragment string) (*Program, error)

CompileProgram ...

func (*Easel) CreateTexture2D

func (e *Easel) CreateTexture2D(img image.Image) (*Texture2D, error)

CreateTexture2D ...

func (*Easel) Destroy

func (e *Easel) Destroy()

Destroy ...

func (*Easel) DetachCurrent

func (e *Easel) DetachCurrent()

DetachCurrent ...

func (*Easel) LoadTexture2D

func (e *Easel) LoadTexture2D(data []byte) (*Texture2D, image.Image, error)

LoadTexture2D ...

func (*Easel) MakeCurrent

func (e *Easel) MakeCurrent()

MakeCurrent ...

func (*Easel) NewPalette

func (e *Easel) NewPalette() (*Palette, error)

NewPalette ...

func (*Easel) SwapBuffers

func (e *Easel) SwapBuffers()

SwapBuffers ...

type Palette

type Palette struct {
	// contains filtered or unexported fields
}

Palette ...

func (*Palette) AttachArrayIndexBuffer

func (p *Palette) AttachArrayIndexBuffer(data []uint16) (*VertexBuffer, error)

AttachArrayIndexBuffer ...

func (*Palette) AttachProgram

func (p *Palette) AttachProgram(prog *Program)

AttachProgram ...

func (*Palette) Bind

func (p *Palette) Bind() error

Bind ...

func (*Palette) BindArrayAttrib

func (p *Palette) BindArrayAttrib(vertexbuffer *VertexBuffer, indecies *VertexBuffer, name string, size, stride, offset int32) error

BindArrayAttrib ...

func (*Palette) BindTexture

func (p *Palette) BindTexture(name string, tex *Texture2D) (*Texture2D, error)

BindTexture ...

func (*Palette) BindUniformf

func (p *Palette) BindUniformf(name string, vecDim int, data []float32) error

BindUniformf ...

func (*Palette) BindUniformi

func (p *Palette) BindUniformi(name string, vecDim int, data []int32) error

BindUniformi ...

func (*Palette) Destroy

func (p *Palette) Destroy()

Destroy ...

func (*Palette) MakeArrayBuffer

func (p *Palette) MakeArrayBuffer(data []float32) (*VertexBuffer, error)

MakeArrayBuffer ...

func (*Palette) Program

func (p *Palette) Program() *Program

Program ...

func (*Palette) Render

func (p *Palette) Render(size image.Rectangle) (image.Image, error)

Render ...

func (*Palette) Unbind

func (p *Palette) Unbind()

Unbind ...

type Program

type Program struct {
	// contains filtered or unexported fields
}

Program ...

func (*Program) Destroy

func (p *Program) Destroy() error

Destroy ...

func (*Program) Unuse

func (p *Program) Unuse()

Unuse ...

func (*Program) Use

func (p *Program) Use() error

Use ...

type Texture2D

type Texture2D struct {
	// contains filtered or unexported fields
}

Texture2D ...

func (*Texture2D) Destroy

func (tex *Texture2D) Destroy()

Destroy ...

type VertexArray

type VertexArray struct {
	// contains filtered or unexported fields
}

VertexArray ...

func (*VertexArray) Destroy

func (va *VertexArray) Destroy()

Destroy ...

type VertexBuffer

type VertexBuffer struct {
	// contains filtered or unexported fields
}

VertexBuffer ...

func (*VertexBuffer) Bind

func (vb *VertexBuffer) Bind() error

Bind ...

func (*VertexBuffer) Destroy

func (vb *VertexBuffer) Destroy()

Destroy ...

func (*VertexBuffer) Unbind

func (vb *VertexBuffer) Unbind()

Unbind ...

Directories

Path Synopsis
Package proto is a generated protocol buffer package.
Package proto is a generated protocol buffer package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL