💬 Commit message: Update 2026-02-03 21:08:00, 3 files

This commit is contained in:
Adam Ladachowski
2026-02-03 21:08:00 +01:00
parent 7a3735adba
commit cb224b0e04
3 changed files with 66 additions and 23 deletions
BIN
View File
Binary file not shown.
+5
View File
@@ -8,3 +8,8 @@ wheels/
# Virtual environments
.venv
# Coverage
.coverage
htmlcov/
coverage.xml
+61 -23
View File
@@ -46,18 +46,24 @@ console = Console()
# Configuration
# ============================================================================
# XDG Base Directory spec: ~/.config/tensors/config.toml
# XDG Base Directory spec
# Config: ~/.config/tensors/config.toml
# Data: ~/.local/share/tensors/models/, ~/.local/share/tensors/metadata/
CONFIG_DIR = Path(os.environ.get("XDG_CONFIG_HOME", Path.home() / ".config")) / "tensors"
CONFIG_FILE = CONFIG_DIR / "config.toml"
DATA_DIR = Path(os.environ.get("XDG_DATA_HOME", Path.home() / ".local" / "share")) / "tensors"
MODELS_DIR = DATA_DIR / "models"
METADATA_DIR = DATA_DIR / "metadata"
# Legacy config for migration
LEGACY_RC_FILE = Path.home() / ".sftrc"
# Default download paths by model type
DEFAULT_PATHS: dict[str, Path] = {
"Checkpoint": Path.home() / ".xm" / "models" / "checkpoints",
"LORA": Path.home() / ".xm" / "models" / "loras",
"LoCon": Path.home() / ".xm" / "models" / "loras",
"Checkpoint": MODELS_DIR / "checkpoints",
"LORA": MODELS_DIR / "loras",
"LoCon": MODELS_DIR / "loras",
}
CIVITAI_API_BASE = "https://civitai.com/api/v1"
@@ -72,30 +78,62 @@ CIVITAI_DOWNLOAD_BASE = "https://civitai.com/api/download/models"
class ModelType(str, Enum):
"""CivitAI model types."""
checkpoint = "Checkpoint"
lora = "LORA"
embedding = "TextualInversion"
vae = "VAE"
controlnet = "Controlnet"
locon = "LoCon"
checkpoint = "checkpoint"
lora = "lora"
embedding = "embedding"
vae = "vae"
controlnet = "controlnet"
locon = "locon"
def to_api(self) -> str:
"""Convert to CivitAI API value."""
mapping = {
"checkpoint": "Checkpoint",
"lora": "LORA",
"embedding": "TextualInversion",
"vae": "VAE",
"controlnet": "Controlnet",
"locon": "LoCon",
}
return mapping[self.value]
class BaseModel(str, Enum):
"""Common base models."""
sd15 = "SD 1.5"
sdxl = "SDXL 1.0"
pony = "Pony"
flux = "Flux.1 D"
illustrious = "Illustrious"
sd15 = "sd15"
sdxl = "sdxl"
pony = "pony"
flux = "flux"
illustrious = "illustrious"
def to_api(self) -> str:
"""Convert to CivitAI API value."""
mapping = {
"sd15": "SD 1.5",
"sdxl": "SDXL 1.0",
"pony": "Pony",
"flux": "Flux.1 D",
"illustrious": "Illustrious",
}
return mapping[self.value]
class SortOrder(str, Enum):
"""Sort options for search."""
downloads = "Most Downloaded"
rating = "Highest Rated"
newest = "Newest"
downloads = "downloads"
rating = "rating"
newest = "newest"
def to_api(self) -> str:
"""Convert to CivitAI API value."""
mapping = {
"downloads": "Most Downloaded",
"rating": "Highest Rated",
"newest": "Newest",
}
return mapping[self.value]
# ============================================================================
@@ -345,12 +383,12 @@ def search_civitai(
params["query"] = query
if model_type:
params["types"] = model_type.value
params["types"] = model_type.to_api()
if base_model:
params["baseModels"] = base_model.value
params["baseModels"] = base_model.to_api()
params["sort"] = sort.value
params["sort"] = sort.to_api()
# Request more if we need client-side filtering
if query and has_filters:
@@ -760,8 +798,8 @@ def info(
raise typer.Exit(1)
base_name = get_base_name(file_path)
json_path = output_dir / f"{base_name}-xm.json"
sha_path = output_dir / f"{base_name}-xm.sha256"
json_path = output_dir / f"{base_name}.json"
sha_path = output_dir / f"{base_name}.sha256"
output = {
"file": str(file_path),