{"id":13578138,"url":"https://github.com/hydra-synth/hydra","last_synced_at":"2025-05-14T03:09:25.943Z","repository":{"id":38886082,"uuid":"112378220","full_name":"hydra-synth/hydra","owner":"hydra-synth","description":"Livecoding networked visuals in the browser","archived":false,"fork":false,"pushed_at":"2025-03-15T10:22:23.000Z","size":134708,"stargazers_count":2287,"open_issues_count":96,"forks_count":275,"subscribers_count":60,"default_branch":"main","last_synced_at":"2025-04-11T00:43:41.874Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://hydra.ojack.xyz","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hydra-synth.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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":"2017-11-28T19:16:57.000Z","updated_at":"2025-04-10T10:36:38.000Z","dependencies_parsed_at":"2024-01-14T23:55:51.533Z","dependency_job_id":"b023242a-303e-477d-9944-0d1a0bcc0ff1","html_url":"https://github.com/hydra-synth/hydra","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hydra-synth%2Fhydra","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hydra-synth%2Fhydra/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hydra-synth%2Fhydra/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hydra-synth%2Fhydra/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hydra-synth","download_url":"https://codeload.github.com/hydra-synth/hydra/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254059509,"owners_count":22007768,"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":[],"created_at":"2024-08-01T15:01:27.799Z","updated_at":"2025-05-14T03:09:20.931Z","avatar_url":"https://github.com/hydra-synth.png","language":"JavaScript","funding_links":[],"categories":["JavaScript","Frameworks • Libraries","Languages"],"sub_categories":[],"readme":"# Hydra\n\u003c!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section --\u003e\n[![All Contributors](https://img.shields.io/badge/all_contributors-36-orange.svg?style=flat-square)](#contributors-)\n\u003c!-- ALL-CONTRIBUTORS-BADGE:END --\u003e\n![hydra](docs/assets/hydra-3-01.png)\n\nSet of tools for livecoding networked visuals. Inspired by analog modular synthesizers, these tools are an exploration into using streaming over the web for routing video sources and outputs in realtime.\n\nHydra uses multiple framebuffers to allow dynamically mixing, compositing, and collaborating between connected browser-visual-streams. Coordinate and color transforms can be applied to each output via chained functions.\n\nNote: experimental/in development. Right now only works on Chrome or Chromium, on machines with WebGL.\nI welcome pull requests as well as comments, ideas, and bugs in the issues section =]\n\nFor more information, see [getting started](#Getting-Started), [getting started pdf en español](https://github.com/ojack/hydra/blob/master/docs/CODEX%20HYDRA.pdf), [tutorials and examples](./examples/README.md), [the complete list of functions](./docs/funcs.md), [gallery of user-generated sketches](https://twitter.com/hydra_patterns?lang=es), or a [a talk about the motivations for creating hydra](https://www.youtube.com/watch?v=cw7tPDrFIQg).\n\nNote: this repository is for the online version of hydra. Other pieces of hydra are published as separate modules:\n\n* [hydra-synth](https://github.com/ojack/hydra-synth): synth engine of hydra as a standalone npm module\n* [atom-hydra](https://github.com/ojack/atom-hydra): use hydra within atom\n* [rtc-patch-bay](https://github.com/ojack/rtc-patch-bay): networking logic of hydra as a standalone npm module\n\n\n## Getting started\n\nGo to https://hydra.ojack.xyz\n\n* CTRL-Enter: run a line of code\n* CTRL-Shift-Enter: run all code on screen\n* ALT-Enter: run a block\n* CTRL-Shift-H: hide or show code\n* CTRL-Shift-F: format code using [Prettier](https://prettier.io/)\n* CTRL-Shift-S: Save screenshot and download as local file\n* CTRL-Shift-G: Share to twitter (if available). Shares to [@hydra_patterns](https://twitter.com/hydra_patterns)\n\nAll code can be run either from the in-browser text editor or from the browser console.\n\nCheck [@hydra_patterns](https://twitter.com/hydra_patterns) for patterns folks have shared as an easy way to get started.\n\n#### Basic functions\nrender an oscillator with parameters frequency, sync, and rgb offset:\n```javascript\nosc(20, 0.1, 0.8).out()\n```\n\nrotate the oscillator 0.8 radians:\n```javascript\nosc(20, 0.1, 0.8).rotate(0.8).out()\n```\npixelate the output of the above function:\n```javascript\nosc(20, 0.1, 0.8).rotate(0.8).pixelate(20, 30).out()\n```\nshow webcam output:\n```javascript\ns0.initCam() // initialize a webcam in source buffer s0\nsrc(s0).out() // render source buffer s0\n```\nIf you have more than one camera connected, you can select the camera using an index:\n```javascript\ns0.initCam(1) // initialize a webcam in source buffer s0\n```\nwebcam kaleidoscope:\n```javascript\ns0.initCam() // initialize a webcam in source buffer s0\nsrc(s0).kaleid(4).out() // render the webcam to a kaleidoscope\n```\n\nYou can also composite multiple sources together:\n```javascript\nosc(10)\n  .rotate(0.5)\n  .diff(osc(200))\n  .out()\n```\n\nBy default, the environment contains four separate output buffers that can each render different graphics.  The outputs are accessed by the variables o0, o1, o2, and o3.\n\nto render to output buffer o1:\n```javascript\nosc().out(o1)\nrender(o1) // render the contents of o1\n```\nIf no output is specified in out(), the graphics are rendered to buffer o0.\nto show all render buffers at once:\n```javascript\nrender()\n```\n\nThe output buffers can then be mixed and composited to produce what is shown on the screen.\n```javascript\ns0.initCam() // initialize a webcam in source buffer s0\nsrc(s0).out(o0) // set the source of o0 to render the buffer containing the webcam\nosc(10, 0.2, 0.8).diff(o0).out(o1) // initialize a gradient in output buffer o1, composite with the contents of o0\nrender(o1) // render o1 to the screen\n```\n\nThe composite functions blend(), diff(), mult(), and add() perform arithmetic operations to combine the input texture color with the base texture color, similar to photoshop blend modes.\n\nmodulate(texture, amount) uses the red and green channels of the input texture to modify the x and y coordinates of the base texture. More about modulation at: https://lumen-app.com/guide/modulation/\n```javascript\nosc(21, 0).modulate(o1).out(o0)\nosc(40).rotate(1.57).out(o1)\n```\n\nuse a video as a source:\n```javascript\ns0.initVideo(\"https://media.giphy.com/media/AS9LIFttYzkc0/giphy.mp4\")\nsrc(s0).out()\n```\n\n\nuse an image as a source:\n```javascript\ns0.initImage(\"https://upload.wikimedia.org/wikipedia/commons/2/25/Hydra-Foto.jpg\")\nsrc(s0).out()\n```\n\n#### Passing functions as variables\nEach parameter can be defined as a function rather than a static variable. For example,\n```javascript\nosc(function(){return 100 * Math.sin(time * 0.1)}).out()\n```\nmodifies the oscillator frequency as a function of time. (Time is a global variable that represents the milliseconds that have passed since loading the page). This can be written more concisely using es6 syntax:\n```javascript\nosc(() =\u003e (100 * Math.sin(time * 0.1))).out()\n```\n\n## Desktop capture\nOpen a dialog to select a screen tab to use as input texture:\n```javascript\ns0.initScreen()\nsrc(s0).out()\n```\n\n## Connecting to remote streams\nAny hydra instance can use other instances/windows containing hydra as input sources, as long as they are connected to the internet and not blocked by a firewall. Hydra uses webrtc (real time webstreaming) under the hood to share video streams between open windows. The included module rtc-patch-bay manages connections between connected windows, and can also be used as a standalone module to convert any website into a source within hydra. (See standalone camera source below for example.)\n\nTo begin, open hydra simultaneously in two separate windows.\nIn one of the windows, set a name for the given patch-bay source:\n```javascript\npb.setName(\"myGraphics\")\n```\nThe title of the window should change to the name entered in setName().\n\nFrom the other window, initiate \"myGraphics\" as a source stream.\n```javascript\ns0.initStream(\"myGraphics\")\n```\nrender to screen:\n```javascript\ns0.initStream(\"myGraphics\")\nsrc(s0).out()\n```\nThe connections sometimes take a few seconds to be established; open the browser console to see progress.\nTo list available sources, type the following in the console:\n```javascript\npb.list()\n```\n\n## Using p5.js with hydra\n\n```javascript\n// Initialize a new p5 instance It is only necessary to call this once\np5 = new P5() // {width: window.innerWidth, height:window.innerHeight, mode: 'P2D'}\n\n// draw a rectangle at point 300, 100\np5.rect(300, 100, 100, 100)\n\n// Note that P5 runs in instance mode, so all functions need to start with the variable where P5 was initialized (in this case p5)\n// reference for P5: https://P5js.org/reference/\n// explanation of instance mode: https://github.com/processing/P5.js/wiki/Global-and-instance-mode\n\n// When live coding, the \"setup()\" function of P5.js has basically no use; anything that you would have called in setup you can just call outside of any function.\n\np5.clear()\n\nfor(var i = 0; i \u003c 100; i++){\n  p5.fill(i*10, i%30, 255)\n  p5.rect(i*20, 200, 10,200)\n}\n\n// To live code animations, you can redefine the draw function of P5 as follows:\n// (a rectangle that follows the mouse)\np5.draw = () =\u003e {\n  p5.fill(p5.mouseX/5, p5.mouseY/5, 255, 100)\n  p5.rect(p5.mouseX, p5.mouseY, 30, 150)\n}\n\n// To use P5 as an input to hydra, simply use the canvas as a source:\ns0.init({src: p5.canvas})\n\n// Then render the canvas\nsrc(s0).repeat().out()\n```\n\n## Loading external scripts\nThe `await loadScript()` function lets you load other packaged javascript libraries within the hydra editor. Any javascript code can run in the hydra editor.\n\nHere is an example using Three.js from the web editor:\n```javascript\nawait loadScript(\"https://threejs.org/build/three.js\")\n\nscene = new THREE.Scene()\ncamera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000)\n\nrenderer = new THREE.WebGLRenderer()\nrenderer.setSize(width, height)\ngeometry = new THREE.BoxGeometry()\nmaterial = new THREE.MeshBasicMaterial({color: 0x00ff00})\ncube = new THREE.Mesh(geometry, material);\nscene.add(cube)\ncamera.position.z = 1.5\n\n// 'update' is a reserved function that will be run every time the main hydra rendering context is updated\nupdate = () =\u003e {\n  cube.rotation.x += 0.01;\n  cube.rotation.y += 0.01;\n  renderer.render( scene, camera );\n}\n\ns0.init({ src: renderer.domElement })\n\nsrc(s0).repeat().out()\n```\n\nAnd here is an example loading the Tone.js library:\n```javascript\nawait loadScript(\"https://unpkg.com/tone\")\n\nsynth = new Tone.Synth().toDestination();\nsynth.triggerAttackRelease(\"C4\", \"8n\");\n```\n## Running locally\nTo run locally, you must have nodejs installed. Install node and npm from: https://nodejs.org/en/. \n\nTo run, open terminal and enter the directory of the hydra source code:\n```\ncd hydra\n```\ninstall dependencies:\n```\nnpm install\n```\nrun dev environment\n```\nnpm dev\n```\n\n## Connecting to server from dev/ local editor environment\nThis repo only contains hydra editor frontend. You can connect to a backend server (https://github.com/hydra-synth/hydra-server) for signaling and gallery functionality. To do this, set up hydra-server from above. Then create a `.env` file in the root of the `hydra` directory. Add the url of your server as a line in the .env file as:\n```\nVITE_SERVER_URL=http://localhost:8000\n```\n(replace http://localhost:8000 with the url of your server)\n\n## Audio Responsiveness \nFFT functionality is available via an audio object accessed via \"a\". The editor uses https://github.com/meyda/meyda for audio analysis.\nTo show the fft bins,\n```\na.show()\n```\nSet number of fft bins:\n```\na.setBins(6)\n```\nAccess the value of the leftmost (lowest frequency) bin:\n```\na.fft[0]\n```\nUse the value to control a variable:\n```\nosc(10, 0, () =\u003e (a.fft[0]*4))\n  .out()\n```\nIt is possible to calibrate the responsiveness by changing the minimum and maximum value detected. (Represented by blur lines over the fft). To set minimum value detected:\n```\na.setCutoff(4)\n```\n\nSetting the scale changes the range that is detected.\n```\na.setScale(2)\n```\nThe fft[\u003cindex\u003e] will return a value between 0 and 1, where 0 represents the cutoff and 1 corresponds to the maximum.\n\nYou can set smoothing between audio level readings (values between 0 and 1). 0 corresponds to no smoothing (more jumpy, faster reaction time), while 1 means that the value will never change.\n```\na.setSmooth(0.8)\n```\nTo hide the audio waveform:\n```\na.hide()\n```\n## MIDI (experimental)\n\nMIDI controllers can work with Hydra via WebMIDI an example workflow is at [/docs/midi.md](https://github.com/ojack/hydra/blob/master/docs/midi.md) .\n\n## API\n\nThere is an updated list of functions at [/docs/funcs.md](https://github.com/ojack/hydra/blob/master/docs/funcs.md).\n\nAs well as in the [source code for hydra-synth](https://github.com/ojack/hydra-synth/blob/master/src/glsl/glsl-functions.js).\n\n#### CHANGELOG \nSee [CHANGELOG.md](CHANGELOG.md) for recent changes.\n\n\n\n #### Libraries and tools used:\n * [Regl: functional webgl](http://regl.party/)\n * glitch.io: hosting for sandbox signalling server\n * codemirror: browser-based text editor\n * simple-peer\n\n ## Inspiration:\n * Space-Time Dynamics in Video Feedback (1984). [video](https://www.youtube.com/watch?v=B4Kn3djJMCE) and [paper](http://csc.ucdavis.edu/~cmg/papers/Crutchfield.PhysicaD1984.pdf) by Jim Crutchfield about using analog video feedback to model complex systems.\n * [Satellite Arts Project (1977) - Kit Galloway and Sherrie Rabinowitz](http://www.ecafe.com/getty/SA/)\n * [Sandin Image Processor](http://www.audiovisualizers.com/toolshak/vidsynth/sandin/sandin.htm)\n * [kynd - reactive buffers experiment](https://kynd.github.io/reactive_buffers_experiment/)\n\n #### Related projects:\n * [Lumen app (osx application)](https://lumen-app.com/)\n * [Vsynth (package for MaxMSP)](https://cycling74.com/forums/vsynth-package)\n * [VEDA (VJ system within atom)](https://veda.gl/)\n * [The Force](https://videodromm.com/The_Force/)\n\n## Contributors\n\n(Adapted from [p5.js](https://github.com/processing/p5.js))  \n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\u003ctable\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://ojack.xyz\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/4909769?v=4?s=100\" width=\"100px;\" alt=\"Olivia Jack\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eOlivia Jack\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/hydra-synth/hydra/commits?author=ojack\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#blog-ojack\" title=\"Blogposts\"\u003e📝\u003c/a\u003e \u003ca href=\"https://github.com/hydra-synth/hydra/issues?q=author%3Aojack\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"#design-ojack\" title=\"Design\"\u003e🎨\u003c/a\u003e \u003ca href=\"https://github.com/hydra-synth/hydra/commits?author=ojack\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"#eventOrganizing-ojack\" title=\"Event Organizing\"\u003e📋\u003c/a\u003e \u003ca href=\"#example-ojack\" title=\"Examples\"\u003e💡\u003c/a\u003e \u003ca href=\"#financial-ojack\" title=\"Financial\"\u003e💵\u003c/a\u003e \u003ca href=\"#fundingFinding-ojack\" title=\"Funding Finding\"\u003e🔍\u003c/a\u003e \u003ca href=\"#ideas-ojack\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"#infra-ojack\" title=\"Infrastructure (Hosting, Build-Tools, etc)\"\u003e🚇\u003c/a\u003e \u003ca href=\"#plugin-ojack\" title=\"Plugin/utility libraries\"\u003e🔌\u003c/a\u003e \u003ca href=\"#question-ojack\" title=\"Answering Questions\"\u003e💬\u003c/a\u003e \u003ca href=\"https://github.com/hydra-synth/hydra/pulls?q=is%3Apr+reviewed-by%3Aojack\" title=\"Reviewed Pull Requests\"\u003e👀\u003c/a\u003e \u003ca href=\"#talk-ojack\" title=\"Talks\"\u003e📢\u003c/a\u003e \u003ca href=\"https://github.com/hydra-synth/hydra/commits?author=ojack\" title=\"Tests\"\u003e⚠️\u003c/a\u003e \u003ca href=\"#tool-ojack\" title=\"Tools\"\u003e🔧\u003c/a\u003e \u003ca href=\"#translation-ojack\" title=\"Translation\"\u003e🌍\u003c/a\u003e \u003ca href=\"#tutorial-ojack\" title=\"Tutorials\"\u003e✅\u003c/a\u003e \u003ca href=\"#video-ojack\" title=\"Videos\"\u003e📹\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://www.fentonia.com/bio/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/8839978?v=4?s=100\" width=\"100px;\" alt=\"Jamie Fenton\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJamie Fenton\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/hydra-synth/hydra/commits?author=jamiefaye\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#ideas-jamiefaye\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"#video-jamiefaye\" title=\"Videos\"\u003e📹\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://naotohieda.com\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/1835081?v=4?s=100\" width=\"100px;\" alt=\"Naoto Hieda\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eNaoto Hieda\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/hydra-synth/hydra/commits?author=micuat\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"#eventOrganizing-micuat\" title=\"Event Organizing\"\u003e📋\u003c/a\u003e \u003ca href=\"#example-micuat\" title=\"Examples\"\u003e💡\u003c/a\u003e \u003ca href=\"#ideas-micuat\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"#tutorial-micuat\" title=\"Tutorials\"\u003e✅\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/flordefuego\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/31332673?v=4?s=100\" width=\"100px;\" alt=\"flordefuego\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eflordefuego\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/hydra-synth/hydra/commits?author=flordefuego\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"#eventOrganizing-flordefuego\" title=\"Event Organizing\"\u003e📋\u003c/a\u003e \u003ca href=\"#example-flordefuego\" title=\"Examples\"\u003e💡\u003c/a\u003e \u003ca href=\"#ideas-flordefuego\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"#tutorial-flordefuego\" title=\"Tutorials\"\u003e✅\u003c/a\u003e \u003ca href=\"#video-flordefuego\" title=\"Videos\"\u003e📹\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://zachkrall.com\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/2532937?v=4?s=100\" width=\"100px;\" alt=\"Zach Krall\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eZach Krall\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/hydra-synth/hydra/commits?author=zachkrall\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"https://github.com/hydra-synth/hydra/commits?author=zachkrall\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#tutorial-zachkrall\" title=\"Tutorials\"\u003e✅\u003c/a\u003e \u003ca href=\"#example-zachkrall\" title=\"Examples\"\u003e💡\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/geikha\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/56176668?v=4?s=100\" width=\"100px;\" alt=\"Renzo Torr-\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eGEIKHA\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/hydra-synth/hydra/issues?q=author%3Ageikha\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"https://github.com/hydra-synth/hydra/commits?author=geikha\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#eventOrganizing-geikha\" title=\"Event Organizing\"\u003e📋\u003c/a\u003e \u003ca href=\"#example-geikha\" title=\"Examples\"\u003e💡\u003c/a\u003e \u003ca href=\"#ideas-geikha\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"#plugin-geikha\" title=\"Plugin/utility libraries\"\u003e🔌\u003c/a\u003e \u003ca href=\"#translation-geikha\" title=\"Translation\"\u003e🌍\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://sophiadigitalart.com\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/138158?v=4?s=100\" width=\"100px;\" alt=\"Bruce LANE\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eBruce LANE\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/hydra-synth/hydra/commits?author=brucelane\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#example-brucelane\" title=\"Examples\"\u003e💡\u003c/a\u003e \u003ca href=\"#ideas-brucelane\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://fangtsai.net\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/25447809?v=4?s=100\" width=\"100px;\" alt=\"fangtasi\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003efangtasi\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#translation-fangtsai15\" title=\"Translation\"\u003e🌍\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/choiharam\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/46865987?v=4?s=100\" width=\"100px;\" alt=\"Haram Choi\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eHaram Choi\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#translation-choiharam\" title=\"Translation\"\u003e🌍\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/papaz0rgl\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/2632092?v=4?s=100\" width=\"100px;\" alt=\"papaz0rgl\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003epapaz0rgl\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#translation-papaz0rgl\" title=\"Translation\"\u003e🌍\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/arturcabral\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/4428256?v=4?s=100\" width=\"100px;\" alt=\"Artur Cabral \"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eArtur Cabral \u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#translation-arturcabral\" title=\"Translation\"\u003e🌍\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://linktr.ee/ranggapuraji\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/37600867?v=4?s=100\" width=\"100px;\" alt=\"Rangga Purnama Aji\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eRangga Purnama Aji\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#translation-RanggaPAji\" title=\"Translation\"\u003e🌍\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://jackarmitage.com/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/2885827?v=4?s=100\" width=\"100px;\" alt=\"Jack Armitage\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJack Armitage\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/hydra-synth/hydra/commits?author=jarmitage\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://rumblesan.com/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/169088?v=4?s=100\" width=\"100px;\" alt=\"Guy John\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eGuy John\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/hydra-synth/hydra/commits?author=rumblesan\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/mcscope\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/3921648?v=4?s=100\" width=\"100px;\" alt=\"Christopher Beacham\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eChristopher Beacham\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/hydra-synth/hydra/commits?author=mcscope\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/ssssam\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/6330?v=4?s=100\" width=\"100px;\" alt=\"Sam Thursfield\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eSam Thursfield\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/hydra-synth/hydra/commits?author=ssssam\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/kagel\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/100986?v=4?s=100\" width=\"100px;\" alt=\"Dmitriy Khvatov\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eDmitriy Khvatov\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/hydra-synth/hydra/commits?author=kagel\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/echophon\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/5997208?v=4?s=100\" width=\"100px;\" alt=\"Yancy Way\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eYancy Way\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/hydra-synth/hydra/commits?author=echophon\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/tpltnt\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/1172976?v=4?s=100\" width=\"100px;\" alt=\"tpltnt\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003etpltnt\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/hydra-synth/hydra/commits?author=tpltnt\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/frodosamoa\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/1582620?v=4?s=100\" width=\"100px;\" alt=\"Andrew Kowalczyk\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAndrew Kowalczyk\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/hydra-synth/hydra/commits?author=frodosamoa\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/ethancrawford\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/10395940?v=4?s=100\" width=\"100px;\" alt=\"ethancrawford\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eethancrawford\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/hydra-synth/hydra/commits?author=ethancrawford\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/hamilton\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/95735?v=4?s=100\" width=\"100px;\" alt=\"Hamilton Ulmer\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eHamilton Ulmer\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/hydra-synth/hydra/commits?author=hamilton\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/jcmorrow\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/5903784?v=4?s=100\" width=\"100px;\" alt=\"Josh Morrow\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJosh Morrow\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/hydra-synth/hydra/commits?author=jcmorrow\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/fizzy123\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/4475554?v=4?s=100\" width=\"100px;\" alt=\"Nobel Yoo\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eNobel Yoo\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/hydra-synth/hydra/commits?author=fizzy123\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/pLabarta\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/10605905?v=4?s=100\" width=\"100px;\" alt=\"Pablito Labarta\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ePablito Labarta\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/hydra-synth/hydra/commits?author=pLabarta\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://www.paulwrankin.com/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/1256849?v=4?s=100\" width=\"100px;\" alt=\"Paul W. Rankin\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ePaul W. Rankin\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/hydra-synth/hydra/commits?author=rnkn\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/tmhglnd\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/8721936?v=4?s=100\" width=\"100px;\" alt=\"Timo Hoogland\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eTimo Hoogland\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/hydra-synth/hydra/commits?author=tmhglnd\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/ixnv\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/4655259?v=4?s=100\" width=\"100px;\" alt=\"Ramil Iksanov\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eRamil Iksanov\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/hydra-synth/hydra/commits?author=ixnv\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://0xacab.org/rapofran\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/2479433?v=4?s=100\" width=\"100px;\" alt=\"J. Francisco Raposeiras\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJ. Francisco Raposeiras\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/hydra-synth/hydra/commits?author=rapofran\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://larstuchel.ch/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/17312696?v=4?s=100\" width=\"100px;\" alt=\"Lars Fabian Tuchel\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eLars Fabian Tuchel\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/hydra-synth/hydra/commits?author=tuchella\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/oscons\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/54054343?v=4?s=100\" width=\"100px;\" alt=\"oscons\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eoscons\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/hydra-synth/hydra/commits?author=oscons\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://richardnias.com/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/7244202?v=4?s=100\" width=\"100px;\" alt=\"Richard Nias\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eRichard Nias\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/hydra-synth/hydra/commits?author=richardnias\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://hi-bumblebee.com/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/53626283?v=4?s=100\" width=\"100px;\" alt=\"Luis Aguirre\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eLuis Aguirre\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/hydra-synth/hydra/commits?author=luis11011\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/munshkr\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/4862?v=4?s=100\" width=\"100px;\" alt=\"Damián Silvani\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eDamián Silvani\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/hydra-synth/hydra/commits?author=munshkr\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/misterinterrupt\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/286920?v=4?s=100\" width=\"100px;\" alt=\"m. interrupt\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003em. interrupt\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/hydra-synth/hydra/commits?author=misterinterrupt\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://atenor.io/?pk_campaign=github\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/7475584?v=4?s=100\" width=\"100px;\" alt=\"Ámbar Tenorio-Fornés\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eÁmbar Tenorio-Fornés\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/hydra-synth/hydra/commits?author=atfornes\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#ideas-atfornes\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\nWe recognize all types of contributions. This project follows the [all-contributors](https://github.com/kentcdodds/all-contributors) specification. Instructions to add yourself or add contribution emojis to your name are [here](https://github.com/hydra-synth/hydra/issues/265). You can also post an issue or comment with the text: `@all-contributors please add @YOUR-USERNAME for THING(S)` and our nice bot will add you.\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhydra-synth%2Fhydra","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhydra-synth%2Fhydra","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhydra-synth%2Fhydra/lists"}