[project] name = "sstvae" version = "0.1.0" description = "Hybrid-digital SSTV: image transmission over HF via radio-autoencoder latents on OFDM" requires-python = ">=3.10" dependencies = [ "numpy>=1.24", "scipy>=1.10", "pillow>=10.0", ] [project.optional-dependencies] # Encode/decode/simulate from the command line. torch is needed because # the encoder and decoder *are* the image codec -- only sstvae_simulate.py # runs on the base deps alone. cli = [ "torch>=2.0", "huggingface_hub>=0.20", ] # Live receive off a soundcard: everything in `cli`, plus PortAudio # bindings and the waterfall/preview window. listen = [ "torch>=2.0", "huggingface_hub>=0.20", "sounddevice>=0.4.6", "matplotlib>=3.7", ] train = [ "torch>=2.13.0", "lpips>=0.1.4", "datasets>=2.18", "trackio", ] dev = [ "pytest>=8.0", ] # ROCm torch wheels (RX 9070 XT / gfx1201), local dev only — explicit so # cloud/CUDA machines resolve torch from PyPI instead. Local install: # uv pip install --reinstall --index-url https://download.pytorch.org/whl/rocm7.2 torch torchvision # NOTE: `uv sync`/`uv add` will replace the ROCm build with plain PyPI # torch (uv.lock pins it); re-run the install command above afterwards. [[tool.uv.index]] name = "pytorch-rocm" url = "https://download.pytorch.org/whl/rocm7.2" explicit = true [[tool.uv.index]] name = "rocm-nightlies" url = "https://rocm.nightlies.amd.com/v2/gfx120X-all/" explicit = true [build-system] requires = ["setuptools>=68"] build-backend = "setuptools.build_meta" [tool.setuptools.packages.find] include = ["sstvae*"] [tool.pytest.ini_options] testpaths = ["tests"] # The listener state-machine tests synthesize whole transmissions and run # the real decode loop over them, so they take minutes rather than the # ~2 s the rest of the suite does. Excluded by default to keep `pytest` # the fast check it is documented as; run them with `pytest -m slow`. markers = ["slow: multi-minute end-to-end tests (run with -m slow)"] addopts = "-m 'not slow'"