Compare commits

...

8 Commits

10 changed files with 65 additions and 100 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
@ -65,7 +63,7 @@ vban-cli strip 2 gain -18.7
see `vban-cli strip --help` for more info.
##### Strip EQ
#### Strip EQ
*Usage: vban-cli strip \<index> eq COMMAND [OPTIONS]*
@ -77,7 +75,7 @@ vban-cli strip 0 eq on true
see `vban-cli strip eq --help` for more info.
##### Strip EQ Cell Command
#### Strip EQ Cell Command
*Usage: vban-cli strip \<index> eq cell \<band> COMMAND [ARGS]*
@ -93,7 +91,7 @@ vban-cli strip 4 eq cell 5 type 5
see `vban-cli strip eq cell --help` for more info.
##### Strip Comp Command
#### Strip Comp Command
*Usage: vban-cli strip \<index> comp COMMAND [OPTIONS]*
@ -107,7 +105,7 @@ vban-cli strip 3 comp auto-makeup true
see `vban-cli strip comp --help` for more info.
##### Strip Gate Command
#### Strip Gate Command
*Usage: vban-cli strip \<index> gate COMMAND [OPTIONS]*
@ -121,7 +119,19 @@ vban-cli strip 5 gate hold 2088.7
see `vban-cli strip comp --help` for more info.
##### Strip Gainlayer Command
#### Strip Denoiser Command
*Usage: vban-cli strip \<index> denoiser COMMAND [OPTIONS]*
examples:
```console
vban-cli strip 4 denoiser knob 3.6
```
see `vban-cli strip denoiser --help` for more info.
#### Strip Gainlayer Command
*Usage: vban-cli strip \<index> gainlayer \<gainlayer_index> COMMAND [OPTIONS] [ARGS]*

View File

@ -1,13 +1,13 @@
[project]
name = "vban-cli"
version = "0.11.1"
version = "0.12.1"
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.4"]
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

@ -1,4 +1,4 @@
from typing import Annotated
from typing import Annotated, Optional
from cyclopts import App, Argument, Parameter
@ -8,24 +8,9 @@ from .help import StripHelpFormatter
app = App(name='comp', help_formatter=StripHelpFormatter())
@app.meta.default
def launcher(
*tokens: Annotated[str, Parameter(show=False, allow_leading_hyphen=True)],
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Control the compressor parameters."""
additional_kwargs = {}
command, bound, _ = app.parse_args(tokens)
additional_kwargs['index'] = index
additional_kwargs['ctx'] = ctx
return command(*bound.args, **bound.kwargs, **additional_kwargs)
@app.command(name='knob')
def knob(
new_knob: Annotated[float, Argument()] = None,
new_knob: Annotated[Optional[float], Argument()] = None,
*,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
@ -34,7 +19,7 @@ def knob(
Parameters
----------
new_knob : int, optional
new_knob : float, optional
If provided, sets the knob to this value. If not provided, the current knob is printed.
"""
if new_knob is None:
@ -46,7 +31,7 @@ def knob(
@app.command(name='input-gain')
def input_gain(
new_gain: Annotated[float, Argument()] = None,
new_gain: Annotated[Optional[float], Argument()] = None,
*,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
@ -67,7 +52,7 @@ def input_gain(
@app.command(name='ratio')
def ratio(
new_ratio: Annotated[float, Argument()] = None,
new_ratio: Annotated[Optional[float], Argument()] = None,
*,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
@ -88,7 +73,7 @@ def ratio(
@app.command(name='threshold')
def threshold(
new_threshold: Annotated[float, Argument()] = None,
new_threshold: Annotated[Optional[float], Argument()] = None,
*,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
@ -109,7 +94,7 @@ def threshold(
@app.command(name='attack')
def attack(
new_attack: Annotated[float, Argument()] = None,
new_attack: Annotated[Optional[float], Argument()] = None,
*,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
@ -130,7 +115,7 @@ def attack(
@app.command(name='release')
def release(
new_release: Annotated[float, Argument()] = None,
new_release: Annotated[Optional[float], Argument()] = None,
*,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
@ -151,7 +136,7 @@ def release(
@app.command(name='knee')
def knee(
new_knee: Annotated[float, Argument()] = None,
new_knee: Annotated[Optional[float], Argument()] = None,
*,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
@ -172,7 +157,7 @@ def knee(
@app.command(name='output-gain')
def output_gain(
new_gain: Annotated[float, Argument()] = None,
new_gain: Annotated[Optional[float], Argument()] = None,
*,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
@ -193,7 +178,7 @@ def output_gain(
@app.command(name='auto-makeup')
def makeup(
new_makeup: Annotated[bool, Argument()] = None,
new_makeup: Annotated[Optional[bool], Argument()] = None,
*,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],

View File

@ -1,4 +1,4 @@
from typing import Annotated
from typing import Annotated, Optional
from cyclopts import App, Argument, Parameter
@ -8,24 +8,9 @@ from .help import StripHelpFormatter
app = App(name='denoiser', help_formatter=StripHelpFormatter())
@app.meta.default
def launcher(
*tokens: Annotated[str, Parameter(show=False, allow_leading_hyphen=True)],
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Control the denoiser parameters."""
additional_kwargs = {}
command, bound, _ = app.parse_args(tokens)
additional_kwargs['index'] = index
additional_kwargs['ctx'] = ctx
return command(*bound.args, **bound.kwargs, **additional_kwargs)
@app.command(name='knob')
def knob(
new_knob: Annotated[float, Argument()] = None,
new_knob: Annotated[Optional[float], Argument()] = None,
*,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
@ -34,7 +19,7 @@ def knob(
Parameters
----------
new_knob : int, optional
new_knob : float, optional
If provided, sets the knob to this value. If not provided, the current knob is printed.
"""
if new_knob is None:

View File

@ -1,4 +1,4 @@
from typing import Annotated
from typing import Annotated, Optional
from cyclopts import App, Argument, Parameter
@ -35,7 +35,7 @@ def launcher(
@app.command(name='on')
def on(
new_state: Annotated[bool, Argument()] = None,
new_state: Annotated[Optional[bool], Argument()] = None,
*,
target: Annotated[object, Parameter(parse=False)],
):
@ -43,7 +43,7 @@ def on(
Parameters
----------
new_state : bool
new_state : bool, optional
If provided, sets the on state to this value. If not provided, the current on state is printed.
"""
if new_state is None:
@ -73,7 +73,7 @@ def cell_launcher(
@cell_app.command(name='on')
def cell_on(
new_state: Annotated[bool, Argument()] = None,
new_state: Annotated[Optional[bool], Argument()] = None,
*,
target: Annotated[object, Parameter(parse=False)],
):
@ -81,7 +81,7 @@ def cell_on(
Parameters
----------
new_state : bool
new_state : bool, optional
If provided, sets the on state to this value. If not provided, the current on state is printed.
"""
if new_state is None:
@ -93,7 +93,7 @@ def cell_on(
@cell_app.command(name='freq')
def cell_freq(
new_freq: Annotated[float, Argument()] = None,
new_freq: Annotated[Optional[float], Argument()] = None,
*,
target: Annotated[object, Parameter(parse=False)],
):
@ -101,7 +101,7 @@ def cell_freq(
Parameters
----------
new_freq : float
new_freq : float, optional
If provided, sets the frequency to this value. If not provided, the current frequency is printed.
"""
if new_freq is None:
@ -113,7 +113,7 @@ def cell_freq(
@cell_app.command(name='gain')
def cell_gain(
new_gain: Annotated[float, Argument()] = None,
new_gain: Annotated[Optional[float], Argument()] = None,
*,
target: Annotated[object, Parameter(parse=False)],
):
@ -121,7 +121,7 @@ def cell_gain(
Parameters
----------
new_gain : float
new_gain : float, optional
If provided, sets the gain to this value. If not provided, the current gain is printed.
"""
if new_gain is None:
@ -133,7 +133,7 @@ def cell_gain(
@cell_app.command(name='quality')
def cell_q(
new_q: Annotated[float, Argument()] = None,
new_q: Annotated[Optional[float], Argument()] = None,
*,
target: Annotated[object, Parameter(parse=False)],
):
@ -141,7 +141,7 @@ def cell_q(
Parameters
----------
new_q : float
new_q : float, optional
If provided, sets the Q to this value. If not provided, the current Q is printed.
"""
if new_q is None:
@ -153,7 +153,7 @@ def cell_q(
@cell_app.command(name='type')
def cell_type(
new_type: Annotated[int, Argument()] = None,
new_type: Annotated[Optional[int], Argument()] = None,
*,
target: Annotated[object, Parameter(parse=False)],
):
@ -161,7 +161,7 @@ def cell_type(
Parameters
----------
new_type : int
new_type : int, optional
If provided, sets the type to this value. If not provided, the current type is printed.
"""
if new_type is None:

View File

@ -1,4 +1,4 @@
from typing import Annotated
from typing import Annotated, Optional
from cyclopts import App, Argument, Parameter
@ -28,7 +28,7 @@ def launcher(
@app.command(name='level')
def level(
new_level: Annotated[float, Argument()] = None,
new_level: Annotated[Optional[float], Argument()] = None,
*,
strip_index: Annotated[int, Parameter(parse=False)],
gainlayer_index: Annotated[int, Parameter(parse=False)],
@ -38,7 +38,7 @@ def level(
Parameters
----------
new_level : float
new_level : float, optional
If provided, sets the level to this value. If not provided, the current level is printed.
"""
if new_level is None:

View File

@ -1,4 +1,4 @@
from typing import Annotated
from typing import Annotated, Optional
from cyclopts import App, Argument, Parameter
@ -8,24 +8,9 @@ from .help import StripHelpFormatter
app = App(name='gate', help_formatter=StripHelpFormatter())
@app.meta.default
def launcher(
*tokens: Annotated[str, Parameter(show=False, allow_leading_hyphen=True)],
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
):
"""Control the compressor parameters."""
additional_kwargs = {}
command, bound, _ = app.parse_args(tokens)
additional_kwargs['index'] = index
additional_kwargs['ctx'] = ctx
return command(*bound.args, **bound.kwargs, **additional_kwargs)
@app.command(name='knob')
def knob(
new_knob: Annotated[float, Argument()] = None,
new_knob: Annotated[Optional[float], Argument()] = None,
*,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
@ -34,7 +19,7 @@ def knob(
Parameters
----------
new_knob : int, optional
new_knob : float, optional
If provided, sets the knob to this value. If not provided, the current knob is printed.
"""
if new_knob is None:
@ -46,7 +31,7 @@ def knob(
@app.command(name='threshold')
def threshold(
new_threshold: Annotated[float, Argument()] = None,
new_threshold: Annotated[Optional[float], Argument()] = None,
*,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
@ -67,7 +52,7 @@ def threshold(
@app.command(name='damping-max')
def damping_max(
new_damping_max: Annotated[float, Argument()] = None,
new_damping_max: Annotated[Optional[float], Argument()] = None,
*,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
@ -88,7 +73,7 @@ def damping_max(
@app.command(name='bp-sidechain')
def bp_sidechain(
new_bp_sidechain: Annotated[float, Argument()] = None,
new_bp_sidechain: Annotated[Optional[float], Argument()] = None,
*,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
@ -109,7 +94,7 @@ def bp_sidechain(
@app.command(name='attack')
def attack(
new_attack: Annotated[float, Argument()] = None,
new_attack: Annotated[Optional[float], Argument()] = None,
*,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
@ -130,7 +115,7 @@ def attack(
@app.command(name='hold')
def hold(
new_hold: Annotated[float, Argument()] = None,
new_hold: Annotated[Optional[float], Argument()] = None,
*,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],
@ -151,7 +136,7 @@ def hold(
@app.command(name='release')
def release(
new_release: Annotated[float, Argument()] = None,
new_release: Annotated[Optional[float], Argument()] = None,
*,
index: Annotated[int, Parameter(parse=False)],
ctx: Annotated[Context, Parameter(parse=False)],

View File

@ -8,9 +8,9 @@ from .help import StripHelpFormatter
app = App(name='strip', help_formatter=StripHelpFormatter())
app.command(eq.app.meta, name='eq')
app.command(comp.app.meta, name='comp')
app.command(gate.app.meta, name='gate')
app.command(denoiser.app.meta, name='denoiser')
app.command(comp.app, name='comp')
app.command(gate.app, name='gate')
app.command(denoiser.app, name='denoiser')
app.command(gainlayer.app.meta, name='gainlayer')

4
uv.lock generated
View File

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