Wydania

Historia zmian

## 3.1.87 — 2026-09-18 — kontrola integralności przy każdym starcie i skompilowany ElNotes

- ElPlayer: menu „Klatka” w przeglądarce serii otwiera wybraną klatkę w ELView oraz udostępnia „Popraw obraz” (rozjaśnianie, wyostrzanie, odszumianie i kadrowanie). Akceptowana korekta trafia do eksportowanej kopii, można przywrócić oryginał; raport HTML dokumentuje zastosowane korekty i sumę oryginału.
- Raport klatek ma klasyczny układ, nagłówek „Raport z nagrania …” i odnośnik www.evidsec.pl. Podpowiedzi pustych opisów nie pojawiają się na wydruku.
- Program przy każdym starcie sprawdza swoje pliki. Każde wydanie (Install, Portable ONEDIR i SFX, ElCommander, ElNotes, ElVoice, ElPlayer) ma podpisany manifest integralności z rozmiarem, sumą CRC32 i SHA-256 każdego pliku programu. Podpis powstaje tym samym kluczem wydawcy co manifesty aktualizacji, a program ufa wyłącznie kluczowi wkompilowanemu w siebie — przeliczenie sum po podmianie pliku nic nie da. Kontrola CRC32 biegnie w tle z obniżonym priorytetem dysku i nie opóźnia uruchomienia; zgodny wynik trafia tylko do dziennika zdarzeń, a podmieniony, ucięty albo brakujący plik jest wskazany z nazwy w ostrzeżeniu z zaleceniem ponownej instalacji.
- W oknie „O programie” przycisk „Integralność programu (SHA-256)” wykonuje pełną weryfikację SHA-256 wszystkich plików — wynik, który można przytoczyć w opinii. Pliki dopisywane po instalacji (dezinstalator, dzienniki, dane operatora, klucz Portable) nie są naruszeniem, a silnik Whisper w ElVoice, który można odznaczyć w instalatorze, jest sprawdzany tylko wtedy, gdy jest zainstalowany.
- ElNotes jest kompilowany do kodu maszynowego (Nuitka) zamiast pakowania kodu Pythona. W instalatorze nie ma już plików .py ani bytecode'u, który dało się zdekompilować, a opisy wewnętrznej logiki (docstringi) są usuwane z programu. Funkcje modułu i jego zawartość są takie same jak dotąd; pozostałe moduły i instalator przejdą tę zmianę po sprawdzeniu ElNotes w użyciu.

## 3.1.86 — 2026-09-18 — klatki na żądanie, protokół w raporcie i narzędzia materiału

- „Rozbij na klatki” indeksuje nagranie dopiero po kliknięciu „Uruchom”. Najpierw wybierasz materiał („Całe nagranie”, „Zakres klatek” albo zaznaczenie Od–Do) i zakres klatek, a dopiero potem ruszasz zadanie — wcześniej okno zaczynało czytać całe nagranie zaraz po otwarciu. W trakcie pracy widać pasek postępu z etapem (indeksowanie albo zapis) i liczbą klatek.
- Zadanie można wstrzymać albo zatrzymać, zmienić zakres klatek i wznowić: „Wznów” dopisuje do tej samej serii bez pytania o katalog. Klatki zapisane do chwili zatrzymania zostają na dysku, a niepełny indeks nadal otwiera się w przeglądarce.
- Raport HTML z przeglądarki klatek obejmuje bieżącą klatkę albo wybrany zakres. Raport zawiera protokół: datę i godzinę wykonania, nazwę i ścieżkę pliku źródłowego, opis zakresu i tabelę klatek (numer w nagraniu, czas, plik) oraz pola wypełniane ręcznie — miejsce zdarzenia, imię i nazwisko operatora, jednostkę, numer sprawy, czas zdarzenia i uwagi. Pola wchodzą na wydruk i do PDF.
- Narzędzia materiału („Ustaw read-only”, „Usuń read-only”, „Sprawdź read-only”, „Policz SHA-256”, „Podgląd struktury”) działają też bez otwartej sprawy. Wcześniej każde z nich kończyło się komunikatem „Najpierw wybierz katalog lub pliki” i z panelu wyglądało na zepsute. Teraz narzędzie pyta, czy wskazać pliki, czy katalog, pracuje na wskazanym materiale, a dziennik odnotowuje czynność jako wykonaną poza sprawą.

## 3.1.85 — 2026-09-17 — klatki: przeglądarka serii i zgodna lupa

- Lupa pokazuje dokładnie tę klatkę, która jest na ekranie. Podgląd odtwarzacza przewijał czas z dokładnością do milisekundy, więc przy nagraniach, w których czas klatki ma rozwinięcie okresowe (np. 12 klatek na sekundę, 0,166667 s), FFmpeg zwracał klatkę następną — lupa otwierała wtedy sąsiedni kadr. Odtwarzacz liczy teraz czas klatki w mikrosekundach, tak samo jak indeks klatek i lupa, a otwarcie lupy dodatkowo ustawia pozycję dokładnie na czasie widocznej klatki. Ta sama poprawka dotyczy kroku klatka po klatce i początku zapisywanego fragmentu.
- „Rozbij na klatki” i „Lupa / powiększenie” są na samej górze menu prawego przycisku myszy, nad ustawianiem znaczników Od–Do.
- Okno „Rozbij na klatki” prowadzi po kolei: najpierw wybór materiału („Całe nagranie” albo „Zakres klatek”, wypełniony znacznikami Od–Do), potem „Uruchom”, a po zakończeniu lub przerwaniu „Otwórz klatki”. Przerwana seria też daje się otworzyć — indeks opisuje ją jako niepełną, a zapisane klatki zostają na dysku.
- Nowa przeglądarka klatek: wybór zakresu i numeru klatki, suwak i strzałki, płynne powiększenie (kółko myszy, 1:1, dopasowanie, wpisanie procentu), przesuwanie obrazu Shift + lewy przycisk myszy, podgląd pikseli z odczytem RGB. Klatki wczytują się z wyprzedzeniem, więc przewijanie serii nie czeka na dysk.
- Zaznaczony fragment można powiększyć, zapisać jako osobny plik PNG, TIFF albo JPG, wydrukować i wyeksportować do PDF. Bez zaznaczenia te same przyciski działają na całej klatce. Raport HTML z JavaScriptem obejmuje wybrany zakres klatek — z sumami SHA-256, numerowanymi znacznikami i wydrukiem do PDF, tak jak raport ElView.

## 3.1.84 — 2026-09-17 — prostszy ElPlayer i dokładny zapis klatek

- Uproszczono główne okno odtwarzacza: wspólny obszar pracy, formularz analizy i zakres Od–Do, narzędzia dostępne po zatrzymaniu klatki.
- Przytrzymanie strzałki przewija kolejne klatki; puszczenie zatrzymuje przewijanie bez kolejki zaległych kroków.
- Narzędzia kadru udostępniają płynne powiększenie, dokładny procent skali, przesuwanie obrazu, wybór fragmentu oraz porównanie przed/po dla rozjaśniania, wyostrzania i odszumiania. Zmiany wymagają akceptacji przed zapisem lub drukiem.
- Zapis poprawionego obrazu obsługuje PNG, BMP, JPG i TIFF. JPEG jest formatem stratnym; pozostałe formaty zachowują piksele wyniku bez strat kompresji.
- „Rozbij na klatki” zastępuje eksport zaawansowany: zakres klatek, odstęp, format i indeks JSON, postęp oraz anulowanie.
- Menu kontekstowe zawiera „Usuń znaczniki Od–Do”.
- Naprawiono zapis JPG przy końcu nagrania i usunięto zaokrąglanie czasu do milisekund. Zapis jest atomowy, sprawdzany przed zastąpieniem pliku; brak obrazu nie jest uznawany za sukces na podstawie starego pliku. Raport uwzględnia czas rzeczywistej ostatniej klatki.

## 3.1.79 — 2026-09-16 — pełny widok dokumentu, komentarze i historia wersji ElNotes

- Edytor HEX uruchomiony dla bieżącej karty ElNotes ma przełącznik „Bajty HEX / Cały dokument”. Widok dokumentu pokazuje pełną logiczną treść tylko do odczytu, zachowuje polskie znaki i umożliwia kopiowanie zaznaczenia.
- Wyszukiwanie „Treść dokumentu” automatycznie otwiera pełny widok, przewija do trafienia i podświetla dokładny zakres. Wynik nadal jest zaznaczany także w bieżącej karcie ElNotes.
- Duże treści są wstawiane porcjami po 64 KiB. Panel ma przewijanie pionowe i poziome bez kosztownego zawijania bardzo długich ciągów, dzięki czemu dane Base64 i długie wiersze logów nie blokują okna.
- Operacje zależne od offsetu, w tym przejście do pozycji i wynik wyszukiwania surowych bajtów, przełączają panel z powrotem na widok HEX.
- ElNotes zapisuje w pakiecie ELJ komentarze przypięte do zaznaczonych fragmentów. Panel komentarzy pozwala przejść do fragmentu, oznaczyć wpis jako rozwiązany, ponownie go otworzyć albo usunąć; znaczniki przesuwają się razem z edytowanym tekstem.
- Przy zapisie ELJ tworzona jest historia treści dokumentu z kontrolą SHA-256 i pomijaniem identycznych kopii. Panel „Wersje” pokazuje wewnętrzne wersje ELJ oraz kopie .bak, udostępnia podgląd i pozwala otworzyć wybraną wersję w nowej karcie.
- Dolny pasek ElNotes stale pokazuje rodzinę i rozmiar czcionki aktywnej karty. Wskaźnik aktualizuje się po zmianie czcionki, rozmiaru i po otwarciu dokumentu ELJ.
## 3.1.78 — 2026-09-15 — czytelny pasek Tekst i wyszukiwanie treści w HEX

- Pasek „Tekst” w ElNotes ma układ wybrany przez użytkownika: trzy opisane grupy „Czcionka i rozmiar”, „Styl” i „Akapit”. Przyciski są większe, a wyrównanie do lewej, środka, prawej i pełne justowanie korzysta z rysowanych ikon niezależnych od czcionki systemowej.
- Usunięto przyczynę nieczytelnych symboli: wspólny mechanizm wyglądu dodawał domyślną ikonę wyboru przed każdym literowym przyciskiem. Przyciski paska Tekst wyłączają tę automatyczną dekorację, zachowując własne jednoznaczne oznaczenia.
- Edytor HEX otwarty dla aktywnej karty udostępnia domyślny tryb „Treść dokumentu”. Przeszukuje logiczny tekst notatki także wtedy, gdy plik ELJ przechowuje go skompresowanego albo szyfruje cały pakiet; wyszukiwanie nie rozróżnia wielkości liter, obsługuje polskie znaki, przechodzi do kolejnych trafień i zaznacza wynik w bieżącej karcie.
- Surowe wyszukiwanie HEX oraz UTF-8, UTF-16 LE i CP1250 pozostaje dostępne. Pierwsze wyszukiwanie bajtowe uwzględnia offset 0. Kontrola źródła korzysta dodatkowo z próbkowego SHA-256, dzięki czemu wykrywa szybką podmianę pliku o tym samym rozmiarze nawet przy niezmienionym znaczniku czasu systemu plików.
## 3.1.77 — 2026-09-15 — narzędzia bieżącej notatki i pasek Tekst

- Polecenie „Otwórz w edytorze HEX” otwiera bieżący zapisany plik ElNotes. Dla notatki z osadzonym obrazem pokazuje bajty całego pakietu ELJ; przy niezapisanych zmianach prosi o zapis przed otwarciem. Wybór dowolnego innego pliku nadal jest dostępny, gdy nie ma bieżącej ścieżki.
- OCR korzysta z obrazu wstawionego do aktywnej notatki ELJ. Przy jednym obrazie wybiera go automatycznie, przy wielu pozwala wskazać właściwy; menu prawego przycisku na obrazie ma polecenie „OCR tego obrazu”. Rozpoznany tekst wraz ze źródłem, sumą SHA-256 i językiem jest dopisywany do tej samej karty. OCR zewnętrznego obrazu lub PDF nadal może otworzyć wynik w nowej karcie.
- Karta ElNotes ma menu prawego przycisku ze zmianą nazwy i zamknięciem. Nazwa karty jest zapisywana w ELJ; nie zmienia nazwy pliku na dysku.
- Nowy pasek i menu „Tekst” skupiają wybór czcionki, powiększenie, rozmiar zaznaczenia, kolor, pogrubienie, kursywę, podkreślenie, przekreślenie oraz wyrównanie do lewej, środka, prawej i pełne justowanie. Te same opcje są dostępne w menu kontekstowym edytora. Formatowanie jest zachowywane w metadanych ELJ; wizualne justowanie nie dopisuje spacji do treści notatki.

## 3.1.76 — 2026-09-12 — ElTracker, ElNotes i aktualizacje

- Wszystkie wydania EvidLock (Install i trzy Portable) oraz ElCommander, ElNotes, ElVoice i ElPlayer sprawdzają własny, podpisany kanał aktualizacji po uruchomieniu. Gdy dostępna jest nowsza wersja właściwa dla tego wydania, pojawia się komunikat z jej numerem i możliwością pobrania; brak sieci nie zatrzymuje uruchamiania.
- ElTracker: przycisk Przerwij i postęp zabezpieczania telefonu oraz analizy, stronicowanie dużych wyników, oś czasu z filtrem kategorii i przejściem do pliku źródłowego. Opcjonalny odczyt prywatnych baz Androida działa wyłącznie na urządzeniu z istniejącym root i nie zmienia telefonu.
- Raport ElTrackera zawiera rzeczywiste nazwy plików i aplikacji, frazy, historię przeglądania, dostępne wersje Androida/iOS, zakres analizy i pominięte źródła. HTML pozwala wyszukiwać, filtrować, sortować i eksportować CSV; pełne dane są też dostępne w CSV, XLSX, JSON i PDF.
- ElNotes otwiera duże logi fragmentami, filtruje frazy, daty i poziomy zdarzeń oraz śledzi dopisywane wiersze bez wczytywania całego pliku. Edytor HEX jest dostępny z menu, palety poleceń i menu kontekstowego; oferuje stronicowy odczyt, wyszukiwanie, inspektor danych, kolorowanie znanych struktur, deklaratywne wzorce JSON i zapis z kopią bezpieczeństwa. Wzorce ElNotes nie są zgodne z językiem .hexpat programu ImHex.
- Aktualizacja ElPlayera i ElVoice dochodzi do końca. Instalator prosi Windows o zamknięcie modułu, a ElPlayer odpowiadał na to pytaniem „Czy na pewno chcesz zamknąć ElPlayer?” i czekał na kliknięcie. Instalator rezygnował po około pół minuty i kończył się komunikatem o przerwanej instalacji. Zamknięcie żądane przez Windows — instalator aktualizacji, wylogowanie, zamykanie komputera — nie zadaje już tego pytania: moduł zapisuje ustawienia i pozycję nagrania, po czym zamyka się sam. Zamknięcie okna przez operatora nadal prosi o potwierdzenie, a otwarta sprawa nadal wstrzymuje zamknięcie aplikacji.
- Nieudana aktualizacja modułu nie psuje już zainstalowanej wersji. Instalator czyścił katalog _internal przed skopiowaniem nowych plików, więc przy działającym module usuwał wszystko poza plikami zablokowanymi, a wycofanie instalacji tego nie przywracało — moduł przestawał się uruchamiać. Teraz instalator sprawdza najpierw, czy w katalogu programu nie działa żaden plik EXE (również narzędzia takie jak FFmpeg czy 7-Zip). Jeśli działa, pokazuje komunikat z możliwością ponowienia i zostawia dotychczasowe pliki nietknięte.

## 3.1.75 — 2026-09-11 — komunikaty zawsze nad oknami programu

- ElPlayer nie zawiesza się już po wybraniu pliku na pełnym ekranie. Po wskazaniu nagrania, które było już wczytane, komunikat „Ten plik jest już wczytany…” otwierał się pod oknem pełnego ekranu i blokował wszystkie przyciski, więc obraz wyglądał na zamrożony. Komunikaty ElPlayera, w tym pytanie o zamknięcie, otwierają się teraz nad pełnym ekranem, a ponowne zamknięcie okna w trakcie pytania nie otwiera drugiego, identycznego pytania.
- Poprawka dotyczy wszystkich wydań (Install, Portable, ElCommander, ElNotes, ElVoice, ElPlayer) i wszystkich komunikatów. Okno z pytaniem lub informacją pokazywało się tylko na chwilę, a potem chowało się pod oknem ustawionym „zawsze na wierzchu”: pełnym ekranem, oknem modułu, mini-odtwarzaczem ElVoice, formularzem albo listą nagrań. Gdy w programie jest otwarte takie okno, komunikat pozostaje nad nim, dopóki go nie zamkniesz. Dotyczy to też standardowych okien Windows: komunikatów, wyboru pliku i wyboru koloru.
- Ponowne wybranie modułu, który już działa, przywraca jego okno i wyciąga je na wierzch — także zminimalizowane albo przykryte innym programem. Wcześniej pojawiał się tylko komunikat „program już działa”, a okno zostawało zminimalizowane. Komunikat pokazuje się już tylko wtedy, gdy okna nie da się aktywować, i nie chowa się pod ekranem ładowania (wcześniej ekran ładowania zatrzymywał się na 38%, a komunikat był niewidoczny).
- Okna „Wprowadź klucz” (wybór trybu licencji, wpisanie klucza produktu, przedłużenie FULL-DEMO) i komunikaty o kluczu pozostają na wierzchu, dopóki nie odpowiesz — również nad pełnym ekranem ElPlayera albo innym oknem „zawsze na wierzchu” innego programu EvidLock. Okno wpisywania klucza otwiera się na środku ekranu, a nie w jego lewej górnej części.
- Błąd bezpiecznej kopii Portable pokazuje się na pierwszym planie, a jego tekst nie jest już wyrównany do prawej.

## 3.1.74 — 2026-09-11 — aktualizacja działa do końca i pokazuje każdy etap

- Aktualizacja wersji instalowanej kończy się instalacją. Wcześniej aktualizator uruchamiał instalator całkowicie po cichu, a sam nadal działał z katalogu programu. Instalator nie mógł podmienić jego pliku, przerywał się bez komunikatu i przywracał poprzednią wersję, więc po kliknięciu „Tak” pozornie nic się nie działo.
- Instalator zamyka pozostawione procesy aktualizatora z katalogu programu, także gdy aktualizację uruchomiła wersja 3.1.72 lub 3.1.73. Podczas takiej cichej aktualizacji pokazuje okno „Aktualizacja EvidLock”, po zakończeniu uruchamia EvidLock ponownie, a po błędzie przywraca i uruchamia dotychczasową wersję.
- Aktualizator pokazuje okno postępu pobierania (MB i procent), w pytaniu podaje rozmiar aktualizacji, a instalator uruchamia dopiero po swoim zamknięciu — z paskiem postępu, widocznymi komunikatami i dziennikiem instalacji. Okna aktualizatora pojawiają się na wierzchu, działa tylko jeden aktualizator naraz i trwająca instalacja nie jest uruchamiana drugi raz.
- Po ponownym uruchomieniu EvidLock pokazuje wynik: „EvidLock został zaktualizowany do wersji …” albo przyczynę niepowodzenia ze ścieżką dziennika instalacji. Każdy błąd aktualizacji trafia do dziennika błędów aplikacji (.ellogs) i wskaźnika błędów.
- Portable: okno postępu pobierania w programie. Wymiana czeka na zamknięcie EvidLock bez 5-minutowego limitu, zapisuje wynik i zawsze uruchamia program ponownie. Wymiana katalogu ONEDIR przy zablokowanym pliku kończy się teraz w całości albo wcale i przywraca poprzednią wersję; wcześniej mogła zostawić częściowe kopie katalogu _runtime.

## 3.1.73 — 2026-09-11 — tryb wysokiego kontrastu, klucz Portable po aktualizacji i aktualna historia zmian

- Tryb wysokiego kontrastu: po kliknięciu „Kontrast” dashboard znów buduje się w całości — z przyciskami Sprawa, Tryb admin i Kontrast, kartami startowymi, panelem sprawy i narzędziami. Wcześniej w palecie kontrastowej brakowało kolorów wspólnych menu, więc widok zatrzymywał się po przycisku „Sprawa” i pozostawał pusty. Test motywów w każdej kompilacji sprawdza teraz włączanie i wyłączanie kontrastu w skórkach Graphite i Jasny.
- Portable ONEDIR i SFX: pierwsze uruchomienie po aktualizacji przywraca z kopii poprzedniej wersji (.evidlock-previous-…) klucz ELP1, licznik uruchomień i dziennik błędów, które Portable przechowuje w katalogu _runtime. Wcześniej wymiana runtime odkładała je razem ze starym katalogiem, więc po aktualizacji z 3.1.72 program ponownie prosił o klucz. Istniejące pliki nie są nadpisywane, a kopia poprzedniej wersji pozostaje nienaruszona.
- Uzupełniono historię zmian aplikacji głównej i modułów o wydanie 3.1.72 oraz bieżące poprawki.
- Gotowe EXE korzystają z historii wbudowanej w daną kompilację. Stary CHANGELOG.md pozostawiony obok programu albo w katalogu roboczym nie zasłania już nowych wpisów, również przy otwieraniu historii offline.
- Wspólny numer 3.1.73 dla Install, trzech wariantów Portable Light oraz ElCommander, ElNotes, ElVoice i ElPlayer. Aktualizator rozpoznaje tę wersję jako nowszą od 3.1.72.

## 3.1.72 — 2026-09-11 — licencje, aktualizacje, interfejs i dokumentacja

- SUITE (dawne ALL) obejmuje aplikację i moduły bez współpracy przez TeamServer; PRO obejmuje SUITE i TeamServer. Nowy klient odrzuca klucze SMALL/FULL. Nie zmienia to zachowania dawnych klientów offline.
- Samodzielne ElCommander, ElNotes, ElVoice i ElPlayer wymagają SUITE albo PRO. Poprawiono metadane dystrybucji modułów, które mogły omijać bramę licencyjną.
- Aktualizacje online i offline weryfikują podpis Ed25519, rozmiar oraz SHA-256 paczki. ONEDIR wymienia cały runtime, zachowuje dane i tworzy kopię poprzedniej wersji.
- Większy wskaźnik integralności: pierścień 176 px, czytelna wartość procentowa i oddzielny tytuł. Wynik opisuje kompletność czynności, a nie procent poprawnych hashy.
- ElVoice: Reset przeniesiony obok Wyczyść. ElPlayer: niebieski przycisk odtwarzania dopasowany do ElVoice.
- Poprawki TeamServer, konfiguracji usługi Windows i współpracy klientów. Sprawdzono lokalnie HTTPS/PostgreSQL, MFA, role, konflikty, audyt, kopię i odtworzenie bazy oraz restart usługi.
- Nowa dokumentacja techniczna i 23 zrzuty ekranu. Install zawiera pełny zestaw modułów; Portable Light nie zawiera ElVoice, ElPlayer ani ElSSH.
- Opublikowano osiem produktów i sześć kanałów aktualizacji. Zaktualizowano generator, panel SUITE/PRO i strony pobierania. EXE pozostają bez certyfikatu Authenticode; podpis aktualizacji jest osobnym mechanizmem.

## 2026-09-09 — ELPlayer: poprawka wybierania chorągiewek

- Klikanie działa na całym widocznym kształcie flagi, również na czubku, w oknie i na pełnym ekranie.
- Samo kliknięcie nie przesuwa czasu znacznika. Przeciąganie zachowuje punkt uchwycenia flagi.
- Żółte obramowanie wskazuje chorągiewkę sterowaną strzałkami. Wybrana flaga nie znika podczas edycji klawiaturą na pełnym ekranie.

## 2026-09-09 — ELVoice: mini-odtwarzacz Studio i eksport zaznaczenia

- W sekcji Odsłuch i korekcja przycisk Tryb odtwarzacza otwiera małe okno Studio, zawsze na wierzchu, z własną sesją audio, playlistą, dodawaniem utworów, poprzednim/następnym utworem, play/pauzą, stopem i głośnością. Przypnij zamyka mini-odtwarzacz i przywraca panel.
- Dziesięciopasmowy equalizer z presetami Płaski, Mowa, Bass i Mniej syczenia działa na żywo bez restartu FFplay. Fala jest obliczana w tle i nie opóźnia uruchomienia odsłuchu.
- Menu spektrogramów A/B, również odpiętych, zawiera Zapisz zaznaczenie jako…: MP3, WAV, OGG, FLAC i M4A. Eksport z widoku po zmianach używa przetworzonej ścieżki.
- Skrypty wydania: moduels_install/build_module.ps1 (EXE i instalator), moduels_install/package_module_portable.py (katalog portable i ZIP).

## 2026-09-09 — ELPlayer: precyzyjne chorągiewki i ikony formularza

- Klikniętą chorągiewkę Od/Do można przesuwać strzałkami ←/→ o jedną klatkę, także przy zmiennym klatkażu. Pozycja odtwarzania i drugi znacznik pozostają bez zmian; znaczniki nie mogą się minąć.
- Przywrócono graficzne ikony Play i Stop w formularzu analizy, niezależne od czcionki systemowej.

## 2026-09-09 — ELPlayer: synchronizacja i pełny ekran

- Obraz korzysta z rzeczywistych czasów klatek, również przy VFR i po przewijaniu. Start czeka na dźwięk, a wznowienie po pauzie odtwarza obie ścieżki od tej samej pozycji.
- Usunięto pomijanie początku audio przy odczycie potoku FFplay.
- Pełny ekran uwzględnia skalowanie DPI, zachowuje proporcje i nie zwiększa rozdzielczości dekodowania do rozmiaru monitora.
- Linia pozycji, znacznik i pasek sterowania chowają się po 2,5 s bez ruchu myszy; wejście kursorem lub ruch ponownie je pokazują. Dotyczy również podglądu Od–Do.

# EvidLock - dziennik zmian

## 2026-09-07 — ElVoice: suwaki poprawy odsłuchu, profil szumu i korektor

- Zakładka **Odtwarzanie** ma nową, zwijaną sekcję **Poprawa odsłuchu**: wybór kanału (stereo / lewy / prawy), balans L–P, wyrównanie głośności, redukcja szumu i dziesięciopasmowy korektor graficzny. Filtry idą wyłącznie do FFplay — nagranie, wykresy, analizy, raporty i pliki eksportu powstają z niezmienionego materiału i ten warunek jest napisany wprost w nagłówku sekcji.
- **Redukcja szumu** pracuje na profilu zdejmowanym z nagrania: operator powiększa widok na fragment samej ciszy i klika „Pobierz profil z widoku”. Pomiar liczy poziom szumu i 15 pasm dokładnie tam, gdzie ma je `afftdn` (80 Hz, dalej ×1,5 + 5 Hz), a wynik — na przykład −58,4 dBFS — widać obok przycisku. Profil dotyczy jednego nagrania i znika przy otwarciu następnego.
- Suwak **Siły redukcji** jest zapasem nad zmierzonym progiem, bo to on decyduje o wyniku. Pomiar na różowym szumie z sygnałem mowopodobnym: przy progu ustawionym dokładnie na zmierzonym poziomie ubywa 2,2 dB szumu, przy zapasie 12 dB — 4 dB kosztem 2 dB pasma mowy, przy 24 dB — 18 dB kosztem 5,9 dB. Sama zmiana `nr` bez podniesionego progu nie robi prawie nic, dlatego jeden suwak steruje obydwoma. Drugi suwak to **Wygładzanie** (`gs`, 0–50), czyli ile sąsiednich prążków uśrednia filtr.
- Bez pobranego profilu redukcja przechodzi w tryb śledzenia szumu (`tn=1`) — słabszy, ale nigdy nie pomyli się o 20 dB co do poziomu.
- **Korektor graficzny** ma dziesięć pionowych suwaków (31 Hz – 16 kHz, ±12 dB) i cztery ustawienia: Płasko, Mowa, Basy, Bez syku. Każde ruszone pasmo to jeden biquad; pasma na zerze nie trafiają do łańcucha w ogóle. Ustawienie „Mowa” razem z redukcją 18 dB usunęło w pomiarze 14,2 dB szumu przy ubytku 2,6 dB w paśmie 200–4000 Hz — czyli korektor odrabia część tego, co zabiera odszumianie.
- FFplay dostaje łańcuch filtrów przy starcie, więc każda zmiana oznacza restart w tej samej pozycji. Suwaki są opóźnione o 260 ms, przez co przeciąganie kończy się jednym restartem, a nie kilkudziesięcioma. Ustawienia dotyczą obu sesji — oryginału i wersji po odszumieniu — żeby porównanie „przed/po” słychać było w tych samych warunkach.
- Przełącznik `CTkSwitch` dostał własną gałąź stylowania. Wspólna gałąź z polem wyboru podawała mu `hover_color`, którego ta klasa nie przyjmuje, więc pierwszy przełącznik w module ELVoice przerywał budowę okna.
- Weryfikacja: 269 testów ELVoice, odtwarzacza i serwisu — OK, w tym 16 nowych (łańcuch filtrów, zakresy przyjmowane przez FFmpeg, restart sesji tylko przy realnej zmianie, pomiar profilu, sekcja w oknie, pobranie profilu w tle). Cały łańcuch sprawdzony na żywym FFmpeg 8.1.2; Ruff `E9,F,B` bez nowych zgłoszeń.

## 2026-09-07 — ElVoice: whisper.cpp w paczce, do zaznaczenia w instalatorze

- Samodzielne wydanie ElVoice zawiera silnik whisper.cpp i model mowy `ggml-small-q5_1.bin` (190 MB) w `_internal/tools/whisper`. Dotąd moduł miał tylko FFmpeg, więc „Transkrypcja słowna” kończyła się komunikatem o brakującym komponencie, którego samodzielne wydanie nigdzie nie oferowało — transkrypcji nie dało się wykonać w ogóle.
- Kreator instalacji pokazuje komponent „Whisper — transkrypcja mowy offline (model 190 MB, opcjonalny)”, domyślnie zaznaczony. Odznaczenie pomija całe drzewo `tools\whisper`, czyli instalacja jest o prawie 200 MB lżejsza, a moduł działa w całości poza transkrypcją słowną. Instalator zapisuje wtedy w `components.ini` `whisper=0`, więc manifest opisuje to, co faktycznie leży na dysku.
- Spec PyInstallera odmawia zbudowania ElVoice, gdy brakuje `whisper-cli.exe` albo gdy model ma inną sumę SHA-256 niż ta, którą weryfikuje aplikacja przy starcie transkrypcji. Niezgodny model dawałby gotowy pakiet, który cicho odmawia pracy.
- Nowy test buildu `--evidlock-elvoice-whisper-smoke-test` nie sprawdza obecności plików, tylko przepuszcza jednosekundową próbkę WAV przez pełną ścieżkę FFmpeg → whisper.cpp i porównuje sumę SHA-256 użytego modelu z dołączonym. Build modułu ElVoice zatrzymuje się, gdy silnik nie ruszy.
- Weryfikacja modelu nie liczy już SHA-256 przy każdym pytaniu o gotowość silnika. Wynik jest pamiętany dla ścieżki, rozmiaru i czasu modyfikacji pliku, więc podmiana albo uszkodzenie modelu nadal wymusza pełne przeliczenie. Wcześniej samo otwarcie okna transkrypcji czytało 190 MB, a pełny przebieg — trzy razy.
- Komunikat o brakującym silniku i opis w dokumentacji technicznej nie wymieniają już edycji programu. Mówią wprost, że transkrypcja wymaga komponentu Whisper i że wystarczy uruchomić instalator ponownie i go zaznaczyć.
- Weryfikacja: 118 testów (pakowanie modułów, ELVoice, rejestr modułów, tryby samodzielne) — OK; test dymny transkrypcji przeszedł ze źródeł i na zamrożonym `ElVoice.exe`. Podział plików sprawdzony jednorazowym instalatorem testowym: z `/COMPONENTS="core"` katalog `tools\whisper` w ogóle nie powstaje, z `/COMPONENTS="core,whisper"` wchodzi razem z modelem.

## 2026-09-07 — ELVoice: naprawa zacinania przy powiększaniu i przesuwaniu

- Przeciąganie wykresu przestało blokować moduł. Powodem było liczenie pełnego FFT dla każdego piksela przy każdym zdarzeniu myszy: w zakresach poniżej ~22 s kosztowało to 69 ms na klatkę (14 kl./s), a wątek interfejsu był zajęty bez przerwy.
- Gest rysuje teraz podgląd o mniejszej liczbie kolumn, a ostry obraz powstaje 140 ms po zatrzymaniu myszy albo po jej puszczeniu. Struktura czasu i częstotliwości podglądu jest ta sama, zmienia się tylko gęstość kolumn.
- Fala trafia do Tk jako obraz nieprzezroczysty. Przy głębokim powiększeniu maska była prawie pusta i Tk mieszał alfę piksel po pikselu — samo `PhotoImage` kosztowało 30 ms zamiast 3,6 ms. Linia zera jest teraz wrysowana w obraz.
- Bufor obrazu Tk jest odtwarzany tylko przy zmianie rozmiaru, a nie co klatkę. Kursor odtwarzania poza widokiem jest przycinany do wykresu — przy powiększeniu 6000× lądował kilka milionów pikseli poza kanwą.
- Zmiana rozmiaru okna korzysta z tej samej ścieżki podglądu co przeciąganie.
- Pomiar na kanwie 1576×741, nagranie 30 min: fala 42,9 → 19,6 ms/klatkę, spektrogram 69,3 → 25,7 ms/klatkę. Najgorszy przypadek w całym zakresie powiększenia to 29 ms (39 kl./s) wobec 76 ms wcześniej.
- Korekta poprzedniego wpisu: podane tam 8 ms i 10–24 ms/klatkę dotyczyły kanwy 1572×374 i pomijały zakresy liczone z FFT na żywo. Powyższe liczby są z kanwy w rozmiarze okna modułu.
- Weryfikacja: 37 testów ELVoice — OK; Ruff `E9,F,B` bez błędów; test ciągłego przeciągania na nagraniu 30 min bez pozostałości w katalogu roboczym.

## 2026-09-06 — ElPlayer: głos zsynchronizowany z obrazem

- Obraz równa się teraz do zegara dźwięku, a nie do własnego usypiania. Każda klatka ma bezwzględny termin wyświetlenia liczony od punktu odniesienia, więc spóźnienia dekodera nie sumują się. Wcześniej każda klatka spała „swój” interwał od momentu zdekodowania i po minucie odtwarzania głos wyprzedzał obraz o setki milisekund.
- Dokładne przewijanie dźwięku przejął ffmpeg: strumień idzie potokiem ffmpeg → ffplay jako WAV zaczynający się dokładnie w miejscu przewinięcia. Własne `-ss` ffplay trafiało wyłącznie w klatkę kluczową, więc przy grupie obrazów liczonej w sekundach głos startował nawet kilka sekund przed obrazem.
- Zegar dźwięku czytany jest z linii stanu ffplay i uwzględnia bufor karty dźwiękowej, czyli pokazuje to, co właśnie słychać. Drobne różnice są dociągane łagodnie, skok (przewinięcie, zacięcie systemu) przestawia punkt odniesienia od razu.
- Klatki, których termin minął, są pomijane — najwyżej pięć z rzędu — zamiast ciągnąć opóźnienie do końca nagrania. Limit zostawia obraz na wolnej maszynie zamiast czarnego płótna.
- Zegar szybszy niż czas rzeczywisty (maszyna bez urządzenia dźwiękowego, gdzie SDL połyka strumień w próżni) jest odrzucany — obraz wraca wtedy na czas ścienny i nadal idzie w tempie nagrania.
- Wyciszenie, zmiana głośności, ścieżki, kanału i prędkości oraz przełączenie panelu w widoku dzielonym zakładają zegar od nowa. Panel grający bez dźwięku idzie po czasie ściennym.
- Podgląd zakresu pracuje na tych samych terminach klatek. Przy zmienionej prędkości jego pozycja szła dotąd w innym tempie niż obraz i koniec zakresu wypadał w złym miejscu.
- Weryfikacja: 84 testy GUI ElPlayera, 10 testów wydajności (w tym trzy nowe na pętli dekodera: dotrzymywanie terminów, nadrabianie zacięcia, podążanie za dźwiękiem) i 60 testów serwisu (w tym pięć nowych na potoku i odczycie zegara) — OK.