bc6d43d3f2
Hygiene follow-up to the Camie retirement (#1189) — these were left inert to bound that change; nothing reads them now. Migration 0068 drops: - ml_settings: tagger_store_floor, tagger_model_version, suggestion_threshold_ character/general (already dead pre-retirement — scoring uses per-head thresholds), video_min_tag_frames (only the deleted video-prediction aggregator used it). - image_record: tagger_model_version (no writer), centroid_scores (dead JSON cache, no reader). Also: ml_admin _EDITABLE/GET/_validate pruned (dropped the store-floor invariant + video_min_tag_frames check); MLThresholdSliders trimmed to a video-embedding card (interval + max frames only); importer no longer resets the dropped cols; download_models drops the Camie fetch; stale CASCADE comments in cleanup_service no longer name the removed tables. Tests updated. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Ttrj5P7upUTueSfoJcxEqa
53 lines
1.7 KiB
Vue
53 lines
1.7 KiB
Vue
<template>
|
|
<MaintenanceTile
|
|
icon="mdi-filmstrip"
|
|
title="Video embedding"
|
|
blurb="How videos are sampled into frames before embedding."
|
|
>
|
|
<div v-if="store.settings">
|
|
<div class="text-caption fc-muted mb-3">
|
|
Videos are embedded by sampling frames at a fixed cadence and mean-pooling
|
|
their SigLIP embeddings. The interval sets the cadence; the cap bounds how
|
|
many frames a long video samples.
|
|
</div>
|
|
<v-row>
|
|
<v-col cols="12" sm="6">
|
|
<v-text-field
|
|
v-model.number="local.video_frame_interval_seconds"
|
|
label="Frame interval (s)" type="number" min="0.5" step="0.5"
|
|
density="comfortable" hide-details @change="save"
|
|
/>
|
|
</v-col>
|
|
<v-col cols="12" sm="6">
|
|
<v-text-field
|
|
v-model.number="local.video_max_frames"
|
|
label="Max frames" type="number" min="1" step="1"
|
|
density="comfortable" hide-details @change="save"
|
|
/>
|
|
</v-col>
|
|
</v-row>
|
|
</div>
|
|
<div v-else><v-skeleton-loader type="paragraph" /></div>
|
|
</MaintenanceTile>
|
|
</template>
|
|
|
|
<script setup>
|
|
import { toast } from '../../utils/toast.js'
|
|
import { reactive, watch } from 'vue'
|
|
import { useMLStore } from '../../stores/ml.js'
|
|
import MaintenanceTile from '../common/MaintenanceTile.vue'
|
|
|
|
const store = useMLStore()
|
|
const local = reactive({})
|
|
watch(() => store.settings, (s) => { if (s) Object.assign(local, s) }, { immediate: true })
|
|
|
|
async function save() {
|
|
const patch = {
|
|
video_frame_interval_seconds: local.video_frame_interval_seconds,
|
|
video_max_frames: local.video_max_frames
|
|
}
|
|
try { await store.patchSettings(patch) }
|
|
catch (e) { toast({ text: e.message, type: 'error' }) }
|
|
}
|
|
</script>
|