{"id":15014660,"url":"https://github.com/merumerutho/lovj","last_synced_at":"2025-04-12T08:23:16.828Z","repository":{"id":45483782,"uuid":"437248105","full_name":"merumerutho/LOVJ","owner":"merumerutho","description":"LÖVE2D-based live-coding visual framework supporting GLSL shaders and Spout for code-oriented VJs","archived":false,"fork":false,"pushed_at":"2025-04-11T12:08:55.000Z","size":18453,"stargazers_count":13,"open_issues_count":5,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-11T12:53:13.320Z","etag":null,"topics":["live-coding","livecoding","love2d","love2d-framework","lua","midi","music","osc","vfx","visuals"],"latest_commit_sha":null,"homepage":"","language":"Lua","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/merumerutho.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-12-11T10:12:53.000Z","updated_at":"2025-04-11T12:08:58.000Z","dependencies_parsed_at":"2024-08-17T07:49:11.737Z","dependency_job_id":"a271c183-54f2-4982-99a7-e67d5414f139","html_url":"https://github.com/merumerutho/LOVJ","commit_stats":{"total_commits":211,"total_committers":2,"mean_commits":105.5,"dds":0.004739336492891044,"last_synced_commit":"a1dba59535e9e5b8f0f2dcbd5def6979ff7c43cc"},"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/merumerutho%2FLOVJ","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/merumerutho%2FLOVJ/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/merumerutho%2FLOVJ/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/merumerutho%2FLOVJ/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/merumerutho","download_url":"https://codeload.github.com/merumerutho/LOVJ/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248537947,"owners_count":21120915,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["live-coding","livecoding","love2d","love2d-framework","lua","midi","music","osc","vfx","visuals"],"created_at":"2024-09-24T19:45:55.867Z","updated_at":"2025-04-12T08:23:16.821Z","avatar_url":"https://github.com/merumerutho.png","language":"Lua","readme":"\u003ccenter\u003e\u003cimg src=\"https://raw.githubusercontent.com/merumerutho/LOVJ/main/doc/img/logo.png\" width=500 /\u003e\u003c/center\u003e\n\n# LOVE2D VJing Framework\nLOVJ aims to be a [LÖVE](https://love2d.org/) framework to create a live-coding, interactive VJing environment mainly targeted at live music performances.\nIt revolves around the concept of video patches: these can be loaded, sequenced, and mixed in several ways.\n\nIt allows interaction with the patches through:\n- code editing (with **livecoding** hot-reload features)\n- common controls (mouse / keyboard / touch)\n- external controls (**OSC**)\n\nMoreover, it supports advanced functionalities such as:\n- **GLSL** shaders support (for advanced rendering techniques, such as ray-marching).\n- **Spout** Send/Receive functions (allowing streaming to/from external apps, feedback loops, etc.).\n- **Savestates** (save/recall patches internal status quickly).\n- **OSC** network server via **UDP**.\n\n## Screenshots\n\n\u003cimg src=\"https://raw.githubusercontent.com/merumerutho/LOVJ/main/doc/img/screen/1.png\" width=300/\u003e\n\u003cimg src=\"https://raw.githubusercontent.com/merumerutho/LOVJ/main/doc/img/screen/2.png\" width=300/\u003e\n\u003cimg src=\"https://raw.githubusercontent.com/merumerutho/LOVJ/main/doc/img/screen/4.png\" width=300/\u003e\n\u003cimg src=\"https://raw.githubusercontent.com/merumerutho/LOVJ/main/doc/img/screen/3.png\" width=300/\u003e\n\u003cimg src=\"https://raw.githubusercontent.com/merumerutho/LOVJ/main/doc/img/screen/5.png\" width=300/\u003e\n\u003cimg src=\"https://raw.githubusercontent.com/merumerutho/LOVJ/main/doc/img/screen/6.png\" width=300/\u003e\n\n\n## Setup\n- [LÖVE](https://love2d.org/) version 11.4+\n- Add LOVE2D bin folder to your PATH variable\n- Download/clone this repository.\n- From this repo main folder (containing the main.lua script), run:\n```sh\nlove .\n```\n\n## Usage\n### General\n- **F1 ... F12** to switch between patches.\n- **CTRL + Return** toggle fullscreen.\n- **CTRL + S** toggle shader on/off\n- **CTRL + U** upscale\n- **S** cycle through effects\n\n### Visual effects adjustments\nYou should use them in combination with the **UP** or **DOWN** arrow keys to change the effect intensity, after selecting the corresponding effect with the **S** key.\n\n- **W** for warp effect\n- **K** kaleidoscope effect\n- **G** blur effect\n\n## Porting GLSL shaders\nYou can port GLSL shaders to LOVJ by creating a new patch in postProcess and readapt the shader code.\n\nThis is how a GLSL shader should be implemented to be compatible with LOVJ.\n```C++\n// @param vec4  _param1 {0.0, 1.0, 0.0, 1.0} //\n// @param vec2  _param2 {-0.1, 0.1} //\n// @param float _param3 -0.1 //\n\nextern vec4  _param1;\nextern vec2  _param2;\nextern float _param3;\n\nvec4 effect(vec4 color, Image tex, vec2 texture_coords, vec2 screen_coords) {\n    -- your shader code here  (must include usage of _param1, _param2, _param3)\n}\n```\nNotice the ```@param \u003ctype\u003e \u003cname\u003e \u003cdefault_value\u003e``` tags. \n\nThey are used to automatically instance dedicated resources for each shader parameter, with a default initial value.\n\nThese are instanced with the following name structure: _\u003cshadername_paramname\u003e_\n\n### Passing value to shader\nTo update the value of the shader parameter, one can use the following in the update cycle, as an example:\n```lua\n-- cfg/cfg_shaders.lua\nif string.find(shader.name, \"yourShaderName\") then\n    shader.object:send(\"_param3\", s:get(\"yourShaderName__param3\"))\nend\n```\n\nAnd to change the value:\n```lua\n-- cfg/cfg_shaders.lua\n-- ...\n-- yourShaderName\nif kp.isDown(\"m\") then\n    if kp.isDown(\"up\") then s:set(\"yourShaderName__param3\", (s:get(\"yourShaderName__param3\") + 0.1)) end\n    if kp.isDown(\"down\") then s:set(\"yourShaderName__param3\", (s:get(\"yourShaderName__param3\") - 0.1)) end\nend\n```\n\nFeel free to adapt the parameter name and the value to your needs, this is just an example that binds the parameter to the **M** key and allows to change it with the **UP** and **DOWN** arrow keys.\n\nThen, in order to use the shader, you need to cycle through the effects with the **S** key, until you reach the desired effect.\n\n## Issues\nLOVJ is still in a work-in-progress state. Development is messy and several features are kind of broken. \nIt can be played with, but don't expect the software to be working reliably in its current state. Check Issue tracker for more info.\n\n## Running the demos\n- Open _cfg/cfg_patches.lua_.\n- Edit the _defaultPatch_ or the _patches_ list.\n- Run LOVJ.\n- Select the chosen demo from _patches_ with the [F1 ... F12] keys.\n\n\n## Credits\n- [lick](https://github.com/usysrc/lick) original *LICK* implementation for live-coding features (MIT license).\n- [json.lua v.0.1.2](https://github.com/rxi/json.lua) Json library (MIT license).\n- [losc v.1.0.1](https://github.com/davidgranstrom/losc) Lua OSC library (MIT license).\n- [Spout](https://spout.zeal.co/) Spout library (BSD-2 license).\n\n\n## MIDI to OSC\nA simple tool to relay MIDI messages to OSC messages based on some configuration can be found [here](https://github.com/merumerutho/MIDI2OSC).","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmerumerutho%2Flovj","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmerumerutho%2Flovj","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmerumerutho%2Flovj/lists"}