LINUX.ORG.RU

Lightning Image Viewer 0.5.1

 , , , ,


2

3

Lightning Image Viewer – легковесное приложение для просмотра изображений на десктопном компьютере со своеобразным UX, который автор находит наиболее удобным.

Без рамки окна, без меню, без тулбаров, только само изображение в прозрачном полноэкранном оверлее с управлением, аналогичным таковому в картографических приложениях:

  • панорамирование (перемещение) перетаскиванием мышью с зажатой левой кнопкой (или клавиатурными стрелками);
  • зум в точку под курсором скроллом (или в точку в центре дисплея клавиатурными +=/-/0);
  • закрытие левым кликом где угодно (или клавиатурным Enter, что делает возможным «моментальное переключение» между файловым менеджером и просмотром изображения).

Написано на C и Rust с SDL3 и image-rs.

Исходники и сборки для Linux (Ubuntu 25.10, Nix выражение) и оффтопика: https://github.com/shatsky/lightning-image-viewer

Веб-демо: https://shatsky.github.io/lightning-image-viewer/

Оффтопик стор: https://apps.microsoft.com/detail/9np4j8k90smk

Заметки про разработку: https://shatsky.github.io/notes/2025-03-07_sdl3-image-viewer.html

Основные изменения с предыдущего мажорного релиза:

  • image-rs (растовая библиотека номер 1 для работы с изображениями) с jxl-oxide и libheif-rs (обеспечивающие поддержку всех распространенных форматов, в т. ч. JXL и HEIC);
  • поддержка анимации (для GIF, PNG и WEBP).

>>> Страница релиза на GitHub

★★

Проверено: hobbit ()
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от sunjob

было-бы лучше, если-бы вы «дотошно» описали ситуацию

Ага, щаз. Прям разбежался. Помогать этим «Свидетелям Иеговы» от IT? Не дождётесь.

Stanson ★★★★★
()

Без рамки окна, без меню, без тулбаров, только само изображение

👍

в прозрачном полноэкранном оверлее

Было бы отлично, если бы это как-то менялось на непрозрачный (или полупрозрачный) фон (опционально с выбором цвета), чтобы не отвлекало.


Оно может полностью управляться только с клавиатуры? Про pan и scale описано, что насчёт переключения на предыдущее/следующее изображение? Или оно может показывать только одно изображение за раз, и чтобы посмотреть другое — открывай отдельный инстанс?

Из хотелок: Показ названия изображения (не актуально, если оно может работать только с одним изображением, без переключения на предыдущее/следующее) и его размеров. Ну и если оно может переключать изображения, то было бы вообще круто иметь "текущую позицию" — какое из скольки изображений в данный момент на экране.

mord0d ★★★★★
()
Ответ на: комментарий от SL_RU

Спасибо за хороший фидбек.

  • встроенный просмотр метаданных в ближайшее время вряд ли будет, но будет возможность забиндить вызов внешней программы, которой может быть вьювер метаданных; также хочу сделать диалог для удобного перемещения картинки в поддиректорию со списком последних (для сортировки сохраненок)
  • я не пользуюсь тайловыми и не очень понимаю, о чем речь. Я попробовал запустить в nested sway, получилось так: начальный transparent fullscreen по дефолту отображается как transparent fullscreen точно так же, как в плазме, на фоне видно панель и тайл файл менеджера, при перемещении прямоугольника изображения фон перерисовывается корректно; если нажать Shift+Meta+Space, отображается в обычном тайле, фон черный; если нажать Shift+Meta+[номер пустого спейса] и свичнуться в этот спейс, отображается так же, но в отсутствие тайлов фон черный; non transparent fullscreen (который с фиксированным fit to display масштабом, тугглится миддл кликом/F) всегда fullscreen, фон черный. Вижу одну проблему с тем, что для transparent fullscreen начальный масштаб и центральная точка вычисляются однократно исходя из начального размера окна, если изначально fullscreen - в тайле они будут неправильными и наоборот, можно добавить хэндлер изменения размера окна. Можешь уточнить, что ты имеешь в виду, какой у тебя композитор и как воспроизвести проблемы?
  • имеется в виду статическая линковка для независимости от либц? Тогда ведь все сишные либы придется собирать, и не только SDL и libheif, от которых он зависит напрямую, а кучу всего, тот же libwayland-client? Мне кажется, Nix (который ставится сбоку на любом дистре) obsoletes все подобные способы распространения приложений без зависимости от предоставляемых системой либ.
  • да, в ближайших планах, просто приложение изначально было написано на С и мне показалось хорошей идеей сначала прикрутить image-rs через FFI)
shatsky ★★
() автор топика
Ответ на: комментарий от Beewek

Пока что нет, думаю прикрутить rsvg

shatsky ★★
() автор топика
Ответ на: комментарий от hobbit

Про cmake? Не знаю, мое приложение его не использует. Раст тулчейн свежий оно требует потому, что его требует свежий jxl-oxide, в котором есть плагин хук для интеграции с image-rs. SDL3 - потому что в нем хорошая кросс-платформенная поддержка прозрачных окон

shatsky ★★
() автор топика
Ответ на: комментарий от sunjob

Даже если современные машины будут бесплатными и свободными, все равно кто-то будет ездить на копейке и строить на этом свою идентичность)

shatsky ★★
() автор топика
Ответ на: комментарий от My_quest

feh можно настроить так, чтоб он точно воспроизводил этот UX? Как минимум, в feh можно сделать прозрачный полноэкранный оверлей и устойчивый зум в точку под курсором, позволяющий одновременно перетаскивать картинку? Если знаешь как - поделись конфигом. По моему опыту, в feh даже зум в точку под курсором стабильно не работает, даже если при этом мышью не двигать.

В целом я полагаю, что этот UX достаточно хорош и прост, чтоб сделать вьювер, в котором он захардкожен, с ограниченной рантайм конфигурабельностью, чтоб охватить «окрестность» в «пространстве» возможных UX, чтоб он был максимально удобен определенной группе, которой нравится именно такой UX и очень близкие.

shatsky ★★
() автор топика
Ответ на: комментарий от Xintrea

И Esc, и Q. В новости описана только та часть UX, которую я считаю «значимыми особенностями», остальное - по ссылкам.

shatsky ★★
() автор топика
Ответ на: комментарий от mord0d

Было бы отлично, если бы это как-то менялось

Рантайм конфиг в планах

Оно может полностью управляться только с клавиатуры?

Может

предыдущее/следующее изображение

PgUp/PgDn, с сортировкой по убыванию mtime, пока что захардкожено

Показ названия изображения

В планах сделать всплывающую панель с инфой и контролами. После добавления svg. Сейчас название отображается в заголовке окна, который в большинстве сред можно увидеть либо рядом со значком на панели задач, либо при наведении на него.

shatsky ★★
() автор топика
Ответ на: комментарий от sunjob

Поддерживает вообще все возможные форматы, показывает всю возможную метадату, есть классные плагины на любой случай. Есть минимальный режим, есть редактор. Есть миниатюры в каталоге. Удобные настраиваемые сочетания клавиш и макросы.

SL_RU ★★★★
()
Ответ на: комментарий от shatsky

в feh даже зум в точку под курсором стабильно не работает, даже если при этом мышью не двигать.

Я, если честно, не понял, что это за «зум в точку под курсором»?

My_quest ★★★★★
()

легковесное приложение

rust

Вы этот руст собирать с исходников пробовали? А обновлять? А на ppc/sparc/hppa?

Andrew-R ★★★★★
()
Ответ на: комментарий от My_quest

Это когда точка изображения под курсором остается неподвижной при изменении масштаба. Как в любой современной онлайн карте, если навести и поскроллить. При просмотре изображения возникает желание рассмотреть получше деталь, сделать так, чтоб она «заполнила зрительное поле». Самый удобный способ указать ее на десктопе - навести на нее мышь (либо загнать ее в центр дисплея, подвинув «камеру» клавиатурными стрелками).

shatsky ★★
() автор топика
Ответ на: комментарий от Smacker

feh

См. выше

qiv

http://spiegl.de/qiv/ этот? Попробовал, HEIC не открывает, попробовал зумить, зажал на секунду то ли «+» то ли «-», оно на секунд на 10 перестало обрабатывать ввод, пока не закончило перерисовывать масштабы. Ну и см. feh.

shatsky ★★
() автор топика
Ответ на: комментарий от shatsky

с сортировкой по убыванию mtime

Любопытно… Нигде не встречал такого, как минимум по умолчанию. (=

Сейчас название отображается в заголовке окна

Для меня более чем достаточно.

После добавления svg.

Круть! С расширениями? (=

Вот такую анимацию жрёт только браузеры:

<!-- ... -->
<animateTransform                                                                                                   
  attributeName="transform"                                                                                         
  type="rotate"                                                                                                     
  values="...;...;...;..."                                              
  begin="0s"                                                                                                        
  dur="3s"                                                                                                          
  fill="freeze"                                                                                                     
  repeatCount="indefinite"                                                                                          
/>
<!-- ... -->

Не говоря уже о градиентах, тенях и прочих плюшках. (=

mord0d ★★★★★
()
Ответ на: комментарий от shatsky

Ну не знаю.. Специфическая штука, не каждому нужно. Если мне такое нужно - я с помощью Ctrl и колеса мыши увеличиваю масштаб и потом зажатием правой кнопки тяну изображение, чтобы увидеть данную область.

По-моему, того, что описано тобой, нет даже в Гимпе. По крайней мере я такого не замечал, хотя пользуюсь регулярно.

Ну да ладно, сколько людей, столько и пожеланий..

P.S. Помимо feh есть еще meh.. Там тоже этого нет?

My_quest ★★★★★
()

Как в нем с цветом фона для прозрачных областей изображения и с геометрией окна, они настраиваются? Ну чтобы заскриптовать, например.

dmitry237 ★★★★★
()
Ответ на: комментарий от mord0d

Любопытно… Нигде не встречал такого, как минимум по умолчанию. (=

В идеале хотелось бы, чтоб оно брало информацию о следующем файле из файл менеджера, подстраиваясь под его сортировку, как quicklook/sushi. И чтоб файл менеджер синхронно переключал выбранный файл. Но для этого нужна поддержка со стороны файл менеджера, что-то подобное вроде бы есть только в гноме. Лично у меня в файл менеджере сортировка по убыванию mtime чуть менее чем всегда =)

С расширениями?

анимацию

Нет. rsvg, скорее всего. Я не вижу смысла поддерживать все, у приложения есть конкретный юзкейс - быстро просматривать сохраненки с сайтов и фотки с гаджетов, остальное поддерживается постольку, поскольку. Для анимированного svg нужнен браузерный движок с writeable dom. Вроде бы ни разу не встречал их в природе, разве что смайлы в каком-то мессенджере…

shatsky ★★
() автор топика
Последнее исправление: shatsky (всего исправлений: 2)
Ответ на: комментарий от dmitry237

Пока что только билд тайм конфиг, дефы можно оверрайднуть, в том числе фон. Будет рантайм конфиг, но аналогичный, для ограниченной кастомизации конкретного UX, а не превращения а какой угодно другой. См. выше

Геометрия окна - это про что? Он создаёт прозрачное полноэкранное безрамочное окно, в котором прямоугольник картинки, выглядящий как окно, перетаскивается и зумится как угодно.

shatsky ★★
() автор топика
Ответ на: комментарий от dmitry237

Нет и не будет, смысл данного UX в отсутствии окна как сущности, ограничивающей своими границами возможное изменение отображения картинки на дисплее при пане и зуме.

Начальное положение прямоугольника изображения - по центру, в самом большом масштабе из ряда …, 1, √2, 2, 2√2, … , умещающемся в дисплее.

shatsky ★★
() автор топика
Ответ на: комментарий от shatsky

Нет и не будет

Понятно, оно и правильно, не делать же клон feh.

dmitry237 ★★★★★
()
Ответ на: комментарий от shatsky

В идеале хотелось бы, чтоб оно брало информацию о следующем файле из файл менеджера, подстраиваясь под его сортировку

Чтобы работало со всеми файловыми менеджерами? А что если твой просмотрщик запущен из терминала? Или вдруг вообще никакого файлового менеджера не установлено? Или если их установлено много разных? А ещё некоторые умеют запоминать сортировку per directory… В общем, пляска не стоит бубна, как мне кажется.

И чтоб файл менеджер синхронно переключал выбранный файл. Но для этого нужна поддержка со стороны файл менеджера, что-то подобное вроде бы есть только в гноме.

Я такое видел в Gnome 2 последний раз. И не только просмотр изображений, но и прослушивание аудио при наведении курсора.

Лично у меня в файл менеджере сортировка по убыванию mtime чуть менее чем всегда =)

Я использую ranger, и я постоянно шатаю сортировку: где-то нужно по ctime, где-то по mtime, а по умолчанию вообще по имени.

конкретный юзкейс - быстро просматривать сохраненки с сайтов и фотки с гаджетов

А для просмотрщика больше и не надо. Галерей со встроенным редактором и прочими далеко не всегда нужными плюшками и без того хватает.

Я не вижу смысла поддерживать все

У тебя поддерживается HEIC и будет поддерживаться SVG, это уже больше, чем у некоторых, даже более фичастых, проектов.

Для анимированного svg нужнен браузерный движок

Знаю. Про анимации и градиенты я пошутил. (=

Просто иногда я балуюсь написанием SVG в Vim…

mord0d ★★★★★
()
Ответ на: комментарий от shatsky

прямоугольник картинки, выглядящий как окно

Рамочку вокруг непосредственно изображения тоже было бы неплохо сделать убирабельной. Или хотя бы настройку цвета прикрутить с альфа-каналом (чтобы делать её 100% прозрачной).

Юзкейс: просмотр клипарта (как раз актуально для SVG).

mord0d ★★★★★
()
Ответ на: комментарий от dataman

Интересный проект, но он поддерживает только «SVG Tiny» и без анимаций (анимации оно поддерживает в Lottie, это другое).

shatsky ★★
() автор топика
Ответ на: комментарий от mord0d

Чтобы работало со всеми файловыми менеджерами? А что если твой просмотрщик запущен из терминала? Или вдруг вообще никакого файлового менеджера не установлено? Или если их установлено много разных?

Тут нужен единый фридесктоп дбас интерфейс, которого нет. Если много файл менеджеров - тот, который в данный момент владеет именем на шине. Если никакого - дефолт (в будущем - из рантайм конфига).

Я такое видел в Gnome 2 последний раз.

Оно в целом известно как QuickLook preview, вроде бы по имени первой широкоизвестной реализации из macOS. Попытки сделать такое есть для многих десктопных сред, на линуксе основательно допилено вроде бы только Sushi для Gnome (он садится на дбас org.gnome.NautilusPreviewer который дергает Nautilus). Изображение отображается в обычном (в смысле, ограниченном рамкой и занимающем ограниченную часть рабочего пространства) окне. Для управления отображением выбранной картинки оно не предназначено, только fit to window, зато создается ощущение, что фокус остается на окне файл менеджера (на самом деле превьювер через дбас уведомляет файл менеджер о нажатии клавиатурных стрелок и тот меняет выбранный файл и соответственно меняется содержимое окна превьювера).

О, космики тоже пилят: https://github.com/pop-os/cosmic-files/issues/74

shatsky ★★
() автор топика
Ответ на: комментарий от shatsky

Внезапно вспомнилось, что в далеком 2009м, когда я окончательно переходил с винды на линукс, я юзал тотал коммандер с каким-то плагином, который по хоткею менял неактивную панель на превью текущего файла)

shatsky ★★
() автор топика
Ответ на: комментарий от shatsky

Изображение отображается в обычном (в смысле, ограниченном рамкой и занимающем ограниченную часть рабочего пространства) окне. Для управления отображением выбранной картинки оно не предназначено, только fit to window, зато создается ощущение, что фокус остается на окне файл менеджера (на самом деле превьювер через дбас уведомляет файл менеджер о нажатии клавиатурных стрелок и тот меняет выбранный файл и соответственно меняется содержимое окна превьювера).

Можно пойти от обратного: написать плагин для файлового менеджера (они всё равно жирные и многие умеют в плагины), который уведомляет Lightning Image Viewer об изменении позиции курсора и скармливает ему новый путь к изображению?

Хотя такой подход потребует то, что предлагал @dmitry237 здесь.

// Впрочем, используемый мной WM может покласть на хотелки окна и отрисовать его нужных размеров и в нужной позиции. (=

mord0d ★★★★★
()
Ответ на: комментарий от mord0d

Накостылить можно и с помощью wmctl. А wm, конечно, лучший способ если у приложения нет такого функционала, но не универсально для разных окружений. Я пользуюсь feh для вывода сканов музыкального альбома, если не задать геометрию явно, то эти картинки будут менять размер окна, т.к. они сами разного размера.

feh -Zg 800x800+880+400 --title $title -B $color $directory
dmitry237 ★★★★★
()
Ответ на: комментарий от dmitry237

SVG он открывает

Открывает, но 3.14-дорасит вывод. (=

Heic тоже открывает, проверил.

Как же давно я не тыкал feh… Оказывается, оно ещё развивается. (=

Буду посмотреть опять. Благодарю!

mord0d ★★★★★
()
Ответ на: комментарий от piyavking

Это как, чтоб он просто висел «корневым окном» в фоне и не реагировал на ввод? Нет, совершенно другие цели проекта (сделать совершенно конкретный UX для конкретного юзкейса с небольшим «охватом окрестности», см. выше), да и зачем делать клон уже существующего (и бессмысленного, на мой взгляд, зачем показывать обои отдельным от шелла процессом и при этом пихать в него декодирование и прочие штуки помимо получения готового pixmap со стороны и его отображения в окне?).

shatsky ★★
() автор топика
Последнее исправление: shatsky (всего исправлений: 2)
Ответ на: комментарий от sunjob

Так то проблемы Патрика и пользователей его дистрибутива. Впрочем, пользователи слаки способны обновить инструментарий и пропатчить утилиту. Было бы желание.

andreyu ★★★★★
()
Ответ на: комментарий от mord0d

Просто иногда я балуюсь написанием SVG в Vim…

В середине 90х был рейтрейсер, сцену для которого нужно было описывать в текстовом редакторе. Рендер получался шикарный, но как же сложно было описать сцену, если она была чуть сложнее куба и сферы.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

В середине 90х был рейтрейсер, сцену для которого нужно было описывать в текстовом редакторе.

Не POV-Ray?

development-status-november-2024:

After a long break in releases of 3.8 beta test candidates, development is resuming, though not at the pace of past releases.

One impediment we have yet to overcome is code signing for the Windows platform. Currently we have no means of doing so as our previous key has expired. The difficulty is both cost and the need for flexibility in verifying us as an organization. Despite the fact that we have a company registered in Australia (Persistence of Vision Raytracer Pty. Ltd.) and it is visible on the ASIC website, it is our experience that the verification process gets hung up by the fact the company doesn’t sell anything, have a street address, or have a phone number.

While we do not generally sign beta releases, it is our policy that official releases for the Windows platform are expected to be signed.

dataman ★★★★★
()
Ответ на: комментарий от dataman

Не POV-Ray?

Точняк, он самый. Не знал, что он живой.

andreyu ★★★★★
()
Ответ на: комментарий от u-235

Может и ничего, но это не повод бегать по всяким слакам и проверять что там Патрик обновил, а что нет.

andreyu ★★★★★
()
Ответ на: комментарий от u-235

Зачем разработчику поддерживать старые версии инструментов, которые уже помечены как deprecated?

Хочется вошкаться с Патриком - пожалуйста, но упрекать разработчика за то, что он отказался от поддержки версии, которая давно устарела - странно.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Зачем разработчику поддерживать старые версии инструментов

Незачем, конечно. И выкладывать свои ультрасовременные поделки тоже незачем.

u-235
()
Ответ на: комментарий от u-235

Незачем, конечно. И выкладывать свои ультрасовременные поделки тоже незачем.

Очень ценное мнение, клоун вам в подарок.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

– Предлагаю к рассмотрению мой Simple Viewer GL.

– У меня версия CMake не такая новая, мне не собрать.

– Так то проблемы Патрика и пользователей его дистрибутива.

Ну и кто тут клоун? При том, скрипту хватает даже версии 3.05.

u-235
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.