Требования: Rust (1.90+).
cargo run --releaseОткрыть сразу файл при старте (аргумент командной строки):
# бинарник
./target/release/curcat path/to/image.png
# через cargo
cargo run --release -- path/to/image.pngСтатическая сборка для Linux (musl, 🐳 внутри Docker):
./build_musl.shСборка для RedOS (🐳 внутри Docker):
./build_redos.sh🐳 Варианты базового Docker-образа:
# UBI 8 (по умолчанию)
./build_redos.sh --ubi8
# UBI 7
./build_redos.sh --ubi7
# Произвольный образ
./build_redos.sh --image registry.red-soft.ru/ubi7/ubi:latest- Откройте изображение (кнопка, перетаскивание в центральную область или вставка из буфера обмена — Ctrl+V).
- В правой панели выполните калибровку осей:
- Введите значения для X1/X2 и Y1/Y2 и кликните по двум соответствующим точкам на изображении (для X и Y отдельно).
- Выберите тип значения (
Float/DateTime) и масштаб (Linear/Log10).
- Кликайте по графику для набора точек; при необходимости перемещайте точку: удерживайте
Shiftи перетаскивайте ЛКМ ближайшую точку. - В блоке «Export points» выберите режим:
- Interpolated curve — экспорт равномерно распределённых по X точек интерполированной кривой.
- Алгоритм интерполяции: Linear (по умолчанию), Step (previous), Natural cubic spline.
- Ползунок «Samples» задаёт число точек выборки; рядом можно нажать «Auto» для автоматического подбора.
- Raw picked points — экспорт только отмеченных точек без интерполяции.
- Доп. колонки (опционально):
- distance — расстояние до предыдущей точки (первая строка пустая);
- angle_deg — угол на точке в градусах (первая и последняя строки пустые).
- Доп. колонки (опционально):
- Interpolated curve — экспорт равномерно распределённых по X точек интерполированной кривой.
- Экспортируйте результат в CSV/JSON/RON/XLSX.
🕒 Поддерживаемые форматы даты/времени: YYYY-MM-DD, YYYY-MM-DD HH:MM[:SS], а также популярные локальные варианты (DD.MM.YYYY, YYYY/MM/DD, и др.).
🖼️ Форматы изображений
- Поддержка: PNG, JPG/JPEG, GIF, BMP, TIFF (TIF), WEBP, ICO, TGA, PNM (PBM/PGM/PPM), HDR, DDS.
- Нюансы загрузки:
- Анимация GIF/WEBP: берётся только первый кадр (без воспроизведения).
- Глубина/диапазон: всё конвертируется в 8‑бит RGBA; HDR/16‑бит данные теряют динамику.
- Ориентация JPEG (EXIF): автоматом не применяется — повернуть можно кнопками «↺/↻ 90°».
- Цветопрофили: CMS не применяется; возможны небольшие отличия на широких гаммах.
- TIFF/ICO: открывается первая страница/иконка подходящего размера (без выбора).
- DDS: поддерживаются распространённые форматы (DXT1/3/5 и т. п.); возможна инверсия оси Y в редких файлах.
- PNM/TGA/HDR: встречаются варианты с разной ориентацией/гаммой; при 8‑бит конверсии возможна потеря деталей в светах/тенях.
🛡️ Защитные лимиты при декодировании
- Ограничения для предотвращения «zip‑бомб» и чрезмерного потребления памяти (настраиваются в конфиге, ниже значения по умолчанию):
- Максимальная ширина/высота: 12 000 пикселей на сторону.
- Максимум пикселей (после декодирования): ~80 МП.
- Лимит памяти декодера: ~512 МиБ.
- Если изображение превышает эти ограничения, загрузка будет отклонена с понятной ошибкой.
- ЛКМ — добавить точку.
- Shift + ЛКМ (тащить) — переместить ближайшую точку.
- Средняя кнопка (MMB) — панорамирование (вкл/выкл тумблером «MMB pan» вверху).
- Ctrl + колесо — масштабирование изображения.
- Ctrl + B — показать/скрыть боковую панель.
- Ctrl + O — открыть изображение (диалог).
- Ctrl + V — вставить изображение из буфера обмена.
- Ctrl + Shift + C — экспорт в CSV.
- Ctrl + Shift + J — экспорт в JSON.
- Ctrl + Shift + R — экспорт в RON.
- Ctrl + Shift + E — экспорт в Excel (XLSX).
- Ctrl + Shift + D — очистить все точки.
- Ctrl + Z — откат/Undo последней точки.
В верхней панели также есть кнопка «⟷ Show/Hide side» для быстрого переключения.
Необязательный файл конфигурации можно положить рядом с бинарником,
в XDG‑каталогах (~/.config/curcat/curcat.toml) или в системном профиле приложения
(~/.config/Curcat/Curcat/curcat.toml). Поля имеют разумные значения по умолчанию.
Цвета задаются шестнадцатиричными строками вида #RRGGBBAA (нижний регистр тоже подходит).
Пример:
[curve_line]
color = "#50C878FF"
thickness = 2.0
[curve_points]
color = "#C85050FF"
radius = 3.0
# Скорость панорамирования при зажатой средней кнопке
pan_speed = 1.0
[crosshair]
color = "#C8C8C8CC"
[attention_highlight]
# Цвет/прозрачность мигающего контура подсказок (кнопка открытия, поля калибровки)
color = "#DC4646FF"
thickness = 1.2
[export]
# Максимальное количество точек в режиме интерполяции (ползунок Samples / авто‑подбор)
samples_max = 10000
# Порог относительной погрешности автоподбора (доля диапазона Y, 0–1)
auto_rel_tolerance = 0.005
# Целевая плотность «эталонной» кривой для автоподбора (внутреннее число семплов)
auto_ref_samples = 2048
[image_limits]
# Максимальная ширина/высота для декодирования (px)
image_dim = 12000
# Максимальное число пикселей (после декодирования)
total_pixels = 80000000
# Лимит памяти на аллокации декодеров (bytes)
alloc_bytes = 536870912Поле attention_highlight управляет цветом и толщиной «мигающего» контура, который подсказывает, что нужно открыть изображение и заполнить калибровку.
Во всех вариантах экспорта первые две колонки/поля — x, y (в соответствии с выбранными единицами осей: числа или дата/время).
В JSON и RON данные лежат в массиве points + служебные x_unit/y_unit; значения DateTime записываются строкой, пустые доп. метрики — null (JSON) или None (RON).
Для режима «Raw picked points», если включены дополнительные метрики, добавляются колонки:
distance— расстояние до предыдущей точки; для первой строки — пусто.angle_deg— внутренний угол в текущей точке (градусы); для первой и последней строки — пусто.
ℹ️ Примечание: расчёты выполняются по откалиброванным числовым координатам X/Y. Если X — DateTime, внутренняя шкала X — секунды.
src/app.rs— основное приложение на egui/eframe и логика UI.src/types.rs— типы осей/значений, парсинг/форматирование, преобразования и калибровка.src/image_util.rs— загрузка и поворот изображения, текстуры egui.src/interp.rs— интерполяция (Linear, Step/hold, Natural cubic spline) и структуры данных.src/export.rs— экспорт CSV/JSON/RON/XLSX.src/config.rs— стили/скорости и загрузка конфигурации TOML.
- Дополнительные интерполяции: ступенчатая и натуральный кубический сплайн.
- Сглаживание/аппроксимация кривой.
- Авто расстановки пинч-точек на изображении.
- Поддержка полярных координат.
- Импорт PDF/SVG.
- Слои/сетку/привязки; улучшенная навигация и подсказки.
- Сохранение и загрузка проекта для последующей работы.
- Автоматическая сборка проекта при помощи github actions (поддержка Windows и MacOS).

