From cd0305cbd8f6c94e6dc1732c4978fc103327cc13 Mon Sep 17 00:00:00 2001 From: eilseq Date: Tue, 25 Feb 2025 10:30:58 +0100 Subject: [PATCH 1/2] Update README.md --- README.md | 69 +++++++++++++++++++++++++++++----- docs/images/github-banner.png | Bin 0 -> 53453 bytes 2 files changed, 59 insertions(+), 10 deletions(-) create mode 100644 docs/images/github-banner.png diff --git a/README.md b/README.md index a797619..aed821a 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,72 @@ # DICE -## ML Model for Musical Pattern Generation in Max/MSP/Jitter +![DICE GitHub Banner](./docs/images/github-banner.png) -**DICE** is a Max external that uses a custom-trained model to generate musical patterns based on real-time suggestions from the user. Built with a focus on ethical machine learning, DICE does not utilize any external music datasets, ensuring an original approach to music generation. +[Download Page](https://github.com/eilseq/Dice/releases) -## Overview +## Diffusion Network for MIDI Transformation -- **Dynamic Pattern Generation**: Adapts to the musician's input to create responsive musical patterns. -- **Ethical Data Use**: DICE is trained on a custom dataset designed specifically for this tool, avoiding the use of other musicians’ data. -- **Seamless Max/MSP and Max for Live Integration**: Developed as a Max external for use in Max/MSP patches and Max for Live devices, compatible with Mac OS. +**DICE** is a tool designed for advanced manipulation of musical patterns using a custom-trained machine learning model based on diffusion architectures. + +Rather than focusing on outright generation, DICE refines, transforms, and reinterprets existing patterns in real time while preserving the original musical features. + +Built specifically for the Max/MSP environment a max external, and embedded into a MIDI Transformation Tool for Ableton, it enables seamless integration into both live performance and studio workflows. + +### Functionalities + +Focusing on a minimal user experience, the goal of this tool is to bridge the gap between deterministic pattern manipulation and stochastic processes, allowing for a controlled but flexible approach to reshaping musical materials while limiting any form of bias related to style and genre. + +- **Pattern Manipulation through Diffusion** + DICE employs a diffusion-based architecture to iteratively refine and reshape input patterns. This approach ensures that transformations retain musical coherence while introducing new structural possibilities. + +- **Real-Time Interaction** + Designed for Ableton users, DICE responds instantly to user adjustments, enabling dynamic manipulation of musical sequences within a Max patch. Parameters like `threshold`, `noiseLevel`, and `seed` provide granular control over the transformation process. + +- **Matrix-Based Input** + The system operates on a 16x16 matrix input, allowing users to define initial states that DICE can then expand upon, invert, or alter based on diffusion steps and user-defined parameters. + +- **Integration with Max/MSP and Max for Live** + Fully compatible with Max/MSP and Max for Live, DICE can be embedded into existing workflows or used as a standalone tool. + +### Ethical Considerations + +- **Custom Dataset Use** + DICE is trained on a purpose-built synthetic dataset, ensuring that it does not rely on copyrighted or external musical material. + +- **Transparency in Manipulation** + The diffusion-based architecture allows users to trace how patterns evolve through each manipulation stage, offering clarity in how changes occur. Every transformation depends only from the current set of parameters and input notes, so that generations on same states will give consistent results. + +- **User-Driven Control** + Emphasizing the musician's role as the primary creative agent, DICE ensures that its manipulations serve the artist’s intent, rather than imposing algorithmic biases, while offering a minimal user interface. + +--- ## Getting Started -Download DICE from the [Releases](./releases) section and add it to your Max setup to begin using the object in your patches. +### Installation -## License +1. **Download DICE** + Access the [Releases](https://github.com/eilseq/Dice/releases) section to download the external. + +2. **Open Ableton Project and Follow Lesson** + The bundle comes with an Ableton Live project containing examples of DICE use and accurate documentation on how to generate clips and install the tool globally. + +### Basic Usage -DICE is provided under an **All Rights Reserved** license, with allowances for musicians to create commercial music and audio assets. For details, see the [license](./LICENSE.md). +1. **Input a 16x16 Matrix** + Use Max's matrix UI to provide structured input data. + +2. **Adjust Parameters** + + - `threshold`: Controls the cutoff for pattern retention or alteration. + - `noiseLevel`: Determines the intensity of stochastic perturbations during diffusion. + - `seed`: Sets the random seed for consistent results across sessions. + +3. **Trigger Pattern Manipulation** + Activate the process within your Max patch and observe how the input pattern is transformed based on the configured diffusion settings. --- -DICE supports creativity in music without compromising data integrity or artistic respect. +## License + +DICE is provided under an **All Rights Reserved** license. While musicians are free to use it for commercial music and audio asset creation, redistribution or modification of the source code requires explicit permission. Full license details can be found in the [LICENSE](./LICENSE.md). diff --git a/docs/images/github-banner.png b/docs/images/github-banner.png new file mode 100644 index 0000000000000000000000000000000000000000..23d69e72e7eb687e089d88c8399dc2e7dffccbc5 GIT binary patch literal 53453 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ℑW<;Hjzy91td63gb7oQVI$)pgHoU(arY;_Up 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%0A`kH1sVi_r#!n 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 RdEsZfqo%D|aP!f#{{d0LqPzeA literal 0 HcmV?d00001 From 8de6cc6bf820fe9c48a46d005607391a04496b7d Mon Sep 17 00:00:00 2001 From: eilseq Date: Tue, 25 Feb 2025 10:53:17 +0100 Subject: [PATCH 2/2] Add Github Pages --- README.md | 8 +-- docs/_config.yaml | 13 +++++ .../assets/images/github-banner-black-600.png | Bin 0 -> 24441 bytes docs/{ => assets}/images/github-banner.png | Bin docs/assets/images/github-favicon.png | Bin 0 -> 659 bytes docs/getting-started.md | 36 +++++++++++++ docs/github.md | 11 ++++ docs/index.md | 50 ++++++++++++++++++ docs/license.md | 36 +++++++++++++ 9 files changed, 150 insertions(+), 4 deletions(-) create mode 100644 docs/_config.yaml create mode 100644 docs/assets/images/github-banner-black-600.png rename docs/{ => assets}/images/github-banner.png (100%) create mode 100644 docs/assets/images/github-favicon.png create mode 100644 docs/getting-started.md create mode 100644 docs/github.md create mode 100644 docs/index.md create mode 100644 docs/license.md diff --git a/README.md b/README.md index aed821a..fab3e63 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # DICE -![DICE GitHub Banner](./docs/images/github-banner.png) +![DICE GitHub Banner](./docs/assets/images/github-banner.png) [Download Page](https://github.com/eilseq/Dice/releases) @@ -10,7 +10,7 @@ Rather than focusing on outright generation, DICE refines, transforms, and reinterprets existing patterns in real time while preserving the original musical features. -Built specifically for the Max/MSP environment a max external, and embedded into a MIDI Transformation Tool for Ableton, it enables seamless integration into both live performance and studio workflows. +Built specifically for the Max/MSP environment as a max external, and embedded into a MIDI Transformation Tool for Ableton, it enables seamless integration into both live performance and studio workflows. ### Functionalities @@ -54,7 +54,7 @@ Focusing on a minimal user experience, the goal of this tool is to bridge the ga ### Basic Usage 1. **Input a 16x16 Matrix** - Use Max's matrix UI to provide structured input data. + Like any other Ableton Live's MIDI Transformation Tool, create clip and select notes to provide structured input data to the model. This release is designed specifically for drum patterns, so it will act upon the first bar of notes in the conventionla drum rack range (additional info in Ableton Lesson). 2. **Adjust Parameters** @@ -63,7 +63,7 @@ Focusing on a minimal user experience, the goal of this tool is to bridge the ga - `seed`: Sets the random seed for consistent results across sessions. 3. **Trigger Pattern Manipulation** - Activate the process within your Max patch and observe how the input pattern is transformed based on the configured diffusion settings. + The tool provides a minimal user interface provided under clip view. Every control will trigger a MIDI transformation based on selected notes. Observe how the input pattern is transformed based on the configured diffusion settings. --- diff --git a/docs/_config.yaml b/docs/_config.yaml new file mode 100644 index 0000000..ac622b6 --- /dev/null +++ b/docs/_config.yaml @@ -0,0 +1,13 @@ +remote_theme: b2a3e8/jekyll-theme-console + +title: DICE +description: Diffusion Network for MIDI Transformation + +favicon: /assets/images/github-favicon.png +style: dark + +header_pages: + - index.md + - getting-started.md + - license.md + - github.md diff --git a/docs/assets/images/github-banner-black-600.png b/docs/assets/images/github-banner-black-600.png new file mode 100644 index 0000000000000000000000000000000000000000..a437450b2afaa2410713453003583eb304f1d818 GIT binary patch literal 24441 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 IQMHTwAM!1+I{*Lx literal 0 HcmV?d00001 diff --git a/docs/images/github-banner.png b/docs/assets/images/github-banner.png similarity index 100% rename from docs/images/github-banner.png rename to docs/assets/images/github-banner.png diff --git a/docs/assets/images/github-favicon.png b/docs/assets/images/github-favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..61a3a2c7f53d543230401a04931d56028871b979 GIT binary patch literal 659 zcmV;E0&M+>P)ZJ2XeO7D$b>R8AVn@I*Ay|Z zzP-1;_jBs_&UxzX-Fv@lJ?q))SuX$p{_lBye#TCxgJ!cCbvoU5G3S%7udlIKEFy(Q zqrq%8i+6W-zayZ@u~>{H*Xwos{QShpWP*CV{&xf(kB239yIs7wxnXD9?G_V>#Lomq zqY<4>Ck}^06pO{^_xthVdKAeAAVP6Me3Pft%@WP80{_P)Bky@m0344cgc=vt*x zu@73U79JiR*qU62RXv5lU|_{AXiz*J2Qnx?tb=GY3Zv18OQx93W*`s|`yhI|GxgwX#k@N_yR_k#VLZJ}*)6St + window.location.href = "https://github.com/eilseq/Dice"; + + +

For feature requests and contribution, check out the GitHub repo here.

diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..25a5f26 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,50 @@ +--- +layout: home +title: /dice +--- + +![DICE GitHub Banner](./assets/images/github-banner-black-600.png) + +**DICE** is a tool designed for advanced manipulation of musical patterns using a custom-trained machine learning model based on diffusion architectures. + +Rather than focusing on outright generation, DICE refines, transforms, and reinterprets existing patterns in real time while preserving the original musical features. + +Built specifically for the Max/MSP environment as a max external, and embedded into a MIDI Transformation Tool for Ableton, it enables seamless integration into both live performance and studio workflows. + +--- + +# Functionalities + +Focusing on a minimal user experience, the goal of this tool is to bridge the gap between deterministic pattern manipulation and stochastic processes, allowing for a controlled but flexible approach to reshaping musical materials while limiting any form of bias related to style and genre. + +## **Pattern Manipulation through Diffusion** + +DICE employs a diffusion-based architecture to iteratively refine and reshape input patterns. This approach ensures that transformations retain musical coherence while introducing new structural possibilities. + +## **Real-Time Interaction** + +Designed for Ableton users, DICE responds instantly to user adjustments, enabling dynamic manipulation of musical sequences within a Max patch. Parameters like `threshold`, `noiseLevel`, and `seed` provide granular control over the transformation process. + +## **Matrix-Based Input** + +The system operates on a 16x16 matrix input, allowing users to define initial states that DICE can then expand upon, invert, or alter based on diffusion steps and user-defined parameters. + +## **Integration with Max/MSP and Max for Live** + +Fully compatible with Max/MSP and Max for Live, DICE can be embedded into existing workflows or used as a standalone tool. + +--- + +# Ethical Considerations + +# **Custom Dataset Use** + +DICE is trained on a purpose-built synthetic dataset, ensuring that it does not rely on copyrighted or external musical material. + +# **Transparency in Manipulation** + +The diffusion-based architecture allows users to trace how patterns evolve through each manipulation stage, offering clarity in how changes occur. Every transformation depends only from the current set of parameters and input notes, so that generations on same states will give consistent results. + +# **User-Driven Control** + +Emphasizing the musician's role as the primary creative agent, DICE ensures that its manipulations serve the artist’s intent, rather than imposing algorithmic biases, while offering a minimal user interface. diff --git a/docs/license.md b/docs/license.md new file mode 100644 index 0000000..46bf0ff --- /dev/null +++ b/docs/license.md @@ -0,0 +1,36 @@ +--- +layout: page +title: /license +--- + +# License + +## All Rights Reserved with Music and Audio Derivatives Exception + +**Copyright 2024, EILSEQ** + +**All Rights Reserved** + +## Permission for Music and Audio Asset Creation + +Permission is hereby granted to musicians, producers, and individual creators (the "Licensee") to use, modify, and incorporate this software (the "Software") solely for creating musical compositions, audio recordings, soundscapes, and other audio-related assets ("Audio Assets") for personal or commercial purposes. This permission includes the use of the Software within personal plugins or digital tools exclusively for generating such Audio Assets. + +## Limitations and Prohibited Uses + +1. **Prohibition of Software Redistribution**: The Software, in whole or in part, may **not** be reproduced, distributed, sublicensed, or used as part of any software application, library, framework, or tool intended for distribution, sale, or licensing to any third parties. Redistribution of the Software itself or any derivative software applications incorporating the Software is strictly prohibited. + +2. **No Derivative Software Works**: Modifications or derivative works of the Software that incorporate it into other software applications, libraries, or frameworks are not permitted, except as specifically allowed for the creation of Audio Assets. + +3. **Commercial Use of Audio Assets Only**: The commercial use of the Software is strictly limited to the production and sale of Audio Assets derived from it. Licensee may not incorporate the Software into any other software products or technology to be sold, licensed, or otherwise distributed. + +4. **Personal Use Only**: Use of the Software in plugins, digital tools, or environments beyond the Licensee's personal creation of Audio Assets is prohibited. + +## Global Applicability + +This license is intended to be legally binding in all jurisdictions and is subject to and governed by the applicable laws of the Licensee’s country of residence. Any violation of this license will be pursued under international copyright and intellectual property laws to the fullest extent permitted by law. + +## Disclaimer of Liability and Warranty + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY ARISING FROM OR IN CONNECTION WITH THE SOFTWARE OR THE USE OF THE SOFTWARE FOR CREATING AUDIO ASSETS. + +This license ensures that all rights are reserved while allowing musicians limited rights to create commercial Audio Assets from the Software.