shottower

command module
v0.0.2 Latest Latest
Warning

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

Go to latest
Published: Jul 27, 2022 License: AGPL-3.0 Imports: 4 Imported by: 0

README ยถ

ShotTower

golangci-lint ginkgo GitHub go.mod Go version of a Go module GoDoc reference example GoReportCard GitHub release

An open source, self-hosted implementation of the Shotstack backend server.

Join our Discord server for a chat.

What is ShotStack

ShotStack is a video editing API that allow to build dynamic Video Applications at Scale.

Everything in ShotStack is Open Source, except the Dashboard and the backend server.

The backend server translate JSON to FFMPEG commands and serve the result.

Design goal

shottower aims to implement a self-hosted, open source alternative to the Shotstack backend server. shottower has a narrower scope and are not built for heavy transcode (but pull request are welcome!).

shottower uses terms that maps to Shotstack's API, consult the glossary for explanations.

Support

If you like shottower and find it useful, there is a sponsorship and donation buttons available in the repo.

If you would like to sponsor features, bugs or prioritization, reach out to one of the maintainers.

Features (Basic + Exclusive ๐Ÿ˜Ž)

  • "Basic" (Track, Clip, VideoAsset, ...) support of Shotstack's features (See bellow for progress)
  • ๐Ÿ˜Ž Possible to burn subtitle into video clip
  • ๐Ÿ˜Ž Allow to use local file from url filed (file:///Users/dblk/clips/my_asset)
  • ๐Ÿ˜Ž Add an endpoint /dl/renders/:id to download renders (instead of cdn/s3)
  • ๐Ÿ˜Ž Add other value in resolution (360, 480, 540, 720) all with default 25 fps.
  • [Planned] Allow to use ftp file from url filed (ftp://user:password@dblk.org/mypath/my_asset)
  • [Planned] Add destination to Youtube
Shotstack implementation progress

In the following matrix, there is only components than their implementation have been started.
At the end of the road this section should either disappear or be full of Yes ๐Ÿ˜‡.

Component Property Implemented Comment
Timeline soundtrack Not yet
Timeline background Yes โœ…
Timeline fonts Not yet
Timeline tracks Yes โœ…
Timeline cache Not yet
Track โœ… all โœ… Yes โœ…
Clip asset Partial ๐Ÿ›  Only VideoAsset are started
Clip start Yes โœ…
Clip length Yes โœ…
Clip fit Not yet
Clip scale Yes โœ…
Clip position Yes โœ…
Clip offset Not yet
Clip transition Not yet
Clip effect Not yet
Clip filter Not yet
Clip opacity Not yet
Clip transform Not yet
Clip [VideoAsset] src Yes โœ…
Clip [VideoAsset] trim Yes โœ…
Clip [VideoAsset] volume Yes โœ…
Clip [VideoAsset] crop Not yet
Clip [ImageAsset] src Partial ๐Ÿ› 
Clip [ImageAsset] crop Not yet
Output format Partial ๐Ÿ›  Only mp4 at the moment
Output resolution Yes โœ…
Output aspectRatio Not yet
Output size Yes โœ…
Output fps Yes โœ…
Output scaleTo Not yet
Output quality Not yet
Output repeat Not yet
Output range Not yet
Output poster Not yet
Output thumbnail Not yet
Output destinations Not yet
Endpoint implementation

There are several endpoints that are available but not all of them are implemented.

Category Endpoint Description Status Comment
Edit Render asset Yes โœ…
Edit Get Render Status Partial ๐Ÿ›  Missing real owner
Edit Create Template Not yet
Edit List Template Not yet
Edit Retrieve Template Not yet
Edit Update Template Not yet
Edit Delete Template Not yet
Edit Render Template Not yet
Edit Inspect Media Not yet
Serve Get Asset Partial ๐Ÿ› 
Serve Delete Asset Not yet
Serve Get Asset by Render ID Not yet

Running shottower

Please have a look at the documentation under docs/.

Disclaimer

  1. We have nothing to do with shotstack
  2. The purpose of ShotTower is maintaining a working, self-hosted Shotstack api compatible backend.

Contributing

To contribute to shottower you would need the latest version of Go.

Code style

To ensure we have some consistency with contributions, this project has adopted linting and style/formatting rules:

The Go code is linted with golangci-lint.

Check out the .golangci.yml to see the specific configuration.

Commit message

To ensure, the changelog are well generated, please use prefix in your commit message as follow:

  • feat, features, feature: For new features
  • fix: For any fix
  • doc, docs: For any update in documentation (README, etc...)

And if you really need to commit something that is not working wip ou test are your friends.

Install development tools
  • Go
  • FFMPEG (v5 or up)
  • (optional) I recommend using gow
Testing and building

To run the tests (solo execution):

ginkgo -r --randomize-all --randomize-suites --race --trace -cover

To run the tests during development:

ginkgo watch -r --randomize-all --race --trace

To build the program:

go build
Running the server

To run the server, follow these simple steps:

go run main.go

To run the server in a docker container

docker build --network=host -t shottower .

Once image is built use

docker run --rm -it shottower

Contributors

Rรฉmy
Rรฉmy Boulanouar

Documentation ยถ

The Go Gopher

There is no documentation for this package.

Directories ยถ

Path Synopsis
shottower Copyright (C) 2022 Rรฉmy Boulanouar
shottower Copyright (C) 2022 Rรฉmy Boulanouar
shottower Copyright (C) 2022 Rรฉmy Boulanouar
shottower Copyright (C) 2022 Rรฉmy Boulanouar

Jump to

Keyboard shortcuts

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