Compare commits

..

9 Commits

Author SHA1 Message Date
a2ae240605 upd call to vban_cmd
minor bump
2026-03-02 23:27:11 +00:00
18ed3ea7fb bump development status classifier 2026-03-02 22:11:30 +00:00
d5ca50e9bd patch bump 2026-03-02 22:08:07 +00:00
0f8be6de48 bp-sidechain should be float 2026-03-02 22:07:53 +00:00
aa6b156eff minor bump 2026-03-02 22:04:05 +00:00
5c60a382fd add Strip Gate Command to README
update  the usage lines
2026-03-02 22:03:51 +00:00
d7fef4f26a remove duplicates from help outputs.
this bug was introduced due to changes in the meta app launchers.
2026-03-02 22:03:32 +00:00
e6a17d5772 add more gate commands 2026-03-02 22:02:25 +00:00
5c3452bff5 md upd 2026-03-02 21:20:43 +00:00
6 changed files with 161 additions and 22 deletions

View File

@ -5,8 +5,6 @@
---
This CLI is still in an early stage of development with many more things that could be implemented. However, the commands that are implemented should be working without issues.
## Install
#### With uv
@ -51,7 +49,7 @@ export VBAN_CLI_STREAMNAME=Command1
### Strip Command
Usage: vban-cli strip \<index> COMMAND [ARGS]
*Usage: vban-cli strip \<index> COMMAND [OPTIONS]*
examples:
@ -67,7 +65,7 @@ see `vban-cli strip --help` for more info.
##### Strip EQ
Usage: vban-cli strip \<index> eq COMMAND [OPTIONS]
*Usage: vban-cli strip \<index> eq COMMAND [OPTIONS]*
examples:
@ -79,7 +77,7 @@ see `vban-cli strip eq --help` for more info.
##### Strip EQ Cell Command
Usage: vban-cli strip \<index> eq cell \<band> COMMAND [ARGS]
*Usage: vban-cli strip \<index> eq cell \<band> COMMAND [ARGS]*
examples:
@ -95,7 +93,7 @@ see `vban-cli strip eq cell --help` for more info.
##### Strip Comp Command
Usage: vban-cli strip \<index> comp COMMAND
*Usage: vban-cli strip \<index> comp COMMAND [OPTIONS]*
examples:
@ -107,9 +105,23 @@ vban-cli strip 3 comp auto-makeup true
see `vban-cli strip comp --help` for more info.
##### Strip Gate Command
*Usage: vban-cli strip \<index> gate COMMAND [OPTIONS]*
examples:
```console
vban-cli strip 2 gate attack 634
vban-cli strip 5 gate hold 2088.7
```
see `vban-cli strip comp --help` for more info.
##### Strip Gainlayer Command
Usage: vban-cli strip \<index> gainlayer \<gainlayer_index> COMMAND [OPTIONS] [ARGS]
*Usage: vban-cli strip \<index> gainlayer \<gainlayer_index> COMMAND [OPTIONS] [ARGS]*
examples:
@ -123,7 +135,7 @@ see `vban-cli strip gainlayer --help` for more info.
### Bus Command
Usage: vban-cli bus \<index> COMMAND [ARGS]
*Usage: vban-cli bus \<index> COMMAND [OPTIONS]*
examples:
@ -137,7 +149,7 @@ see `vban-cli bus --help` for more info.
### Command Command
Usage: vban-cli command COMMAND
*Usage: vban-cli command COMMAND*
examples:
@ -151,7 +163,7 @@ see `vban-cli command --help` for more info.
### Recorder Command
Usage: vban-cli recorder COMMAND
*Usage: vban-cli recorder COMMAND*
examples:
@ -167,7 +179,7 @@ see `vban-cli recorder --help` for more info.
### Sendtext Command
Usage: vban-cli sendtext TEXT
*Usage: vban-cli sendtext TEXT*
examples:

View File

@ -1,13 +1,13 @@
[project]
name = "vban-cli"
version = "0.10.0"
version = "0.12.0"
description = "A command-line interface for Voicemeeter leveraging VBAN."
readme = "README.md"
license = { text = "LICENSE" }
requires-python = ">=3.13"
dependencies = ["cyclopts>=4.6.0", "loguru>=0.7.3", "vban-cmd>=2.9.0"]
dependencies = ["cyclopts>=4.6.0", "loguru>=0.7.3", "vban-cmd>=2.9.1"]
classifiers = [
"Development Status :: 3 - Alpha",
"Development Status :: 4 - Beta",
"Programming Language :: Python",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",

View File

@ -53,7 +53,7 @@ def launcher(
try:
with vban_cmd.api(
vban_config.kind,
ip=vban_config.host,
host=vban_config.host,
port=vban_config.port,
streamname=vban_config.streamname,
disable_rt_listeners=disable_rt_listeners,

View File

@ -63,3 +63,108 @@ def threshold(
# app.console.print(ctx.client.strip[index].gate.threshold)
return
ctx.client.strip[index].gate.threshold = new_threshold
@app.command(name='damping-max')
def damping_max(
new_damping_max: Annotated[float, Argument()] = None,
*,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Get or set the damping max of the specified gate.
Parameters
----------
new_damping_max : float, optional
If provided, sets the damping max to this value. If not provided, the current damping max is printed.
"""
if new_damping_max is None:
# See https://github.com/onyx-and-iris/vban-cli?tab=readme-ov-file#implementation-notes - 2.
# app.console.print(ctx.client.strip[index].gate.damping)
return
ctx.client.strip[index].gate.damping = new_damping_max
@app.command(name='bp-sidechain')
def bp_sidechain(
new_bp_sidechain: Annotated[float, Argument()] = None,
*,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Get or set the BP sidechain of the specified gate.
Parameters
----------
new_bp_sidechain : float, optional
If provided, sets the BP sidechain to this value. If not provided, the current BP sidechain is printed.
"""
if new_bp_sidechain is None:
# See https://github.com/onyx-and-iris/vban-cli?tab=readme-ov-file#implementation-notes - 2.
# app.console.print(ctx.client.strip[index].gate.bpsidechain)
return
ctx.client.strip[index].gate.bpsidechain = new_bp_sidechain
@app.command(name='attack')
def attack(
new_attack: Annotated[float, Argument()] = None,
*,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Get or set the attack of the specified gate.
Parameters
----------
new_attack : float, optional
If provided, sets the attack to this value. If not provided, the current attack is printed.
"""
if new_attack is None:
# See https://github.com/onyx-and-iris/vban-cli?tab=readme-ov-file#implementation-notes - 2.
# app.console.print(ctx.client.strip[index].gate.attack)
return
ctx.client.strip[index].gate.attack = new_attack
@app.command(name='hold')
def hold(
new_hold: Annotated[float, Argument()] = None,
*,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Get or set the hold of the specified gate.
Parameters
----------
new_hold : float, optional
If provided, sets the hold to this value. If not provided, the current hold is printed.
"""
if new_hold is None:
# See https://github.com/onyx-and-iris/vban-cli?tab=readme-ov-file#implementation-notes - 2.
# app.console.print(ctx.client.strip[index].gate.hold)
return
ctx.client.strip[index].gate.hold = new_hold
@app.command(name='release')
def release(
new_release: Annotated[float, Argument()] = None,
*,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Get or set the release of the specified gate.
Parameters
----------
new_release : float, optional
If provided, sets the release to this value. If not provided, the current release is printed.
"""
if new_release is None:
# See https://github.com/onyx-and-iris/vban-cli?tab=readme-ov-file#implementation-notes - 2.
# app.console.print(ctx.client.strip[index].gate.release)
return
ctx.client.strip[index].gate.release = new_release

View File

@ -56,8 +56,16 @@ class StripHelpFormatter(BaseHelpFormatter):
)
if modified_usage == str(usage):
modified_usage = re.sub(
r'(\S+\s+strip)\s+(\w+)', r'\1 <index> \2', str(usage)
r'(\S+\s+strip)\s+(\w+)',
r'\1 <index> \2 [OPTIONS] [ARGS]',
str(usage),
)
# Handle main strip command and subcommand groups
modified_usage = re.sub(
r'\bCOMMAND\b(?!\s+\[)', 'COMMAND [OPTIONS]', modified_usage
)
# Remove the duplicate INDEX that gets automatically added by cyclopts
modified_usage = re.sub(r'\s+INDEX$', '', modified_usage)
console.print(f'[bold]Usage:[/bold] {modified_usage}')
@ -76,8 +84,16 @@ class BusHelpFormatter(BaseHelpFormatter):
)
if modified_usage == str(usage):
modified_usage = re.sub(
r'(\S+\s+bus)\s+(\w+)', r'\1 <index> \2', str(usage)
r'(\S+\s+bus)\s+(\w+)',
r'\1 <index> \2 [OPTIONS] [ARGS]',
str(usage),
)
# Handle main bus command and subcommand groups
modified_usage = re.sub(
r'\bCOMMAND\b(?!\s+\[)', 'COMMAND [OPTIONS]', modified_usage
)
# Remove the duplicate INDEX that gets automatically added by cyclopts
modified_usage = re.sub(r'\s+INDEX$', '', modified_usage)
console.print(f'[bold]Usage:[/bold] {modified_usage}')
@ -90,7 +106,9 @@ class EqHelpFormatter(BaseHelpFormatter):
"""Render the usage line with proper <index> placement for both strip and bus commands."""
if usage:
modified_usage = re.sub(
r'(\S+\s+)(\w+)(\s+eq\s+)(COMMAND)', r'\1\2 <index>\3\4', str(usage)
r'(\S+\s+)(\w+)(\s+eq\s+)(COMMAND)',
r'\1\2 <index>\3\4 [OPTIONS]',
str(usage),
)
console.print(f'[bold]Usage:[/bold] {modified_usage}')
@ -105,9 +123,11 @@ class GainlayerHelpFormatter(BaseHelpFormatter):
if usage:
modified_usage = re.sub(
r'(\S+\s+strip)(\s+gainlayer\s+)(COMMAND)',
r'\1 <index>\2<[cyan]gainlayer_index[/cyan]> \3',
r'\1 <index>\2<[cyan]gainlayer_index[/cyan]> \3 [OPTIONS] [ARGS]',
str(usage),
)
# Remove the duplicate GAINLAYER_INDEX that gets automatically added by cyclopts
modified_usage = re.sub(r'\s+GAINLAYER_INDEX$', '', modified_usage)
console.print(f'[bold]Usage:[/bold] {modified_usage}')
@ -121,7 +141,9 @@ class CellHelpFormatter(BaseHelpFormatter):
if usage:
modified_usage = re.sub(
r'(\S+\s+)(\w+)(\s+eq\s+cell\s+)(COMMAND)',
r'\1\2 <index>\3<[cyan]band[/cyan]> \4',
r'\1\2 <index>\3<[cyan]band[/cyan]> \4 [ARGS]',
str(usage),
)
# Remove the duplicate BAND that gets automatically added by cyclopts
modified_usage = re.sub(r'\s+BAND$', '', modified_usage)
console.print(f'[bold]Usage:[/bold] {modified_usage}')

4
uv.lock generated
View File

@ -124,7 +124,7 @@ wheels = [
[[package]]
name = "vban-cli"
version = "0.10.0"
version = "0.12.0"
source = { editable = "." }
dependencies = [
{ name = "cyclopts" },
@ -141,7 +141,7 @@ requires-dist = [
[[package]]
name = "vban-cmd"
version = "2.9.0"
version = "2.9.1"
source = { editable = "../vban-cmd-python" }
[package.metadata]