diff --git a/beweise/ui-515-wizard.png b/beweise/ui-515-wizard.png new file mode 100644 index 0000000..320a5a5 Binary files /dev/null and b/beweise/ui-515-wizard.png differ diff --git a/rippy-windows/bau/release-notes.md b/rippy-windows/bau/release-notes.md index 100e4d3..248a8d8 100644 --- a/rippy-windows/bau/release-notes.md +++ b/rippy-windows/bau/release-notes.md @@ -1,27 +1,28 @@ -Version 5.1.4 +Version 5.1.5 -Das Update installiert sich jetzt wirklich. -Bisher wurde Rippy beim Update sauber beendet — und dann passierte nichts. -Der Grund: Rippy hält alle seine Programme an einer Leine, damit beim -Absturz nichts hängenbleibt und die Disc festhält. Der Update-Installer -hing versehentlich an derselben Leine und wurde in dem Moment -mitgerissen, in dem Rippy sich für ihn beendete. Er startet jetzt -ausdrücklich neben der Leine; alles andere bleibt angeleint wie vorher. +Der letzte Rand ist weg. +Windows 11 hat um das rahmenlose Fenster noch eine feine Linie gezeichnet +— die gehört nicht zum Programm, sondern zum Fenstermanager. Rippy sagt +Windows jetzt, dass es sie weglassen soll. -Aus 5.1.3: Das Fenster gehört Rippy. -Kein grauer Windows-Rahmen mehr. Minimieren, Maximieren und Schließen -sitzen oben rechts im Programm, gezogen wird an der Kopfzeile. +Rippy zeigt beim Einrichten, was deine Maschine kann. +Rippy misst schon immer die Encoder deiner Grafikkarte und wählt danach +von selbst das beste Preset — nur sah man das nirgends. Die Erst- +Einrichtung zeigt jetzt die gemessenen Encoder und was Rippy für DVD, +Blu-ray und 4K daraus macht. -Aus 5.1.3: Nichts klebt mehr links. -Die Seite ist mittig und wächst mit dem Fenster mit. Im schmalen Fenster -rutschen die Kacheln untereinander, statt sich zu quetschen. +Die Erst-Einrichtung wurde überarbeitet. +Sie sagte "vier Dinge" und stellte zwei ein. Jetzt sind es sechs +Schritte und drei Fragen: wohin, wie schnell, woher die Titel. Neu dabei: +der TMDb-Schlüssel gleich beim Einrichten statt versteckt, und der +Ablage-Ordner zeigt die Vorgabe an, statt leer zu bleiben. +Die Update-Adresse ist aus den Einstellungen verschwunden. +Updates kommen ohnehin immer von derselben Stelle. + +Aus 5.1.4: Das Update installiert sich wirklich. +Aus 5.1.3: Eigenes Fenster, Layout waechst mit. Aus 5.1.2: Rippy sagt Bescheid, wenn ein Update da ist. -Diese Karte hier ist der Beweis. In den Einstellungen gibt es dazu den -Knopf "Jetzt auf Updates prüfen". - Aus 5.1.1: Serien-Discs werden richtig erkannt. -Disc 2 von "Spartacus: Gods of the Arena" galt als der Film "Spartacus" -von 1960. Rippy fragt jetzt die Disc selbst. -Unverändert: Updates warten immer, bis kein Rip mehr läuft. +Unveraendert: Updates warten immer, bis kein Rip mehr laeuft. diff --git a/rippy-windows/package-lock.json b/rippy-windows/package-lock.json index 5241257..aeacb83 100644 --- a/rippy-windows/package-lock.json +++ b/rippy-windows/package-lock.json @@ -1,12 +1,12 @@ { "name": "rippy", - "version": "5.1.4", + "version": "5.1.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "rippy", - "version": "5.1.4", + "version": "5.1.5", "license": "UNLICENSED", "dependencies": { "electron-updater": "^6.8.9", diff --git a/rippy-windows/package.json b/rippy-windows/package.json index c1ab979..8ac3e28 100644 --- a/rippy-windows/package.json +++ b/rippy-windows/package.json @@ -1,7 +1,7 @@ { "name": "rippy", "productName": "Rippy", - "version": "5.1.4", + "version": "5.1.5", "description": "Rippy v5 — Disc-Ripping als eigenständiges Windows-Programm (KONZEPT-WINDOWS.md)", "main": "out/haupt/index.js", "author": "KrBrZ", diff --git a/rippy-windows/src/fenster/App.tsx b/rippy-windows/src/fenster/App.tsx index 80aaeda..0bae9d7 100644 --- a/rippy-windows/src/fenster/App.tsx +++ b/rippy-windows/src/fenster/App.tsx @@ -1079,12 +1079,12 @@ function Einstellungen({ verbindung, haupt }: { verbindung: Verbindung; haupt: H aufWechsel={(an) => void window.rippy.autostartSetzen(an)} label="Rippy mit Windows starten (Autostart im Benutzerkonto — kein Dienst, keine Adminrechte)" /> - setzen('updateUrl', w)} - /> + {/* Das Feld „Update-Adresse" ist am 01.09.2026 auf Zuruf des + Commanders verschwunden: Updates kommen immer vom Gitea, ein + Eingabefeld dafür war nur Ballast. Der Einstellungs-Schlüssel + `updateUrl` gilt weiterhin — wer ihn wirklich braucht, setzt + ihn in der Datenbank, und § 6.8 prüft ihn wie zuvor (nur + https://). */} {haupt !== null && (

Selbst-Update: {haupt.update.text}

@@ -1261,10 +1261,24 @@ function ErstEinrichtung({ verbindung }: { verbindung: Verbindung }) { }, ] - const schritte = ['Willkommen', 'Prüfung', 'Ordner', 'Automatik', 'Fertig'] + // Was Rippy an DIESER Maschine gemessen hat — die Grundlage der + // Preset-Empfehlung. Stand bisher nur in den Einstellungen und war + // deshalb unsichtbar (Commander-Fund 01.09.2026: „die alte Version konnte + // automatisch anhand der gescannten hardware encoder das beste preset + // wählen"). Sie konnte es, diese auch — man sah es nur nirgends. + const backends = werkzeuge?.backends ?? [] + const presets = werkzeuge?.presets ?? [] + const nurCpu = backends.length > 0 && backends.every((b) => b.startsWith('cpu')) + const EMPFEHLUNGEN: ReadonlyArray = [ + ['DVD', 'dvd'], + ['Blu-ray', 'bluray'], + ['4K-UHD', 'uhd'], + ] + + const schritte = ['Willkommen', 'Prüfung', 'Ordner', 'Qualität', 'Titel', 'Fertig'] return ( -
+
{schritte.map((name, i) => ( Rippy sichert deine DVDs, Blu-rays und Audio-CDs — erst verlustfrei, dann komprimiert.

Disc rein genügt: Rippy erkennt, was drauf ist, und sagt Bescheid.

Fertige Filme landen so abgelegt, dass Jellyfin, Emby, Kodi und Plex sie sofort erkennen.

-

Dieses Setup stellt vier Dinge ein und dauert eine Minute.

+

+ Rippy prüft gleich seine Werkzeuge und fragt dich danach drei Dinge: wohin, wie schnell, und + woher die Titel kommen. Dauert eine Minute — ändern kannst du alles später. +

)} @@ -1302,7 +1319,16 @@ function ErstEinrichtung({ verbindung }: { verbindung: Verbindung }) { {schritt === 2 && (

Wohin sollen fertige Filme, Musik und Abbilder?

-

{verbindung.einstellungen['ablage'] ?? ''}

+ {(verbindung.einstellungen['ablage'] ?? '').length > 0 ? ( +

{verbindung.einstellungen['ablage']}

+ ) : ( + // Vorher stand hier eine LEERE Zeile — man sah nicht, wohin + // Rippy legt, wenn man nichts wählt. Es gibt aber eine Vorgabe + // (kern/index.ts: Videos\Rippy im Benutzerprofil). +

+ noch nichts gewählt — dann nimmt Rippy „Videos\Rippy" in deinem Benutzerordner +

+ )} +

+ Rippy baut darin selbst die Struktur: Filme, Musik, ISO und roh. Ein Netzlaufwerk geht auch. +

)} {schritt === 3 && ( -
-

Wie viel soll Rippy allein entscheiden?

- +
+

+ Rippy sichert eine Disc immer erst verlustfrei. Danach kann es eine kleinere Fassung + berechnen — die kostet Zeit, spart aber viel Platz. +

+ einstellungSetzen('transcodeEnabled', an ? 'true' : 'false')} + label="Nach dem Rip automatisch komprimieren" + /> + + {/* Die Hardware-Empfehlung — gemessen, nicht geraten. */} +
+ {werkzeuge === null ? ( +

Encoder werden gemessen …

+ ) : backends.length === 0 ? ( +

+ Keine Encoder gemessen — ohne HandBrakeCLI bleibt es beim verlustfreien Rip. +

+ ) : ( + <> +
+ + AUF DIESER MASCHINE GEMESSEN: + + {backends.map((backend) => ( + + ))} +
+

+ Danach wählt Rippy von selbst — Grafikkarte vor CPU, wo es eine gibt: +

+
+ {EMPFEHLUNGEN.map(([name, typ]) => ( +
+

{name}

+

+ {presetEmpfehlung(typ, backends, presets) || DEFAULT_HB_PRESET} +

+
+ ))} +
+ {nurCpu && ( +

+ Nur CPU-Encoder gefunden — das Komprimieren dauert dann deutlich länger. Der + verlustfreie Rip ist davon nicht betroffen. +

+ )} + + )} +

- Alles Weitere — Presets je Disc-Typ, Sprachen, Medienserver, API-Schlüssel — steht unter - „Einstellungen". + Du musst hier nichts wählen. Unter „Einstellungen → Kompression" kannst du je Disc-Typ ein + eigenes Preset setzen — deine Wahl schlägt die Empfehlung immer.

)} {schritt === 4 && ( +
+

+ Woher sollen Titel, Jahr, Poster und Beschreibung kommen? Dafür braucht Rippy einen + kostenlosen TMDb-Schlüssel. +

+ einstellungSetzen('tmdbApiKey', w)} + /> +

+ Ohne Schlüssel rippt Rippy trotzdem — die Filme heißen dann so, wie die Disc sich selbst + nennt, und es gibt keine Poster. Nachtragen geht jederzeit unter „Einstellungen → + Metadaten". +

+
+ )} + + {schritt === 5 && (

Das war's. Disc einlegen — Rippy meldet sich.

+

+ Rippy lebt im Infobereich neben der Uhr: Fenster zu heißt weiterlaufen, beendet wird über + das Tray-Menü. +

{makemkvFehlt && (

Denk an MakeMKV: Ohne makemkvcon bleibt der Video-Weg zu (Einstellungen → Werkzeuge zeigt @@ -1426,8 +1519,13 @@ export default function App() { // § 6.9: Die Erst-Einrichtung läuft NACH der Installation, im Programm — // solange sie nicht abgeschlossen ist, ist sie die ganze Ansicht. + // + // `#einrichtung` erzwingt sie (RIPPY_START_BEREICH) — wie #einstellungen + // und #bibliothek. Ohne diesen Anker wäre der Wizard nach dem ersten + // Start nicht mehr zu fotografieren und damit nicht mehr zu prüfen. const setupOffen = - Object.keys(verbindung.einstellungen).length > 0 && verbindung.einstellungen['setup.done'] !== 'true' + window.location.hash === '#einrichtung' || + (Object.keys(verbindung.einstellungen).length > 0 && verbindung.einstellungen['setup.done'] !== 'true') const knopf = (ziel: Bereich, text: string): React.JSX.Element => (