Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,4 @@ src-tauri/gen/android/app/src/main/assets/
src-tauri/gen/android/keystore.properties
*.keystore
*.jks
public/ai/
33 changes: 33 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,39 @@ Tutte le versioni notevoli del banco di montaggio. Le date sono in formato AAAA-
Ogni versione pubblicata ha la sua [release GitHub](https://github.com/cammo22/DaProdVideo/releases) con le app
per Windows (portatile e installabile), Mac e Android, e va online su [GitHub Pages](https://cammo22.github.io/DaProdVideo/) come versione prova.

## [1.3.0] — 2026-10-07 · Tutto si trova, l'AI non si ferma 🔍✨

La versione per chi usa DaProd Video tutti i giorni: le funzioni AI che davano errore ora partono (e se una strada non va ne prendono un'altra da sole), e ogni strumento si trova in un attimo, con la spiegazione di come si usa.

### L'AI che non si ferma
- **I sottotitoli col motore NVIDIA non partivano nell'app**: l'app scaricava la versione 0.1.0 di NeMo-Speech.cpp, che **non ha mai avuto i programmi pronti da scaricare**, e finiva in "lo scarico non è riuscito". Ora usa la **0.2.0** (controllata riga per riga: nomi degli archivi, impronte, comandi `transcribe`, `synthesize`, `pull`).
- **Se il motore NVIDIA non parte, i sottotitoli passano da soli a Whisper** (prima ci si fermava con un errore). Se la versione per la scheda video si ferma, si riprova **sul processore**.
- **"Togli lo sfondo" dava "Could not locate file"** sul computer senza scheda video: la libreria cercava una versione del modello (q8) che per MODNet e BiRefNet non esiste. Ora il tipo del modello si dice sempre e, se un tipo manca, **si prova il successivo** (q8 → fp16 → fp32). Vale anche per Whisper e la traduzione.
- **Se la scheda video si ferma a metà lavoro** (WebGPU), il modello si ricarica sul processore e lo stesso pezzo si rifà: prima tutta la trascrizione si fermava.
- **La libreria AI e il suo motore stanno dentro l'app** (transformers.js 4.3.1 e ONNX Runtime): niente più download dalla CDN a ogni avvio, che su reti lente o aziendali faceva fallire tutto. La CDN resta come riserva.
- **Un worker AI che si blocca non blocca più la funzione per sempre**: prima, dopo un errore di memoria, sottotitoli e traduzione restavano appesi fino al riavvio del programma.
- **Gli errori si capiscono**: "Failed to fetch" diventa "serve internet la prima volta", "Could not locate file" diventa "il modello non si trova, provane un altro", la memoria finita suggerisce il modello più leggero, e così via.
- La voce in cinese del motore NVIDIA non c'è nelle versioni che NVIDIA pubblica già pronte: ora lo si dice chiaro invece di un errore tecnico.

### Il Centro AI (menu **AI**, pulsante **✨ AI** in alto)
- **Tutte le funzioni intelligenti in un posto**: sottotitoli automatici, traduzione, voce AI, togli lo sfondo, segui un oggetto, montaggio automatico, colore automatico. Per ognuna: **cosa fa, come si usa in tre passi, cosa serve** ("prima servono i sottotitoli", "solo nell'app"…), se il **modello è già sul computer** e il pulsante **Usa** che porta dritto al punto giusto (e lo fa lampeggiare).
- **🔍 Controlla l'AI**: prova davvero il motore AI su questo computer (senza scaricare niente), dice se c'è la scheda video, se Hugging Face si raggiunge, quali modelli sono già scaricati e com'è messo il motore NVIDIA, con cosa fare se qualcosa non va.
- **Impostazioni**: la scheda video per l'AI si può spegnere (su alcuni computer c'è ma sbaglia), **Libera lo spazio** dei modelli scaricati, **togli il motore NVIDIA**.

### Trovare tutto
- **Cerca un comando (`Ctrl+K`, o 🔍 Cerca in alto)**: scrivi quello che vuoi fare — "rallenta", "sottotitoli", "togli lo sfondo", "tendina cuore", "neon" — e lo trovi, col suo tasto accanto. Dentro ci sono **tutti i comandi, le pagine, le funzioni AI, le 50 transizioni, gli effetti a tempo e sulla clip, i titoli, le 49 animazioni, i countdown e le guide**. Capisce anche senza accenti e coi sinonimi ("slow motion" → velocità). `Invio` lo fa davvero: la transizione va sul taglio, il titolo al cursore, l'effetto sulla clip scelta (e se manca la clip te lo dice).
- **Come si fa (`F1`)**: 22 guide brevi — il primo montaggio in un minuto, tagliare, spostare, transizioni, effetti, titoli, movimento, velocità, audio, sottotitoli, lingue, sfondo, tracking, DaProdMontage, colore, export, progetti, LIVE, più timeline, "se un'AI non parte" — ognuna coi passi e il pulsante **Fallo adesso**. I tasti restano in Aiuto → Tasti.
- **La pagina iniziale** ha "Impara a usarlo" (il primo montaggio, la guida, la ricerca, il Centro AI); il pannello Proprietà vuoto ha i pulsanti Cerca e Come si fa.
- **I comandi sono tutti in un registro solo**: Salva, Importa, Esporta, le pagine, la vista e l'aiuto hanno ora lo stesso nome nei menu, nella ricerca e nella finestra dei tasti.
- **Vista → Copie leggere**: scegli quando farle (da sole, sempre, mai) e **svuotale**; **Vista → Svuota la memoria delle misure**. Esistevano dentro il programma ma non c'era modo di arrivarci.

### Sistemato
- **La testata non esce più dallo schermo**: sui portatili (1366, 1440, 1536 pixel) il tasto **Esporta** finiva fuori dalla finestra. Ora la testata si stringe a gradini e tutto resta in vista, da 920 a 2200 pixel.

### Per chi ha curiosità
- `src/media/libreriaAI.ts` (libreria locale, dispositivi, tipi con ripiego), `erroriAI.ts`, `diagnosiAI.ts` + `provaAI.worker.ts`; `scripts/ai-locale.mjs` prende transformers.js e ONNX Runtime dal registro npm (impronta sha512 controllata) prima di ogni build; `src/ui/cerca.ts` + `fontiCerca.ts`, `guida.ts`, `centroAI.ts`.
- Prove nuove in `test/prove-aiuto.mjs`. **Nota onesta**: i modelli veri (Whisper, NLLB, BEN2, MODNet, SAM) e il motore NVIDIA non si possono scaricare dal luogo dove si prova; le prove usano librerie e motori finti con lo stesso protocollo. Il **motore AI vero** (la libreria e ONNX Runtime) invece è provato davvero: parte dai file dell'app e fa i conti giusti.

## [1.2.1] — 2026-10-07 · Le rifiniture: più sicuro, più preciso, niente sorprese 🔧

Una versione di pulizia: nessuno strumento nuovo, ma tante piccole cose che prima potevano andare storte.
Expand Down
24 changes: 21 additions & 3 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -123,9 +123,27 @@ Editor video "vecchio stile, moderno dentro" (ispirato a EDIUS e alle centraline
non passano. Nel browser `potaDeposito` (progetti.ts) tiene in IndexedDB solo i file del montaggio aperto e dei recenti. Copia/incolla
porta i blocchetti FX della clip (`padreDi`). In `fotogrammi.ts` un flusso buttato a metà play lascia il suo ultimo fotogramma in
`ponti` finché il nuovo non ne ha uno (niente nero). Prove: `test/prove-rifiniture.mjs`; nessun tasto deve stare su due comandi (lo controlla la prova).
- **Trovare e capire (1.3.0)**: **Ctrl+K** = `src/ui/cerca.ts` (`apriCerca`, `risultati`/`punteggio` con sinonimi, recenti in localStorage
`dpv-cerca-recenti`): dentro ci sono **tutti i comandi registrati** in `azioni.ts` più le fonti iscritte con `fonteCerca` (`src/ui/fontiCerca.ts`:
pagine, sezioni del Finale, guide, transizioni, effetti, titoli, animazioni, countdown; `manca()` = perché adesso non si può). Il fuoco va
all'input **subito** (se no le lettere finiscono al banco come tasti). **F1** = `src/ui/guida.ts` (`ARGOMENTI`, `finestraGuida(id)`, "Fallo adesso"
con `vaiPagina/vaiFinale/vaiSezione` + `evidenzia` di `dom.ts`). **Centro AI** = `src/ui/centroAI.ts` (`FUNZIONI_AI`, carte `.ai-carta[data-ai]`,
"Controlla l'AI" = `diagnosi()` di `src/media/diagnosiAI.ts`, impostazioni: scheda video sì/no, libera lo spazio, togli il motore). I comandi di
`app.ts` (file, pagine, vista, aiuto) ora passano da `registra` (= `reg` di `azioni.ts`): **un tasto, un comando** (lo controlla la prova); con la
pagina iniziale aperta passano solo `SOPRA_HOME` in `tastiera.ts`. Eventi: `dpv:cerca`, `dpv:guida`, `dpv:tasti`, `dpv:centro-ai`, `dpv:finale`,
`dpv:sezione` (→ `Ispettore.apriSezione`), `dpv:home-nascondi`. Testata: `.testata > *` non si stringe, le scritte spariscono a scalini
(1840/1720/1620/1520/1420/1250 px) così **Esporta resta sempre nello schermo** (la prova la misura da 1024 a 1920).
- **L'AI che non si ferma (1.3.0)**: `src/media/libreriaAI.ts` è la base di tutti i worker AI (voce, traduci, ritaglio, provaAI): la libreria
**viaggia dentro l'app** in `public/ai/` (→ `dist/ai/`, la scrive `scripts/ai-locale.mjs` in `prebuild` da registry.npmjs.org col controllo
sha512, è in `.gitignore`; se manca si va sulla CDN), `wasmPaths` puntano lì (asyncify). `caricaConRipieghi` prova **WebGPU poi WASM** e per
ognuno **più pesi** (q8/fp16/fp32: a MODNet e BiRefNet manca q8); se la scheda si rompe a metà lavoro si ricarica su WASM e si rifà. Scheda video
spegnibile (`dpv-ai-scheda`). Un worker morto si butta (`onerror` → `null`). **Errori**: `src/media/erroriAI.ts` (`spiegaErroreAI`: regole
regex → frase italiana con cosa fare; le frasi già italiane passano). Nemotron che sbaglia → Whisper da solo (`ripiego` in `sottotitoliAI`), e
NeMo riprova con `--device cpu` (`eseguiConRipiego`). Nelle prove la libreria finta si serve anche su `**/ai/transformers.min.js`.
Prove: `test/prove-aiuto.mjs`.
- **Cursore che si aggancia** (`agganciaCursore` in `src/ui/timeline.ts`): sul righello si aggancia sempre (calamita `N`), Alt lo lascia libero.
- **Motore NVIDIA** (`src-tauri/src/motori.rs` + `src/media/nemo.ts`): NeMo-Speech.cpp v0.1.0 (Apache-2.0), programma a parte che l'app
scarica dalla release di NVIDIA (`nemo-speech-0.1.0-{windows,macos,linux}-{x86_64,aarch64}-{cpu,cuda,vulkan,metal}`, `.sha256` a fianco) in
- **Motore NVIDIA** (`src-tauri/src/motori.rs` + `src/media/nemo.ts`): NeMo-Speech.cpp **0.2.0** (Apache-2.0; la 0.1.0 non aveva gli archivi), programma a parte che l'app
scarica dalla release di NVIDIA (`nemo-speech-<versione>-{windows,macos,linux}-{x86_64,aarch64}-{cpu,cuda,vulkan,metal}`, `.sha256` a fianco) in
`app_local_data_dir/motori/`: **CUDA se `nvidia-smi` risponde, Metal su Apple Silicon, se no CPU**. Il lato Rust fa solo I/O a polling (come
`aggiorna.rs`): `motore_stato/installa/scarico/lancia/lavoro/ferma/elenca/peso_modelli`; i modelli li scarica lui (`pull`, cartella
`NEMO_SPEECH_MODEL_DIR` nostra). Il JS (`MotoreNemo`) scrive i WAV a 16 kHz (`wav.ts`), lancia `transcribe <cartella> --format srt
Expand All @@ -144,7 +162,7 @@ Editor video "vecchio stile, moderno dentro" (ispirato a EDIUS e alle centraline
- TRASPARENZA (tasto B, era ELASTICO) = la linea gialla dell'opacità sui video; IN/OUT si vedono solo se ci sono (Alt+X o ✕).
- Si parte con **2 tracce video e 2 audio**. **Alt+Shift+trascina** = la clip e tutto quello dopo, su tutte le tracce.
**V** = timeline stretta (la colonna di destra scende fino in fondo).
- **Sottotitoli AI**: Whisper via transformers.js in `src/media/voce.worker.ts` (libreria dalla CDN, modello da
- **Sottotitoli AI**: Whisper via transformers.js in `src/media/voce.worker.ts` (libreria dentro l'app, CDN di ripiego; modello da
Hugging Face, entrambi al primo uso); `src/media/voce.ts` prende l'audio a 16 kHz e fa le righe. Nelle prove si usa
un trascrittore finto (`impostaTrascrittore`): dal container non si raggiungono né la CDN né Hugging Face.
- **Aggiornamenti**: `src/ui/aggiornamenti.ts` (API delle release di GitHub, novità dal CHANGELOG che viaggia
Expand Down
Loading
Loading