Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
38dea70
Fix icons, send targets, and group add/remove.
cursoragent Oct 17, 2026
602400f
Derive key feedback from HyperDeck replies.
cursoragent Oct 17, 2026
0ecca0e
Show the current file name and timecode on the clip list dial.
cursoragent Oct 17, 2026
f273236
Show the clip file name in its own dial field.
cursoragent Oct 17, 2026
6f5b6d8
Bump the patch version to 0.1.2.0.
cursoragent Oct 17, 2026
2991b57
Keep received recording time on the key.
cursoragent Oct 17, 2026
4f19cdf
Keep the playback timecode across partial transport notices.
cursoragent Oct 17, 2026
fbd26a0
Show the current clip's remaining time on the jog and clip dials.
cursoragent Oct 17, 2026
e8427e9
Bump the patch version to 0.1.3.0.
cursoragent Oct 17, 2026
4415383
Poll HyperDeck transport state for clip time remaining.
cursoragent Oct 17, 2026
bda3185
Bump the patch version to 0.1.4.0.
cursoragent Oct 17, 2026
5e921cb
Let each HyperDeck choose its transport poll interval.
cursoragent Oct 17, 2026
0f2fcb0
Bump the patch version to 0.1.5.0.
cursoragent Oct 17, 2026
2afee78
Remove dial touch actions.
cursoragent Oct 17, 2026
431c961
Show clip time by default and timeline time only when selected.
cursoragent Oct 17, 2026
365996e
Bump the patch version to 0.1.6.0.
cursoragent Oct 17, 2026
8133fd1
Restore the clip countdown from the deck's playback position.
cursoragent Oct 17, 2026
9b3fe39
Bump the patch version to 0.1.7.0.
cursoragent Oct 17, 2026
7f7ae74
Remove the Single Clip toggle action.
cursoragent Oct 17, 2026
26efdcd
Bump the patch version to 0.1.8.0.
cursoragent Oct 17, 2026
f0e02d6
Remove the Loop toggle action.
cursoragent Oct 17, 2026
14f82bb
Bump the patch version to 0.1.9.0.
cursoragent Oct 17, 2026
b3997b8
Bump the version to 0.2.0.0.
cursoragent Oct 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ resolver = "3"
members = ["crates/hyperdeck-pool", "crates/hyperdeck-plugin"]

[workspace.package]
version = "0.1.0"
version = "0.2.0"
edition = "2024"
rust-version = "1.99"
license = "MIT OR Apache-2.0"
Expand Down
1 change: 1 addition & 0 deletions crates/hyperdeck-plugin/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ path = "src/bin/typegen.rs"
anyhow = "1"
base64 = "0.22"
hyperdeck-pool = { path = "../hyperdeck-pool" }
hyperdeck-tokio.workspace = true
serde.workspace = true
serde_json.workspace = true
streamdeck-plugin = { version = "0.1", features = ["macros", "typegen"] }
Expand Down
23 changes: 1 addition & 22 deletions crates/hyperdeck-plugin/src/actions.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use serde_json::Value;
use streamdeck_plugin::{
ActionContext, ActionPayload, DialRotatePayload, EncoderAction, KeypadAction, Result,
TouchTapPayload, streamdeck_action,
streamdeck_action,
};

use crate::contracts::ActionSettings;
Expand Down Expand Up @@ -145,15 +145,6 @@ macro_rules! hyperdeck_dial {
Ok(())
}

async fn on_touch_tap(
&mut self,
_payload: &TouchTapPayload,
ctx: &ActionContext<'_, Self::Settings, Self::State>,
) -> Result<()> {
ctx.state().dial_touch(&ctx.identity().context);
Ok(())
}

async fn on_property_inspector_did_appear(
&mut self,
ctx: &ActionContext<'_, Self::Settings, Self::State>,
Expand Down Expand Up @@ -218,16 +209,6 @@ hyperdeck_key!(
"dev.mikanseilaboratory.bmd.hyperdeck.preview",
ActionKind::Preview
);
hyperdeck_key!(
LoopAction,
"dev.mikanseilaboratory.bmd.hyperdeck.loop",
ActionKind::Loop
);
hyperdeck_key!(
SingleClipAction,
"dev.mikanseilaboratory.bmd.hyperdeck.singleclip",
ActionKind::SingleClip
);
hyperdeck_key!(
SlotAction,
"dev.mikanseilaboratory.bmd.hyperdeck.slot",
Expand Down Expand Up @@ -461,8 +442,6 @@ pub fn force_link() {
std::any::TypeId::of::<RecordAction>(),
std::any::TypeId::of::<StopAction>(),
std::any::TypeId::of::<PreviewAction>(),
std::any::TypeId::of::<LoopAction>(),
std::any::TypeId::of::<SingleClipAction>(),
std::any::TypeId::of::<SlotAction>(),
std::any::TypeId::of::<ClipAction>(),
std::any::TypeId::of::<PlayRangeAction>(),
Expand Down
18 changes: 15 additions & 3 deletions crates/hyperdeck-plugin/src/contracts.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ pub struct InstanceConfig {
pub username: String,
#[serde(default)]
pub password: String,
#[serde(default = "default_update_interval_ms")]
pub update_interval_ms: u32,
}

fn default_host() -> String {
Expand All @@ -43,6 +45,10 @@ fn default_true() -> bool {
true
}

fn default_update_interval_ms() -> u32 {
hyperdeck_pool::DEFAULT_UPDATE_INTERVAL_MS
}

impl From<InstanceConfig> for HyperDeckInstanceConfig {
fn from(value: InstanceConfig) -> Self {
Self {
Expand All @@ -54,6 +60,7 @@ impl From<InstanceConfig> for HyperDeckInstanceConfig {
enabled: value.enabled,
username: value.username,
password: value.password,
update_interval_ms: value.update_interval_ms,
}
}
}
Expand Down Expand Up @@ -115,6 +122,7 @@ pub fn localhost_instance() -> InstanceConfig {
enabled: true,
username: String::new(),
password: String::new(),
update_interval_ms: default_update_interval_ms(),
}
}

Expand Down Expand Up @@ -225,6 +233,8 @@ pub struct ActionParams {
pub threshold_seconds: u32,
#[serde(default = "default_status_field")]
pub status_field: String,
#[serde(default = "default_time_basis")]
pub time_basis: String,
#[serde(default)]
pub raw: String,
#[serde(default)]
Expand All @@ -234,8 +244,6 @@ pub struct ActionParams {
#[serde(default)]
pub raw_push: String,
#[serde(default)]
pub raw_touch: String,
#[serde(default)]
pub step: i32,
#[serde(default = "default_direction")]
pub direction: String,
Expand Down Expand Up @@ -273,6 +281,10 @@ fn default_status_field() -> String {
"status".into()
}

fn default_time_basis() -> String {
"clip".into()
}

fn default_goto() -> String {
"timeline-start".into()
}
Expand Down Expand Up @@ -305,11 +317,11 @@ impl Default for ActionParams {
value: String::new(),
threshold_seconds: default_threshold(),
status_field: default_status_field(),
time_basis: default_time_basis(),
raw: String::new(),
raw_rotate_up: String::new(),
raw_rotate_down: String::new(),
raw_push: String::new(),
raw_touch: String::new(),
step: 0,
direction: default_direction(),
active_color: String::new(),
Expand Down
4 changes: 0 additions & 4 deletions crates/hyperdeck-plugin/src/kind.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@ pub enum ActionKind {
Record,
Stop,
Preview,
Loop,
SingleClip,
Slot,
Clip,
PlayRange,
Expand Down Expand Up @@ -62,8 +60,6 @@ impl ActionKind {
Self::Record => "dev.mikanseilaboratory.bmd.hyperdeck.record",
Self::Stop => "dev.mikanseilaboratory.bmd.hyperdeck.stop",
Self::Preview => "dev.mikanseilaboratory.bmd.hyperdeck.preview",
Self::Loop => "dev.mikanseilaboratory.bmd.hyperdeck.loop",
Self::SingleClip => "dev.mikanseilaboratory.bmd.hyperdeck.singleclip",
Self::Slot => "dev.mikanseilaboratory.bmd.hyperdeck.slot",
Self::Clip => "dev.mikanseilaboratory.bmd.hyperdeck.clip",
Self::PlayRange => "dev.mikanseilaboratory.bmd.hyperdeck.playrange",
Expand Down
Loading
Loading