shottower

command module
v0.0.4 Latest Latest
Warning

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

Go to latest
Published: Aug 19, 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/{version}/renders/:id to download renders (instead of cdn/s3)
  • 😎 Add other values for resolution (360, 480, 540, 720) all with default 25 fps.
  • 😎 Add other values for output quality (highest, lowest).
  • [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 Yes βœ…
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] all βœ… Yes βœ…
Clip [ImageAsset] all βœ… Yes βœ…
Clip [TitleAsset] all Not yet
Clip [HTMLAsset] all Not yet
Clip [AudioAsset] src Partial πŸ›  Download asset only
Clip [AudioAsset] trim Not yet
Clip [AudioAsset] volume Not yet
Clip [AudioAsset] effect Not yet
Clip [LumaAsset] src Partial πŸ›  Download asset only
Clip [LumaAsset] trim 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 Yes βœ…
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