💬 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:
+1
-1
@@ -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 |
@@ -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>
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user