WindShape

Matrix Patterns

Complex intensity patterns using lists and matrices

Matrix Patterns

The set_intensity method accepts more than just a single float value. You can pass complex structures to create patterns across selections.

How Spreading Works

For example, on an 8x8 machine (8 rows and 8 columns of modules), you can pass a 2x2 matrix to create 4 different "corners" with different intensities. The SDK will spread these values across the entire grid.

2x2_pattern.py
from dotenv import load_dotenv
from windsuite_sdk import WindsuiteSDK

sdk = WindsuiteSDK(base_url="192.168.88.40")
sdk.start_communication()

sdk.fan_controller.set_intensity(
    percent=[
        [20, 40],
        [60, 80],
    ]
).apply()

The spreading algorithm repeats each value proportionally:

  • If the pattern is smaller than the grid, values are evenly distributed across the whole machine
  • If the pattern is larger, it's truncated

Smaller patter

On a 8x8 machine, passing a 2x1 matrix will create a horizontal gradient with 2 different values:

smaller_spread.py
from windsuite_sdk import WindsuiteSDK

sdk = WindsuiteSDK(base_url="http://windshape.local")
sdk.start_communication()

sdk.fan_controller.set_intensity(percent=[[20, 80]]).apply()

Larger pattern

On a 2x2 machine, passing a 12x1 matrix will create a pattern using only the first 6 values (as each module contains 3x3 fans, so 6 fans horizontally):

bigger_spread.py
from windsuite_sdk import WindsuiteSDK

sdk = WindsuiteSDK(base_url="http://windshape.local")
sdk.start_communication()
sdk.fan_controller.set_intensity(
    percent=[
        [10, 20, 30, 40, 50, 60, 70, 80, 100, 20, 30, 40],
    ]
).apply()

Effectivly the same as giving:

    percent=[
        [10, 20, 30, 40, 50, 60],
    ]

1D List Spreading

Horizontal Spreading

Pass a simple list to spread values horizontally across columns:

horizontal_spread.py
from windsuite_sdk import WindsuiteSDK

sdk = WindsuiteSDK(base_url="http://windshape.local")
sdk.start_communication()

sdk.fan_controller.set_intensity(percent=[20, 40, 60, 80]).apply()

Vertical Spreading

Wrap each value in its own list to spread vertically across rows:

vertical_spread.py
from windsuite_sdk import WindsuiteSDK

sdk = WindsuiteSDK(base_url="http://windshape.local")
sdk.start_communication()

sdk.fan_controller.set_intensity(percent=[[20], [40], [60], [80]]).apply()

2D List Spreading

Combine both dimensions for complex patterns:

mixed_spread.py
from windsuite_sdk import WindsuiteSDK

sdk = WindsuiteSDK(base_url="http://windshape.local")
sdk.start_communication()

sdk.fan_controller.set_intensity(
    percent=[
        [10, 20, 30, 40],
        [50, 60, 70, 80],
        [10, 20, 30, 40],
        [60, 90],
    ]
).apply()