Skip to content

bluebears-dev/rex

Repository files navigation

Rex - The distributed rendering platform supervisor

Elixir CI Coverage Status codebeat badge

What is it?

Rex is a web service functioning as the passive rendering supervisor. It just manages connected nodes and reacts to their requests appropriately. Currently, it supports only one client, which is Blender (by using a dedicated add-on which will be released in the future).

The project was part of the Bachelor's thesis on how to improve rendering times by using the distributed network.

Features

In current state it only handles animation projects (there is a plan to extend this to scenes and more complex configurations).

Everything is managed through Blender plug-in, including starting rendering project. This is a subject to change, as Blender plug-in is highly inconvenient and hard to maintain.

As for now, client can:

  • start a project,
  • join the network,
  • send the rendered fragment,
  • ask for next task.

Rex can also restore its state after restart - right now this is partially made and it will be extended.

Rex uses Phoenix Channels to handle most of node communication. Sometimes direct HTTP call is used, for example sending a project to the supervisor.

About project structure

Rex uses umbrella project structure and it contains two main modules: RexData and RexWeb.

Developer environment

How to set up the project?

If you would like to run the very-alpha version of the Rex, you would need:

Both docker and docker-compose are used to start the PostgreSQL database, which is used to provide persistence for the supervisor. You can also start your database locally and just tweak the values in the .env file.

After having dependencies installed, you need to do a few simple steps before starting it up:

  • Create .env file using provided .env.example,
  • Run mix deps.get inside the root project directory,
  • Start the database by running docker-compose up -d.
  • Run migrations mix ecto.migrate

Then you can start the web service by issuing the mix phx.server and it will be available on the localhost:4000.

What is the recommended tooling?

I prefer the VS Code as the main editor along with these plugins for Elixir dev:

  • ElixirLS Fork: Elixir support and debugger,
  • hex.pm IntelliSense.

The project also uses dialyxir and the credo for linting and formatting purposes. You can run those by issuing below commands:

mix dialyzer
mix credo

Releases

No releases published

Packages

No packages published

Languages