Интерактивный визуализатор бинарных файлов
Байт-о-скоп (Byte-o-scope)
Автор: pav13 (pav13@mail.ru)Примечание: Часть кода была сгенерирована или доработана с использованием ИИ.Байт-о-скоп (Byte-o-scope) — интерактивный визуализатор бинарных файлов, преобразующий последовательности байтов в изображения.
Основные возможности:
- Визуализация файлов любого размера (КБ - ГБ) с тайловым рендерингом
- Более 20 встроенных палитр для анализа
- Поддержка многобайтовых форматов (RGBA, RGB, целые числа, float)
- Интерактивный просмотр с масштабированием и панорамированием
- Информационная панель с детализацией байтов
- Панорамный вид для навигации
- Экспорт в PNG
- Сравнение файлов через XOR
- Сохранение/загрузка настроек
- Темная/светлая темы
Требования:
Python 3.6+
PyQt5, numpy, psutil
Установка зависимостей:
pip install PyQt5 numpy psutil
Запуск:
python byte-o-scope.py
Дополнительная информация:
- При первом запуске скрипт предложит установить недостающие зависимости
- Поддерживается drag-and-drop (перетаскивание файлов в окно)
- Работает на Windows, Linux, macOS
Левая панель (Основные настройки):
- Файл: Открыть, Сравнить, Сохранить/Загрузить настройки, Экспорт PNG, Сброс, Переключение темы
- Палитры: Однобайтовые/битовые и многобайтовые палитры
- Регион: Начало (адрес), Длина (0 = весь файл), переключение hex/dec
- Отображение: Режим ширины (Ручной/Авто), Ширина, Масштаб, Автомасштаб
Центральная панель (Просмотр):
- ЛКМ на пикселе — фиксация информации о байте
- ПКМ + перемещение — панорамирование
- Колесо мыши — изменение масштаба
- Ctrl + Колесо — изменение ширины (в ручном режиме)
Правая панель (Инструменты):
- Информация о байте (адрес, hex, ASCII, биты)
- Зеркальное отражение (горизонтальное/вертикальное)
- Настройки текущей палитры (для настраиваемых)
- Панорама (overview) для навигации
- Настройки производительности
Однобайтовые/битовые палитры:
- Оттенки серого — значение байта как интенсивность
- Тепловая/Термальная — градиентные карты
- Вирдис/Плазма/Радуга/HSV — цветовые градиенты
- Нули/Единицы — 0 - синий, 255 - желтый
- Не-Ноль — все ненулевые - зеленый
- Битовые плоскости — отображение конкретного бита
- Полосы энтропии — группировка по диапазонам
- Частота байтов — окраска по частоте встречаемости
- Повторы — выделение часто повторяющихся байтов
- Пользовательская — собственные цветовые правила
Многобайтовые палитры:
- RGBA/ABGR/RGB — цветовые форматы
- Integer 8/16/32/64 — целые числа (с настройкой signed/unsigned)
- Float 32/64 — числа с плавающей точкой
Настройки многобайтовых палитр:
- Порядок байтов (big/little)
- signed/unsigned для целых чисел
- Порядок цветов для RGB
Пользовательская палитра:
- Задание цветов для диапазонов значений (0-255)
- Управление правилами: добавление, удаление, настройка
- Цвет по умолчанию для значений вне диапазонов
- Правила применяются сверху вниз
Ctrl+O — открыть файл
Ctrl+S — сохранить настройки (.bos)
Ctrl+L — загрузить настройки
Ctrl+R — сбросить настройки
Ctrl+E — экспорт в PNG
Ctrl+X — сравнить два файла
Открытие файлов:
- Меню "Открыть" (Ctrl+O)
- Drag-and-drop
- Меню последних файлов
- Автоматический поиск .bos файлов настроек
Сохранение/загрузка настроек:
- Настройки сохраняются в .bos файл (JSON формат)
- Файл сохраняется рядом с исходным файлом
- Автоматическая загрузка при открытии файла
- Включает все параметры визуализации
Экспорт в PNG:
- Точное изображение без сглаживания
- Сохранение всех текущих настроек
- Диалог выбора места сохранения
- Имя по умолчанию соответствует исходному файлу
Сравнение файлов (XOR):
- Побайтовое сравнение двух файлов
- Визуализация различий
- Открывается диалог выбора двух файлов
- Полезно для нахождения различий между версиями
Список последних файлов:
- До 8 последних файлов
- Очистка списка
- Закрытие текущего файла (возврат к демо)
- Автоматическое удаление несуществующих файлов
Настройки производительности (ползунок):
- Размер тайла: 128-1024 пикселя
- Запас предзагрузки: 1-6 тайлов
- Макс. размер кэша: 180-4000 МБ
Рекомендации по настройкам:
- Малые файлы (<100 МБ) - сдвиг влево (экономия памяти)
- Большие файлы (ГБ) - сдвиг вправо (плавная работа)
- Изменения применяются с задержкой 1 секунда
- При смене настроек кэш очищается
Индикаторы производительности:
- Потребление оперативной памяти
- Состояние занятости (рендеринг, экспорт)
- Индикатор в заголовке окна
Архитектура программы:
- Visualizer - главное окно
- CanvasWidget + TileManager - тайловый рендеринг
- PaletteManager - управление палитрами
- PanoramaWidget - панорамный вид
- ControlsPanel - панель управления
- ThemeManager - темы оформления
- WindowSettingsManager - сохранение настроек
Оптимизации:
- Memory-mapping (mmap) для больших файлов
- Рендеринг только видимой области
- NumPy для векторных операций
- LRU-кэш тайлов с автоматической очисткой
- Prefetching (предзагрузка тайлов)
Медленная работа/подтормаживания:
- Увеличить ползунок производительности
- Проверить расположение файла (не сетевой диск)
- Закрыть ресурсоемкие приложения
- Уменьшить масштаб изображения
Высокое потребление памяти:
- Сдвинуть ползунок влево
- Перезапустить программу (очистка кэша)
- Использовать менее требовательные палитры
Не работают частотные палитры:
- Палитры "Частота байтов"/"Повторы" работают только до 10 МБ
- Для больших файлов включается эмуляция
- Использовать другие палитры для больших файлов
Не сохраняются настройки:
- Проверить права записи в домашнюю директорию
- Настройки хранятся в ~/.byte-o-scope/config.json
- Попробовать запустить программу от администратора
Экспорт PNG не работает:
- Проверить, что регион задан корректно
- Убедиться, что есть данные для экспорта
- Проверить права записи в целевую директорию
- Попробовать другой формат имени файла
Общие примечания:
- Программа работает в демо-режиме при запуске без файла
- Все настройки сохраняются между сеансами
- Поддерживается работа с очень большими файлами (ГБ)
- Интерфейс адаптируется под выбранную палитру
- Темная тема включена по умолчанию
Добавлено позже:Скрипт изначально создавался как "игрушка" на один раз, но позже оброс дополнительным функционалом и оптимизацией. Решил поделиться, чтобы он у меня на харде не пылился.
Из наиболее близких аналогов:
- binocle (
https://github.com/sharkdp/binocle)
- ImageHeat (
https://github.com/bartlomiejduda/ImageHeat)
С тематическим списком софта можно ознакомиться тут
https://suszter.com/hexlasso/a-collection-of-utilities