[build-system] requires = ["hatchling>=1.29.0", "versioningit", "hatch-sbom[uv]>=0.3.0"] build-backend = "hatchling.build" [project] name = "vsview" dynamic = ["version"] description = "The next-generation VapourSynth previewer" readme = "README.md" license = "EUPL-1.2 AND (MIT AND Apache-2.0 AND ISC AND OFL-1.1)" license-files = [ "LICENSE", "src/vsview/assets/icons/phosphor/LICENSE", "src/vsview/assets/icons/material/LICENSE", "src/vsview/assets/icons/lucide/LICENSE", "src/vsview/assets/fonts/Cascadia_Mono/LICENSE.txt", ] requires-python = ">=3.12" authors = [{ name = "Vardë", email = "ichunjo.le.terrible@gmail.com" }] maintainers = [ { name = "Vardë", email = "ichunjo.le.terrible@gmail.com" }, { name = "Jaded Encoding Thaumaturgy", email = "jaded.encoding.thaumaturgy@gmail.com" }, ] keywords = [ "video", "video-processing", "encoding", "previewer", "viewer", "vapoursynth", "vapoursynth-editor", "vapoursynth-preview", ] classifiers = [ "Topic :: Multimedia :: Graphics", "Development Status :: 5 - Production/Stable", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", "Operating System :: OS Independent", "Typing :: Typed", ] dependencies = [ "vapoursynth>=75,!=76", "vapoursynth-bestsource>=17.0", "vsjetengine>=1.4.0", "vspackrgb>=1.4.0", "vsview-cli>=1.1.0", "pyside6>=6.11.0", "jetpytools>=2.2.7", "pydantic>=2.0.0", "python-dotenv>=1.2.2", "platformdirs>=4.9.2", "rich>=15.0.0", "pygments>=2.20.0", "pluggy>=1.6.0", "typing_extensions>=4.15.0; python_version<'3.13'", ] [project.scripts] vsview = "vsview.cli:main" [project.optional-dependencies] recommended = [ "vsview-frameprops-extended", "vsview-split-planes", "vsview-fftspectrum", "vsview-comp", ] secrets = ["keyring>=25.7.0"] full = [ "vsview[recommended]", "vsview-audio-convert", "vsview-histogram", "vsview-nativeres", ] [dependency-groups] dev = [ "hatchling>=1.29.0", "vsstubs>=1.5.0", "mypy>=2.1.0, <2.2.0", "ruff>=0.15.0, <0.16.0", "objgraph>=3.6.2", "graphviz>=0.21", "types-pygments>=2.20.0", { include-group = "test" }, { include-group = "plugins" }, ] test = [ "pytest>=9.0.0, <10.0.0", "pytest-cov>=7.0.0", "pytest-mock>=3.15.0", "pytest-qt>=4.5.0", "pytest-xvfb>=3.1.1", "vspackrgb[numba,numpy]", ] doc = ["mkdocstrings[python]>=1.0.3", "zensical==0.0.44", "ruff"] plugins = [ "vsview-frameprops-extended", "vsview-split-planes", "vsview-fftspectrum", "vsview-comp", "vsview-nativeres", "vsview-audio-convert", "vsview-histogram", ] [project.urls] Documentation = "https://jaded-encoding-thaumaturgy.github.io/vs-view/" Plugins = "https://jaded-encoding-thaumaturgy.github.io/vs-view/plugins/" "Source Code" = "https://github.com/Jaded-Encoding-Thaumaturgy/vs-view" "Bug Tracker" = "https://github.com/Jaded-Encoding-Thaumaturgy/vs-view/issues" "Contact" = "https://discord.gg/XTpc6Fa9eB" [tool.hatch.build.targets.sdist] only-include = [ "docs", "scripts", "src/vsview", "stubs", "tests", "uv.lock", ".gitmodules", ] [tool.hatch.build.targets.wheel] packages = ["src/vsview"] exclude = ["README.md", "__main__.py"] [tool.hatch.build.targets.wheel.hooks.sbom] source = "uv" [tool.hatch.build.targets.wheel.hooks.sbom.uv] no-dev = true [tool.hatch.version] source = "versioningit" [tool.versioningit.vcs] match = ["vsview/v*"] default-tag = "vsview/v0.0.0" [tool.versioningit.tag2version] rmprefix = "vsview/v" [tool.versioningit.format] distance = "{next_version}.dev{distance}+{vcs}{rev}" dirty = "{next_version}+dirty" distance-dirty = "{next_version}.dev{distance}+{vcs}{rev}.dirty" [[tool.uv.index]] name = "vs-wheels" url = "https://jaded-encoding-thaumaturgy.github.io/vs-wheels/simple" [tool.uv.workspace] members = ["src/vspackrgb", "src/vsview-cli", "src/plugins/*"] [tool.uv.sources] vapoursynth-fmtconv = { index = "vs-wheels" } vspackrgb = { workspace = true } vsview-cli = { workspace = true } vsview-fftspectrum = { workspace = true } vsview-split-planes = { workspace = true } vsview-frameprops-extended = { workspace = true } vsview-audio-convert = { workspace = true } vsview-comp = { workspace = true } vsview-histogram = { workspace = true } [tool.mypy] mypy_path = "$MYPY_CONFIG_FILE_DIR/stubs" exclude_gitignore = true exclude = ["^submodules/"] # Flags changed by --strict warn_return_any = false extra_checks = false # Misc warn_unreachable = true enable_error_code = ["explicit-override"] allow_redefinition_new = true local_partial_types = true implicit_reexport = false strict = true show_column_numbers = true pretty = true color_output = true error_summary = true [[tool.mypy.overrides]] module = "vapoursynth.*" ignore_errors = true [tool.ruff] line-length = 120 extend-exclude = ["submodules"] [tool.ruff.format] docstring-code-format = true [tool.ruff.lint] exclude = ["stubs/vapoursynth/*"] extend-select = [ "YTT", "ASYNC", "C4", "LOG", "G", "PIE", "PYI", "PT", "Q", "RSE", "RET", "SIM", "I", "N", "PERF", "E", "W", "UP", "FURB", "RUF", ] ignore = ["N802", "N815"] [tool.ruff.lint.per-file-ignores] "__init__.*" = ["F401", "F403"]