💬 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]
name = "tensors"
version = "0.1.12"
version = "0.1.16"
description = "Read safetensor metadata and fetch CivitAI model information"
readme = "README.md"
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
export interface LoraConfig {
path: string
multiplier: number
}
export interface GenerateParams {
prompt: string
negative_prompt?: string
@@ -47,6 +52,7 @@ export interface GenerateParams {
cfg_scale?: number
seed?: number
save_to_gallery?: boolean
lora?: LoraConfig
}
export async function generate(params: GenerateParams): Promise<{ images: GeneratedImage[] }> {
@@ -98,6 +98,15 @@ onMounted(loadImages)
</div>
</template>
</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-col>
</v-row>
@@ -161,9 +170,20 @@ onMounted(loadImages)
cursor: pointer;
transition: transform 0.2s, border-color 0.2s;
border: 1px solid transparent;
position: relative;
}
.gallery-card:hover {
transform: scale(1.03);
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>
@@ -1,9 +1,11 @@
<script setup lang="ts">
import { ref } from 'vue'
import { ref, onMounted } from 'vue'
import * as api from '@/api/client'
import type { CivitaiModel } from '@/types'
import ModelCard from './ModelCard.vue'
const STORAGE_KEY = 'civitai-search-state'
const query = ref('')
const modelType = ref('')
const baseModel = ref('')
@@ -12,6 +14,35 @@ const loading = ref(false)
const results = ref<CivitaiModel[]>([])
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 = [
{ title: 'All Types', value: '' },
{ title: 'Checkpoint', value: 'Checkpoint' },
@@ -54,6 +85,7 @@ async function search() {
results.value = []
} finally {
loading.value = false
saveState()
}
}
</script>
+2
View File
@@ -4,6 +4,7 @@ export interface Model {
filename: string
size_mb: number
modified: number
category: 'sd15' | 'large'
}
export interface LoRA {
@@ -12,6 +13,7 @@ export interface LoRA {
filename: string
size_mb: number
modified: number
category: 'sd15' | 'large'
}
export interface GeneratedImage {
Generated
+1 -1
View File
@@ -707,7 +707,7 @@ wheels = [
[[package]]
name = "tensors"
version = "0.1.12"
version = "0.1.16"
source = { editable = "." }
dependencies = [
{ name = "httpx" },