Skip to content

mntone/VookIt

Repository files navigation

VookIt!

✨100%趣味で書かれたソフトウェアです。

I really wanted to write a sentence in Japanese. It means “This software is written entirely as a hobby.” It’s sales copy of light-weighted novel, BAKEMONOGATARI.

VookIt! = Video + Bookmark it!

VookIt is short video sharing software. In the Development Stages!!

日本語で「ヴキット!」って発音してほしいけど、字面にするとダサい、草。

Features and Future

Implemented features

  • Create MPEG-DASH & HLS files automatically
  • Ultrawide (21.6:9) & 120 fps video support
  • Chunk uploading with JavaScript
  • HEVC (default off) & AV1 video support

TODO

  • Manage streams (I'm sorry. Currently, stream name isn't applied automatically.)
  • User authentication
  • Tag
    • Tune encode settings by game title tag.
  • Bypass audio data (ABR 256 kbps AAC-LC only)
  • Detect device features (120 fps, HDR and supported codec)

Planned Features

  • Markdown Description
  • Limited Share (account-based & time-based limit)
  • List view for top page
  • Reaction (like misskey.io)
    • Text-based (use emoji and short word)
      • like "lol", "No Way!", "For Real?", "What?", "(笑)", "笑", "草", "w", "W", "www", "草www", "草に草生やすなwww", "マジで?" and "🤔"
      • DO NOT TRANSLATION. But, show meaning.
  • Portrait video support
  • HDR video support
    • 10-bit encoding system
    • SDR color grading

Under Consideration

  • Change database

Not Planned Features

  • Live streaming

How to Use

  1. Install nodejs, ffmpeg and SQLite.
  2. Build static assets.
% npm run webpack:build
  1. Generate SSL certificate (if use ssl) and session key.
% npm run openssl:init
% npm run session:init
  1. Set docker volume up.
% docker volume create vhosting_node_modules
  1. Start docker and hawks (backend). Currently, use local node.js and ffmpeg for the backend.
% docker-compose up -d
% npm run hawks:start
  1. (Tentatively) Create your user. Currently program use screenname "dev" (hard coding on source).
% npm run user:new dev [password]
  1. (Manual) Rename directory after encoding. For example, rename "./.media/[usid]/st_avc1_ntvp" to "./.media/[usid]/avc1". In the future, program use as-is stream name like "st_avc1_720p" or "st_avc1_ntvp".

Architecture

Frontend: clogs

  • Controllers: parse requests, invoke usecases and return objects (nest with fastify)
  • Views: build views (React SSR + Bulma)
  • Usecase: execute jobs
  • Database: read/write data (Prisma with sqlite)
+-------------+
|   Browser   |
+-------------+
  ↓ 1  ↑ 6
+-------------+
| Controllers |
+-------------+
  ↓ 2  ↑ 5
+-------------+
|   Usecase   |
+-------------+
  ↓ 3  ↑ 4
+-------------+
|  Database   |
+-------------+

Backend: hawks

  • Service Workers: dispatch tasks (BullMQ with Redis)
  • Dispatchers: create jobs (internal)
  • Encoders: encode video and audio (ffmpeg with x264, x265, libvpx, SVT-AV1 and so on…)
+-----------------+
| Service Worker  |
+-----------------+
    ↓ 1    ↑ 4
+-----------------+
|   Dispatcher    |
+-----------------+
    ↓ 2    ↑ 3
+-----------------+
|     Encoder     |
+-----------------+

Authors

  • mntone - Initial work.

License

VookIt! is licensed under the GPLv3 license - see the LICENSE.txt file for details.