Diffuse

Diffuse is a collection of web applets that make it possible to listen to audio from various sources on your devices and the web, and to create the ideal digital listening experience for you.

These applets can be used in various ways. The main ways so far are: (a) through themes, a traditional browser (web application) approach, and (b) abstractions for non-browser systems.

Themes

Themes are “applet compositions” and provide a traditional browser web application way of using them. Each theme is unique, not just a skin (eg. not like winamp skins).

For example, most themes here will limit the currently playing audio tracks to one item, but you might as well create a DJ theme that can play multiple items at the same time.

Abstractions

These are applet configurations that enable certain use cases outside the traditional web app experience. Just like themes, these include various assumptions of how certain parts of the system should interact.

TODO: Enable intelligent user (ai) agent use-case.

Applets

Applets are web applets, the components of the system. These are then recombined into an entire music player experience, or whatever you want to build.

Configurators

Applets that serve as an intermediate in order to make a particular kind of applet configurable. In other words, these allow for an applet to be swapped out with another that takes the same, or a subset of the actions and data output.

Engines

Applets with each a singular purpose and don't have any UI. There are specialised UI applets in themes that control these.

Input

Inputs are sources of audio tracks. Each track is an entry in the list of possible items to play. These can be files or streams. Or in other words, static or dynamic.

Orchestrators

These too are applet compositions. However, unlike themes, these are purely logical, and reuse applet instances from the parent context (when available). Mostly exist in order to construct sensible defaults to use across themes and abstractions.

Output

Output is application-derived data such as playlists. These applets can receive such data and keep it around.

Processors

These applets interact with the bytes provided by the input applets. This processed data can then be passed on to other applets.

  • (TODO) Artwork fetcher
  • (TODO) HTTP(S) metadata fetcher

Supplements

Additional applets, such as scrobblers.