Transform tensors from a "sd-server wrapper" to a pure client (CLI + UI) that talks to sd-server API directly.
- Default API URL:
https://sd-api.saiden.dev
- API key auth via config:
sd_server_api_key
- No wrapping/proxying/restarting of sd-server
| Command |
What it does |
Talks to |
tsr info <file> |
Read safetensor metadata, fetch CivitAI info |
Local file + CivitAI API |
tsr search |
Search CivitAI models |
CivitAI API |
tsr get <id> |
Fetch model info from CivitAI |
CivitAI API |
tsr dl <id> |
Download model from CivitAI |
CivitAI API |
tsr config |
Manage config (API keys, remotes) |
Local config |
tsr generate |
Generate images |
sd-server API (direct or via wrapper) |
tsr status |
Show wrapper status |
tensors wrapper API |
tsr reload |
Reload sd-server with new model |
tensors wrapper API |
tsr serve |
Start wrapper API (proxies to sd-server) |
Starts FastAPI server |
tsr db |
Manage local models DB |
Local SQLite |
tsr images |
Manage remote gallery |
tensors wrapper API |
tsr models |
List models on remote |
tensors wrapper API |
tsr remote |
Manage remote server config |
Local config |
Starts a FastAPI server that:
- Proxies all requests to sd-server (catch-all route)
- Serves Vue UI at
/
- Adds features: gallery, CivitAI search, model listing, downloads
- Has a
/reload endpoint that proxies to sd-server
| Remove |
Reason |
tsr reload command |
sd-server manages its own models |
/reload route in server |
Same |
switch_model in client.py |
Same |
| Proxy wrapper concept |
tensors should call API directly, not proxy |
| Keep |
Change |
tsr serve |
Just serve Vue UI, no proxying |
tsr generate |
Call sd-server API directly with API key |
| Vue UI |
Call sd-server API directly (already does via /api/*) |
tsr models |
List models from sd-server API directly |