#!/usr/bin/python3
# Original code by: le_hibou
# Modified by krch for redundancy in subfolders (idea by slimerjspud) and counting only once when both vmb and vmi files are present (idea by case), default morphs threshold reduced to 250 (from 500)
# Version: 1.0.1
import os
import glob
import zipfile
import sys
import argparse
import pathlib
whiteList = []
whiteList.append("AshAuryn.AshAuryn's_174_Asymmetry_Morphs_for_Mouth.2.var")
whiteList.append("AshAuryn.Pose_Tools.4.var")
whiteList.append("AshAuryn.Sexpressions.5.var")
whiteList.append("cotyounoyume.ExpressionBlushingAndTears.37.var")
whiteList.append("kemenate.Morphs.10.var")
whiteList.append("Oeshii.ReloadedMorphs.1.var")
whiteList.append("SPQR.SPQRAlive.40.var")
whiteList.append("V2.___UniversalMorphCollection___.100.var")
whiteList.append("CheesyFX.ShakeIt.35.var")
whiteList.append("ParticlePinnacle.ppthighcompressorandvibrations.19.var")
whiteList.append("vamX.Base.1.var")
whiteList.append("V2.___UniversalMorphCollection___.103.var")
whiteList.append("vecterror._MorphCollection_.26.var")
whiteList.append("SPQR.SPQRAlive.53.var")
whiteList.append("vamX.1.32.var")
# Initialize the total morph count
totalMorphCount = 0
def logerror(message):
print("ERROR: " + message, file=sys.stderr, flush=True)
argParser = argparse.ArgumentParser(prog='morphbloatscanner.py', description='List Virt-a-mate VAR files that have both vmi and vmb extensions with the same filename')
argParser.add_argument("-m", "--max", type=int, default=250, help="maximum number of morphs by VAR allowed")
argParser.add_argument("-p", "--path", type=pathlib.Path, default='.', help="path to VAR folder")
args = argParser.parse_args()
print()
print("VAR files with more than or equal to %i morphs will be listed" % args.max)
print()
vars = glob.glob(str(args.path) + "/**/*.var", recursive=True)
for var in vars:
head_tail = os.path.split(var)
varFilename = head_tail[1]
if varFilename not in whiteList:
# Initialize varMorphCount to 0 for each VAR file
varMorphCount = 0
try:
with zipfile.ZipFile(var) as myzip:
vmb_files = set()
vmi_files = set()
for file in myzip.namelist():
filename = file.split("/")[-1].lower()
if file.lower().find("custom/atom/person/morphs") != -1:
if filename.endswith('.vmb'):
vmb_files.add(filename)
elif filename.endswith('.vmi'):
vmi_files.add(filename)
counter = 0
for vmb_filename in vmb_files:
vmi_filename = vmb_filename.replace('.vmb', '.vmi')
if vmi_filename in vmi_files:
counter += 1
#Debug
#print("VAR File:"+ varFilename + "Number of pairs:" + str(counter))
varMorphCount += counter
except Exception as e:
logerror(var + ": " + str(e))
# Check if varMorphCount is greater than or equal to args.max
if varMorphCount >= args.max:
print(varFilename + " has " + str(varMorphCount) + " morphs")
# Increment totalMorphCount by varMorphCount for each .var file
totalMorphCount += varMorphCount
# Print the total morph count for all analyzed VAR files
print("Total morphs found in the directory: " + str(totalMorphCount))