Skip to content

[WIP] standardize per card /web deployments and add new info.yaml fields#177

Draft
philmillman wants to merge 2 commits into
mainfrom
feature/deployment-updates
Draft

[WIP] standardize per card /web deployments and add new info.yaml fields#177
philmillman wants to merge 2 commits into
mainfrom
feature/deployment-updates

Conversation

@philmillman

Copy link
Copy Markdown
Collaborator

Deployments

  • adds deployment of per card /web (default) or custom folder (overridable via Editor)
  • assumes prebuilt files, we can run a build per card in the future, but that might eat up a lot of CI time/cost

info.yaml

  • adds lots of new info.yaml fields see schema docs for more information
  • these are all very much up for debate. For example, I don't love the structured metadata object-style ones so there might be a better way to handle that
  • none of the new fields are being rendered in the UI (yet), it felt like we should agree on the schema first

@philmillman

Copy link
Copy Markdown
Collaborator Author

@TomWhitwell @chrisgjohnson the info.yaml schema itself is very much up for debate

Comment thread releases/82_Computer_Grids/info.yaml Outdated
Comment on lines +19 to +135
panel:
inputs:
- id: PulseIn1
name: Pulse In 1
description: External clock; when patched, internal clock is bypassed (swing ignored)
- id: PulseIn2
name: Pulse In 2
description: Reset on rising edge
- id: CVIn1
name: CV In 1
description: Map modulation (X, Y, or XY blend per config). Held off after Z middle↔up flip until X or Y is moved past takeover deadband
- id: CVIn2
name: CV In 2
description: Fill modulation — global in Z middle; all lane densities in Z up (after knob takeover)
outputs:
- id: PulseOut1
name: Pulse Out 1
description: Trigger lane 1
- id: PulseOut2
name: Pulse Out 2
description: Trigger lane 2
- id: CVOut1
name: CV Out 1
description: Trigger lane 3 (digital pulse)
- id: CVOut2
name: CV Out 2
description: Aux output (accent, clock, or lane 3 mirror — configurable)

controls:
knobs:
- when: { z: middle }
main:
name: Main
description: Global fill macro (per-lane scale/offset from config)
x:
name: X
description: Pattern map X
y:
name: Y
description: Pattern map Y

- when: { z: up }
main:
name: Main
description: Lane 1 density (PulseOut1)
x:
name: X
description: Lane 2 density (PulseOut2)
y:
name: Y
description: Lane 3 density (CVOut1). Map X/Y held from last Z middle position until knob takeover

- when: { z: middle, layer: alt }
main:
name: Main
description: Chaos / randomness (pattern engine)
x:
name: X
description: Internal BPM (bpm10)
y:
name: Y
description: Swing (50% straight … 75% shuffle)

- when: { z: down, gesture: momentary }
main:
name: Main
description: Tap tempo (internal clock only)

- when: { z: down, gesture: hold }
main:
name: Main
description: Long press toggles alt layer (knob pickup/catch)

leds:
- when: { z: middle }
display: list
items:
- id: LED0
name: LED 0
description: Beat tick blink
- id: LED1
name: LED 1
description: Fill macro brightness
- id: LED2
name: LED 2
description: Lane 1 trigger activity
- id: LED3
name: LED 3
description: Map X brightness
- id: LED4
name: LED 4
description: Lane 2 trigger activity
- id: LED5
name: LED 5
description: Lane 3 / aux activity or alt-layer indicator

- when: { z: up }
display: list
items:
- id: LED0
name: LED 0
description: Beat tick blink
- id: LED1
name: LED 1
description: Lane 1 density
- id: LED2
name: LED 2
description: Lane 1 trigger activity
- id: LED3
name: LED 3
description: Lane 2 density
- id: LED4
name: LED 4
description: Lane 2 trigger activity
- id: LED5
name: LED 5
description: Lane 3 density brightness

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Elaborate, but cool if this is going to work. Could maybe even used to generate these mapping svg's automatically, which up till now I've been too lazy to create 😓 .

I know it's always hard to setup these kind of meta data things. But if you're going to do this, maybe it also time to add some linting tool and check if the existing and new info.yaml are matching the definition. And maybe run them on each new MR, before accepting. I think most people using LLM's or code harnesses will have no trouble adding these and it could lead to great and up-to-date documentation for each project.

Nice initiative! 🙌🏻

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah that's the plan! I opened this initial draft as a way of getting public comments and once we land on the shape of the schema I can add some tooling for linting, etc.

Comment thread releases/README.md
| 77_Placeholder | Reserved for secret project | 0.0<br>None | None | None |
| 78_Talker | Proof of concept speech synthesizer, based on TalkiePCM, inspired by 1970s LPC speech synths. | 0.1<br>Proof of concept | C++ (ComputerCard) | Chris Johnson |
| 82_Computer_Grids | Grids-inspired trigger sequencer with Web MIDI SysEx configuration.<br>[Web editor](https://computergrids.webmidi.cc/) | 0.1.0<br>Released | C++ | Phil Miller |
| 82_Computer_Grids | Grids-inspired trigger sequencer with Web MIDI SysEx configuration.<br>[Web editor](https://tomwhitwell.github.io/Workshop_Computer/programs/82-computer-grids/web/index.html) | 0.1.0<br>Released | C++ | Phil Miller |

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Centralized? Would also be very cool.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, it will deploy whatever you put in the /web folder (by default) with the option to override that folder and the entrypoint (defaults to index.html)

@chrisgjohnson

chrisgjohnson commented Jun 9, 2026

Copy link
Copy Markdown
Collaborator

Though I agree with "none of the new fields are being rendered in the UI (yet), it felt like we should agree on the schema first", I wonder if it would be worth thinking explicitly about use cases and maybe even testing with some quick vibe-coded prototypes , before finalising a yaml spec.

On that note, is the name field needed? In your example it always (?) mirrors the ID, but do you anticipate cases where ID, name and description are all distinct?

@philmillman

Copy link
Copy Markdown
Collaborator Author

Though I agree with "none of the new fields are being rendered in the UI (yet), it felt like we should agree on the schema first", I wonder if it would be worth thinking explicitly about use cases and maybe even testing with some quick vibe-coded prototypes , before finalising a yaml spec.

On that note, is the name field needed? In your example it always (?) mirrors the ID, but do you anticipate cases where ID, name and description are all distinct?

Yeah agreed some UI will help to see the final product, I was just trying to rein in the scope of this PR a bit in hopes of being incremental. I can add the UI stuff I tested back in if it's helpful, per Tom's suggestions from discord.

Re: name I was thinking that a card might want to assign a name that actually describes what the thing in question is doing vs the canonical WS input/control name. My example does a poor job of showing this. We could also merge name and description but I thought the terse version + a longer description would be useful.

items:
  - id: LED0
    name: LED 0
    description: Beat tick blink

could be:

items:
  - id: LED0
    name: Beat Tick
    description: flashing every time the beat ticks over (1 PPQ) 

@chrisgjohnson

Copy link
Copy Markdown
Collaborator

Re: name, that makes perfect sense

I agree, we are going to have to do this step-by-step as there's a lot of ground to cover to get to a working version of Tom's screenshots.

@philmillman

Copy link
Copy Markdown
Collaborator Author

Re: name, that makes perfect sense

I agree, we are going to have to do this step-by-step as there's a lot of ground to cover to get to a working version of Tom's screenshots.

updated the sample info.yaml with better name examples

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants