use argparse

main
Andrew Cassidy 3 years ago
parent 8b5ed4e24b
commit ce2ea3be61

@ -11,13 +11,38 @@ All files require python3 to be installed.
## Usage
### ddscompress.py
usage: `ddscompress.py [-h] [--convertcmd CMD] [--compresscmd CMD] [files ...]`
Converts any number of files to `.dds` format, automatically choosing dxt1 or dxt5 depending on if the source image has anything in its alpha channel. Designed to be used with a glob, e.g: `ddscompress.py *.png`
positional arguments:
`files`: input texture files
optional arguments:
`-h, --help `: show this help message and exit
`--convertcmd CMD`: name of imagemagick's convert tool (default: `convert`)
`--compresscmd CMD`: name of the nvidia dds compress tool (default: `nvcompress`)
### ddsdecompress.py
usage: `ddsdecompress.py [-h] [--decompresscmd CMD] [files ...]`
Converts any number of files to `.tga` from `.dds`. Designed to be used with a glob, e.g: `ddsdecompress.py *.dds`
positional arguments:
`files`: input dds files
Converts any number of files to `.png` from `.dds`. Designed to be used with a glob, e.g: `ddsdecompress.py *.dds`
optional arguments:
`-h, --help`: show this help message and exit
`--decompresscmd CMD`: name of the nvidia dds decompress tool (default: `nvdecompress`)
### ddsck.py
usage: `ddsck.py [-h] [--convertcmd CMD] [--infocmd CMD] [files ...]`
Checks any number of dds files for common issues, including formats not supported by KSP, and DXT5 textures that don't use the alpha channel. Designed to be used with a glob, e.g: `ddsck.py *.dds`
positional arguments:
`files`: input dds files
Checks any number of dds files for common issues, including formats not supported by KSP, and DXT5 textures that don't use the alpha channel. Designed to be used with a glob, e.g: `ddsck.py *.dds`
optional arguments:
`-h, --help`: show this help message and exit
`--convertcmd CMD`: name of imagemagick's convert tool (default: `convert`)
`--infocmd CMD`: name of the nvidia dds info tool (default: `nvddsinfo`)

@ -2,25 +2,24 @@ import subprocess
import re
def alpha(file):
result = subprocess.run(["convert", file, "-resize", "1x1", "-format", "%[fx:int(255*a+.5)]", "info:-"], capture_output=True)
result = subprocess.run([convertcmd, file, "-resize", "1x1", "-format", "%[fx:int(255*a+.5)]", "info:-"], capture_output=True)
result.check_returncode()
return int(result.stdout)
def flip(file, output):
result = subprocess.run(['convert', '-flip', file, output], capture_output=True)
result = subprocess.run([convertcmd, '-flip', file, output], capture_output=True)
result.check_returncode()
def nvcompress(format, file, output):
result = subprocess.run(['nvcompress', format, file, output], capture_output=True)
result = subprocess.run([compresscmd, format, file, output], capture_output=True)
result.check_returncode()
print(result)
def nvdecompress(file, output):
result = subprocess.run(['nvdecompress', '-format', 'png', file, output], capture_output=True)
result = subprocess.run([decompresscmd, file, output], capture_output=True)
result.check_returncode()
def nvinfo(file):
result = subprocess.run(['nvddsinfo', file], capture_output=True)
result = subprocess.run([infocmd, file], capture_output=True)
result.check_returncode()
info = {

@ -3,11 +3,21 @@
import sys
import os
import os.path
import argparse
import dds
for argv in sys.argv[1:]:
parser = argparse.ArgumentParser(description="Checks any number of dds files for common issues, including formats not supported by KSP, and DXT5 textures that don't use the alpha channel.")
parser.add_argument('files', type=str, nargs='*', help = "input dds files")
parser.add_argument('--convertcmd', type=str, metavar='CMD', default="convert", help="name of imagemagick's convert tool (default: %(default)s)")
parser.add_argument('--infocmd', type=str, metavar='CMD', default="nvddsinfo", help="name of the nvidia dds info tool (default: %(default)s)")
args = parser.parse_args()
dds.convertcmd = args.convertcmd
dds.infocmd = args.infocmd
for argv in args.files:
file = os.path.abspath(argv)
output = os.path.splitext(file)[0] + ".png"
info = dds.nvinfo(file)
format = info["format"]

@ -4,10 +4,21 @@ import sys
import os
import os.path
import tempfile
import argparse
import dds
with tempfile.TemporaryDirectory(prefix="dds") as tempDir:
for argv in sys.argv[1:]:
parser = argparse.ArgumentParser(description="Converts any number of textures to dds format. automatically chooses dxt1 or dxt5 depending on if the source image has anything in its alpha channel.")
parser.add_argument('files', type=str, nargs='*', help = "input texture files")
parser.add_argument('--convertcmd', type=str, metavar='CMD', default="convert", help="name of imagemagick's convert tool (default: %(default)s)")
parser.add_argument('--compresscmd', type=str, metavar='CMD', default="nvcompress", help="name of the nvidia dds compress tool (default: %(default)s)")
args = parser.parse_args()
dds.convertcmd = args.convertcmd
dds.compresscmd = args.compresscmd
with tempfile.TemporaryDirectory() as tempDir:
for argv in args.files:
print(f'[{argv}]: converting to dds')
file = os.path.abspath(argv)
tmpOutput = os.path.join(tempDir, os.path.basename(file))
@ -16,11 +27,9 @@ with tempfile.TemporaryDirectory(prefix="dds") as tempDir:
alpha = dds.alpha(file)
dds.flip(file, tmpOutput)
print(alpha)
if alpha < 255:
format = "-bc3"
else:
format = "-bc1"
print(format)
dds.nvcompress(format, tmpOutput, output)
os.remove(file)

@ -3,12 +3,21 @@
import sys
import os
import os.path
import argparse
import dds
for argv in sys.argv[1:]:
print(f'[{argv}]: converting from dds')
parser = argparse.ArgumentParser(description="Converts any number of files from dds to tga.")
parser.add_argument('files', type=str, nargs='*', help = "input dds files")
parser.add_argument('--decompresscmd', type=str, metavar='CMD', default="nvdecompress", help="name of the nvidia dds decompress tool (default: %(default)s)")
args = parser.parse_args()
dds.decompresscmd = args.decompresscmd
for argv in args.files:
print(f'[{argv}]: converting from dds to tga')
file = os.path.abspath(argv)
output = os.path.splitext(file)[0] + ".png"
output = os.path.splitext(file)[0] + f".tga"
dds.nvdecompress(file, output)
os.remove(file)
Loading…
Cancel
Save