💬 Commit message: Update 2026-02-14 09:01:09, 7 files, 66 lines

📁 Files changed: 7
📝 Lines changed: 66

  • pyproject.toml
  • screenshot.png
  • client.ts
  • GalleryView.vue
  • SearchView.vue
  • index.ts
  • uv.lock
This commit is contained in:
Adam Ladachowski
2026-02-14 09:01:09 +01:00
parent de8bdf4825
commit c156f6826b
7 changed files with 63 additions and 3 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
[project] [project]
name = "tensors" name = "tensors"
version = "0.1.12" version = "0.1.16"
description = "Read safetensor metadata and fetch CivitAI model information" description = "Read safetensor metadata and fetch CivitAI model information"
readme = "README.md" readme = "README.md"
requires-python = ">=3.12" requires-python = ">=3.12"
Binary file not shown.

Before

Width:  |  Height:  |  Size: 127 KiB

After

Width:  |  Height:  |  Size: 48 KiB

+6
View File
@@ -38,6 +38,11 @@ export async function getLoras(): Promise<{ loras: LoRA[]; total: number }> {
} }
// Generation // Generation
export interface LoraConfig {
path: string
multiplier: number
}
export interface GenerateParams { export interface GenerateParams {
prompt: string prompt: string
negative_prompt?: string negative_prompt?: string
@@ -47,6 +52,7 @@ export interface GenerateParams {
cfg_scale?: number cfg_scale?: number
seed?: number seed?: number
save_to_gallery?: boolean save_to_gallery?: boolean
lora?: LoraConfig
} }
export async function generate(params: GenerateParams): Promise<{ images: GeneratedImage[] }> { export async function generate(params: GenerateParams): Promise<{ images: GeneratedImage[] }> {
@@ -98,6 +98,15 @@ onMounted(loadImages)
</div> </div>
</template> </template>
</v-img> </v-img>
<div class="delete-overlay">
<v-btn
icon="mdi-delete"
size="small"
color="error"
variant="flat"
@click.stop="deleteImage(img.id)"
/>
</div>
</v-card> </v-card>
</v-col> </v-col>
</v-row> </v-row>
@@ -161,9 +170,20 @@ onMounted(loadImages)
cursor: pointer; cursor: pointer;
transition: transform 0.2s, border-color 0.2s; transition: transform 0.2s, border-color 0.2s;
border: 1px solid transparent; border: 1px solid transparent;
position: relative;
} }
.gallery-card:hover { .gallery-card:hover {
transform: scale(1.03); transform: scale(1.03);
border-color: rgb(var(--v-theme-primary)); border-color: rgb(var(--v-theme-primary));
} }
.delete-overlay {
position: absolute;
top: 4px;
right: 4px;
opacity: 0;
transition: opacity 0.2s;
}
.gallery-card:hover .delete-overlay {
opacity: 1;
}
</style> </style>
@@ -1,9 +1,11 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref } from 'vue' import { ref, onMounted } from 'vue'
import * as api from '@/api/client' import * as api from '@/api/client'
import type { CivitaiModel } from '@/types' import type { CivitaiModel } from '@/types'
import ModelCard from './ModelCard.vue' import ModelCard from './ModelCard.vue'
const STORAGE_KEY = 'civitai-search-state'
const query = ref('') const query = ref('')
const modelType = ref('') const modelType = ref('')
const baseModel = ref('') const baseModel = ref('')
@@ -12,6 +14,35 @@ const loading = ref(false)
const results = ref<CivitaiModel[]>([]) const results = ref<CivitaiModel[]>([])
const searched = ref(false) const searched = ref(false)
// Restore search state from sessionStorage
onMounted(() => {
const saved = sessionStorage.getItem(STORAGE_KEY)
if (saved) {
try {
const state = JSON.parse(saved)
query.value = state.query || ''
modelType.value = state.modelType || ''
baseModel.value = state.baseModel || ''
sortOrder.value = state.sortOrder || 'Most Downloaded'
results.value = state.results || []
searched.value = state.searched || false
} catch (e) {
console.error('Failed to restore search state:', e)
}
}
})
function saveState() {
sessionStorage.setItem(STORAGE_KEY, JSON.stringify({
query: query.value,
modelType: modelType.value,
baseModel: baseModel.value,
sortOrder: sortOrder.value,
results: results.value,
searched: searched.value,
}))
}
const modelTypes = [ const modelTypes = [
{ title: 'All Types', value: '' }, { title: 'All Types', value: '' },
{ title: 'Checkpoint', value: 'Checkpoint' }, { title: 'Checkpoint', value: 'Checkpoint' },
@@ -54,6 +85,7 @@ async function search() {
results.value = [] results.value = []
} finally { } finally {
loading.value = false loading.value = false
saveState()
} }
} }
</script> </script>
+2
View File
@@ -4,6 +4,7 @@ export interface Model {
filename: string filename: string
size_mb: number size_mb: number
modified: number modified: number
category: 'sd15' | 'large'
} }
export interface LoRA { export interface LoRA {
@@ -12,6 +13,7 @@ export interface LoRA {
filename: string filename: string
size_mb: number size_mb: number
modified: number modified: number
category: 'sd15' | 'large'
} }
export interface GeneratedImage { export interface GeneratedImage {
Generated
+1 -1
View File
@@ -707,7 +707,7 @@ wheels = [
[[package]] [[package]]
name = "tensors" name = "tensors"
version = "0.1.12" version = "0.1.16"
source = { editable = "." } source = { editable = "." }
dependencies = [ dependencies = [
{ name = "httpx" }, { name = "httpx" },