Giter Club home page Giter Club logo

smudgr's People

Contributors

coolhome avatar ericvoorhis avatar skykistler avatar thebestwes avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

smudgr's Issues

Graph generator

Controls to utilize the new graph model and renderer, add algorithms, control parameters, etc

Channel Drift

Changed the way img's pixels are set at the end of execute from

img.pixels = copy.pixels

to

img.setBufferedImage(copy.getBufferedImage());

and also changed the step of the parameter from a default of 0.01 to 0.001 for higher precision.

GIF output

Make control for recording and outputting full-res/full-frame gif's with proper delay, pruned if need be to meet minimum delay requirements

Pixel shift functionality

The experimental pixel shift could do more than the current implementation.

  • Shift in different directions
  • Start shift at different parts of image, or rework how each interval is shifted
  • Interval size based on univariate function
  • The interval count and speed need to shift at percentages so when downsampled, the speed/interval count does not change.

Downsampled pixel shift

  • The first interval needs to shift. Somehow the algorithm needs to be reworked so that there is not always a static first interval.

More Bound types

  • Elliptical bounds
  • Font bounds
  • Composite bounds (multiple bounds in one)

Any other interesting things we can think of?

Classic Color Manipulator

Writing an algorithm that all in one can manipulate the following in separate parameters:

  • hue
  • saturation
  • lightness
  • color channel manipulations, etc.

I'm thinking that I will just write color helper functions for each of these operations, so that any other algorithm would be free to use them, but this algorithm would just tie them together for practical use.

Algorithm ideas/todo list

I'm making a general issue to keep track of some ideas I don't want to lose before getting to work on pixel shifting.

  • Pixel Propagation
  • Implement my version of ChannelDrift but call it something different
  • Implement energy function and use for seam carving and pixel sorting
  • Create set of sub-algorithms that mimic marble paint algorithm
  • zig zag stack (very useless name I know, but I can explain if you want. It's only here as a reminder)
  • Add rotation to algorithms

Hertz type animator

We need two types of animators, one can be beat synced like it is currently, and one should be arbitrarily stepped for the smooth animation of other parameters.

In cases like Gif work, video work, and sometimes even performance work, syncing to beat will always look choppy

Allow exporting to .raw for external manipulation

Make an interleaved/non-interleaved indestructible raw format for use in audacity and similar programs. Ideally, each frame of a gif or video could be saved as raw, and brought back into the program where another gif is generated (and used as a source).

Interleaved/non-interleaved option and ARGB/RGB option. Consider other color formats.

Selector functions

Abstract the selection of an operation into a separate class. These will be run when an image is changed, in contrast to coordinate functions which are fun when the dimensions of an image or a bound is changed.

Coordinate function -> Selector function -> Operative algorithm( Univariate/other functions )

Sometimes this is fast, or being run in the studio, but in some situations it is too slow or impractical to do live. Thus, the goal is be able to optionally threshold an operation.

This will also open another dimension of complexity when building algorithms. For the foreseeable future, I think the above four components will be what a given algorithm pipeline is comprised of.

Source mixing

We need to think of a solution for mixing images with the control of parameters.

Source queuing

We should be able to automate or trigger the switch or mix of sources

Improve MIDI map saving

Currently, different channels are ignored and if multiple algorithms with the same name/type exist, the parameters will overlap

Measure performance to aid live setup

In a studio setting, performance indicators are helpful but not necessarily needed. When designing a live instrument, these performance differences can mean the world. Is there a way we can reflect bottlenecks in a smudge through the UI?

Elliptical Bound

@skykistler

Working on an Elliptical Bound :

Branch: eee1e86

Notes:

  • Inherited Bound class and changed containsPoint method.
  • kept Bound's offsetX, offsetY, width, and height parameters. Made ellipse using those parameters. Not sure if this will always be the case
    for more complex boundings, but it will work here.
  • To change bound, I used Algorithm's setBound method in EricMain

GPU hax

auto-hack any GPU to trick OpenGL into parallel processing

Absolute vs. Relative knobs support

Improve support for relative knobs and offer support for absolute knobs

a) detect if absolute or relative knob being used
b) support different modes
c) allow manual change if unable to perfectly detect relative/absolute

Pixel Shift Direction + Scaling features

Adding directionality + different scaling options to pixel shifting: 5e25ab1

Notes:

  • The reverse parameter should work on any given direction type
  • "Binary" direction shift added. Switches back and forth in direction from shifting in positive direction
    and shifting in negative direction based on even/odd check. Case 2 of the switch statement:
        double shiftScale = 1;

        //  find type of shift

        switch(shiftType.getIntValue()) {

        case 1:
            shiftScale = currentInterval;
            break;
        case 2:
            shiftScale = (currentInterval % 2 == 0 ? -currentInterval : currentInterval);
            break;
        }

        //  reverse direction of shifting 

        if (reverse.getIntValue() == 1)
            shiftScale = -shiftScale;

Goals:

  • Add reverse parameter
  • Add at least 3 different direction types
  • Add scaling option of some type

Completed So Far:

  • 1/3 direction types added so far.
  • Added reverse Parameter

YUV noise

Creating a static noise algorithm that uses the YUV color space , which was used in analog color TV's.

  • Retains relative luma while randomizing the chroma within the pixels

Audio sensitivity

Processing incoming audio signals to affect parameters

  • Audio input
  • Set frequency range
  • Set easing function and sensitivity

More Operations

Leave algorithm ideas here. When you start on an algorithm, make a separate ticket and reference it here.

Selective Hue Rotate

SelectiveHueRotate branch

Given a function like luma or hue that maps onto the range from 0 to 1, the SelectiveHueRotate algorithm rotates the hue all pixels whose values(hue or luma for example) are in the sub-range from start to (start + length).

This is more of a selector, but that idea has to be developed.

GIF layering tool

Allow copying, deleting, rearranging, and changing the delay of frames in a gif

Generalize Marbeler

Marbeler needs to work with coordinate functions, interpolation functions, and differentiated from pixel shift

Source Set switcher

Figure out the best way to allocate source "sets" and switch between them individually, rather than have a bunch of sources in the same set to sift thru

Animator control acts unpredictably

Animator needs to work in the paradigm of quarter steps/half steps/full steps etc in order to sync to the controller BPM and be more predictable when running live

Smudge layering

We should be able to have separate effect pipelines that can be mixed or switched, triggered, and automated

Basic/Prototype UI

After integrating CEF, a basic HTML/JS interface needs to be created. Needs to be relatively clean but does not need to be fancy.

Needs to control:

  • Sources
  • Bounds
  • Coordinate functions
  • Algorithm sequencing
  • MIDI mapping

Shapes renderer

Basic shapes renderer that can be layered in, which can be extended to rendering fonts

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.