Files
pythagoras/README.md

4.9 KiB

Pythagoras

Local-run server which acts as a proxy between the moderation server, presentation client and subtitle scripts. This is a single-purpose ugly implementation with its sole purpose being the Richard Stallman lecture at TUL.

Dependencies

  • pyenv
  • python virtualenv
  • bun

Installation

Clone the repository:

git clone git@gordon.zumepro.cz:zumepro/pythagoras.git

Install the dependencies:

sudo pacman -S python-virtualenv

Running the app

Simply execute the run recipe in the Makefile to start the server:

make run

Note that run is also the default recipe. So make works too.

The run recipe should take care of everything for you... enjoy!

Running translation server

To start translation server for subtitle translation, run:

make libretranslate

You can keep it running through multiple make run's. The makefile will pre-install everything if needed.

Cleaning up the mess

If you wish to go back to a clean slate just run:

make clean

Packing for production

To make an archive pythagoras.tar.xz in project root simply run:

make pack

Usage

To connect to the WebSocket for receiving subtitles, messages and commands, simply use the /ws endpoint, for example like this:

websocat ws://localhost:8000/ws

Subtitles

Here is a list of all subtitle types:

  • subtitle_en_submit_sentence, subtitle_cs_submit_sentence, subtitle_en_update_current

To push new subtitles onto the server, use the /subtitles/ endpoints. There are currently two different ones, and each produces different response type. When translation is enabled, each sentence submission yields two websocket messages, one in English and one in Czech. Here are some examples:


  • The first is /subtitles/update_current, which serves the purpose of updating the current sentence as it comes. Here is an example:

curl -X POST http://localhost:8000/subtitles/update_current -H "Content-Type: text/plain" -d 'I love pushing '


  • The second is /subtitles/submit_sentence, which is used to submit the next finished sentence. Here is an example:

curl -X POST http://localhost:8000/subtitles/submit_sentence -H "Content-Type: text/plain" -d 'I love pushing sentences to servers!'


Commands

Here is a list of all commands:

  • getselectedmessage, setlibretranslate, setautopolling, autopollingrate, playvideo, seekvideo, setscreen_main, setscreen_video, setscreen_idle

To control the server using commands, use the /control endpoint, for example like this:


  • Poll the peehaitchpea server for the latest message to display:

curl -X POST http://localhost:8000/control -H "Content-Type: application/json" -d '{"command": "getselectedmessage"}'


  • Change the state of the LibreTranslate translation module (active or deactivated):

curl -X POST http://localhost:8000/control -H "Content-Type: application/json" -d '{"command": "setlibretranslate", "state": false}'


  • Change the state of auto-polling:

curl -X POST http://localhost:8000/control -H "Content-Type: application/json" -d '{"command": "setautopolling", "state": false}'


  • Set the polling rate to a value (in seconds):

curl -X POST http://localhost:8000/control -H "Content-Type: application/json" -d '{"command": "autopollingrate", "rate": 10}'


  • Tell the client to play a video, defined by the filename parameter. It has optional parameters subtitles, which should point to a subtitle file and defaults to null, and secondsfromstart which indicated the timestap at what the video should start, which defaults to 0:

curl -X POST http://localhost:8000/control -H "Content-Type: application/json" -d '{"command": "playvideo", "filename": "stallman.webm"}'

curl -X POST http://localhost:8000/control -H "Content-Type: application/json" -d '{"command": "playvideo", "filename": "stallman.webm", "subtitles": "stallman.vtt", "secondsfromstart": 69}'


  • Seek the currently played video to a timestamp (in seconds):

curl -X POST http://localhost:8000/control -H "Content-Type: application/json" -d '{"command": "seekvideo", "timestamp": 420}'


  • Set the screen of the client to the main view (subtitles and messages):

curl -X POST http://localhost:8000/control -H "Content-Type: application/json" -d '{"command": "setscreen_main"}'


  • Set the screen of the client to the video playback:

curl -X POST http://localhost:8000/control -H "Content-Type: application/json" -d '{"command": "setscreen_video"}'


  • Set the screen of the client to the idle screen (this is the default screen after startup of the app):

curl -X POST http://localhost:8000/control -H "Content-Type: application/json" -d '{"command": "setscreen_idle"}'


Media

You can also request media from Pythagoras using the /media/ endpoint, which will yield you the standard HTTP FileResponse, here is an example:

curl -X GET http://localhost:8000/media/stallman.webm