Skip to content

Latest commit

 

History

History
244 lines (167 loc) · 42.2 KB

README.rus.md

File metadata and controls

244 lines (167 loc) · 42.2 KB

Tumblr-image-sorter

Юзерскрипт и аддон для автоматического выбора пути сохранения изображений на основе тегов.

Содержание

  1. Введение
  2. Принцип действия
  1. Содержимое скрипта
  2. Необходимые данные
  3. Совместимость
  4. Дополнительные возможности
  5. Использование
  1. Информация о проекте

Введение

Юзерскрипт предназначен для экономии времени, обычно тратящегося на выбор папки сохранения и имени файла для картинок. Вы предоставляете список сопоставления тегов и папок, скрипт анализирует теги для каждого изображения, выбирает подходящую для него папку и добавляет нужные теги в имя файла в стиле danbooru (заменяя пробелы на знак подчёркивания). Кроме того, есть возможность перевода тегов с другого языка с использованием того же списка сопоставления, выделения уже сохранённых изображений и исправления некоторых типичных проблем в темах оформления.

Представьте, что вы часто сохраняете фото с тумблера и стремитесь содержать коллекцию в порядке. Имея разветвлённое дерево каталогов в коллекции можно потратить много времени выбирая нужную папку для сохранения каждой картинки. В то же время, информация, на основе которой делается этот выбор находится в тегах поста, содержащего изображения (если автор поста ответственно подошёл к их проставлению). Даже если вы просто сохраняете все картинки в одну папку, было бы удобно добавлять теги, описывающие содержимое изображения в имя файла. Все это и многое другое становится возможным благодаря данному юзерскрипту.

Принцип действия

Скрипт сохраняет теги постов в БД в процессе навигации по тумблеру. Когда вы открываете картинку в новой вкладке, скрипт находит связанные с ней теги, сверяет их со списком сопоставления папок и тегов и принимает решение о том, куда следует сохранить текущее изображение. Если подходит несколько папок, можно сохранить картинку в специальную директорию для групповых фото. Если какие-либо теги не удаётся распознать (для них не назначено папок или перевода), для изображений с ними можно выбрать отдельную папку для последующей ручной сортировки.

Логика выбора папок

Для начала определим некоторые понятия. Во-первых, ради примера предположим, что большинство изображений, сохраняемых вами с тумблера это фотографии людей, так что теги в основном содержат их имена. Папки в вашей коллекции также названы их именами и все находятся в главной директории, которую мы будем называть "root". Основные понятия:

  • folder name - тег-имя человека, для фотографий которого у вас есть отдельная папка.
  • name - тег-имя, для которого нет папки, но есть необходимость распознавать или переводить его и сохранять в имени файла.
  • meta - любой распознаваемый/переводимый тег, не являющийся именем (не имеющий папки).
  • folder meta - неименной тег, для которого, все же, есть выделенная папка. Они могут использоваться, например, для группирования других папок вместе по некоторому признаку. Подобные папки должны иметь определённый символ в начале имени, по умолчанию '!'. Для краткости будем называть такие теги "!meta".
  • unknown - нераспознанный тег, которого нет ни в одной из баз данных.
  • group, solo и unsorted - указатели на специальные папки: для групповых фото, для сольных фото персон, не имеющих выделенной папки в коллекции и, наконец, папки для ручной сортировки изображений с неизвестными тегами. Конечно, все эти указатели вполне могут являться одной и той же папкой, если в вашей коллекции нет столь подробного разделения.

Таблица ниже показывает все возможные комбинации тегов в каждой категории и результирующую папку/имя файла, которые будут выбраны для изображения с тегами в каждом случае. До '' идёт имя папки относительно корня, после - сформированное имя файла, дополняемое метатегами в случае их присутствия. Исходное имя файла добавляется в конец.

folder !meta folder name name unknown папка комментарии
>0 unsorted \ [теги] names meta кол-во прочих тегов не важно
0 or >1 0 0 0 \ meta если есть
0 or >1 0 1 0 solo \ name
0 or >1 1 0 0 name \ прямое попадание
0 or >1 >1 + + >1 0 group \ names сумма всех именных тегов >1
1 0 1 0 !meta \ name мета-папка вместо соло
1 >1 + + >1 0 !meta \ names мета-папка вместо групповой

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

Содержимое

На данный момент проект состоит из двух юзерскриптов, "animage-post" и "animage-get".

  • animage-post работает со страницами тумблера, содержащими посты - такими, как /search/, /tagged/, /dashboard и вообще большинством страниц персональных блогов, кроме /archive. Данный скрипт собирает теги постов и сохраняет их в базу данных с привязкой к именам файлов изображений поста. Скрипт, как правило, не требует взаимодействия с пользователем. Во время просмотра постов в заголовке вкладки отображается список чисел, соответствующий количеству изображений, найденных в каждом подходящем посте на странице, или пробел, если у поста нет тегов.
  • animage-get работает с индивидуальными изображениями, открытыми в новых вкладках. Он запрашивает информацию о тегах для текущего изображения и формирует путь сохранения и имя файла на ее основе. Полученный путь копируется в буфер обмена при нажатии кнопки "Save to disc", вызывающей диалог сохранения.
    Данный скрипт имеет пользовательский интерфейс, позволяющий вручную ввести перевод и категорию для нераспознанных тегов, а также сохранить или загрузить дополнительные базы данных тегов.

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

Необходимые данные

Чтобы правильно выбрать папку для сохранения, скрипту требуется обращаться к нескольким базам данных тегов: folder, name и meta.

  • Folder БД формируется пользователем и описывает структуру дерева папок в коллекции изображений на диске. Состоит из пар "тег : путь\\к\\имя папки" относительно корневой директории. В текущей версии данная БД содержится в теле второго юзерскрипта ("animage-get.js") в виде объекта с полями. Эта же БД используется и для перевода тегов, если язык тегов в постах отличается от языка, на котором вы предпочитаете именовать папки и файлы.
  • name и meta БД (вспомогательные) используются для распознавания тегов и их категорий (имя/мета) и для перевода тегов. Они содержатся во флэш-хранилище LSO и могут быть дополнены, экспортированы или импортированы с помощью интерфейса, предоставляемого animage-get.js.

Кроме того, есть ещё список игнорируемых тегов, используемый для удаления ненужных тегов перед обработкой. Список содержится в теле второго скрипта, после списка папок.

Совместимость

На данный момент скрипт поддерживает большинство популярных тем оформления с выключенной функцией бесконечной прокрутки. Если же эта функция включена, скрипт обработает только те несколько постов, которые были загружены на страницу до момента активации прокрутки. Тем не менее, даже для последующих необработанных постов скрипт сможет корректно собрать информацию о тегах, если это посты, содержащие одну картинку, указывающую на страницу просмотра изображения (/image/); как правило, такие типы постов в числе большинства. Наличие плиточного дизайна в теме, возможно, снизит совместимость.

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

В общем случае, наибольшая совместимость гарантируется для тем оформления, где и содержимое поста и его метаданные находятся в контейнере с 'class="post"'.

Имя темы Адрес Совместимость, %
? http://marumichannel.tumblr.com 90
alva http://www.tumblr.com/theme/36704 95
Catching Elephant http://www.tumblr.com/theme/7285 90
Effector http://www.tumblr.com/theme/17403 90
ER2 http://cubicle17.com 100
Masonite http://hellodirty.com 85
Minimal by Artur Kim http://arturkim.com 100
o by inky http://www.tumblr.com/theme/1386 90
Optica http://www.tumblr.com/theme/37310 100
PixelUnion Fluid http://www.tumblr.com/theme/979 65
plain by selkas http://selkas.tumblr.com 80
redux http://thm--reducereuseandredux.tumblr.com 90
seigaku http://sakurane.tumblr.com/preview/seigaku 90
Simple Things http://singleatheme.tumblr.com 100
Single A http://www.tumblr.com/theme/28638 100
Tincture http://tincturetheme.tumblr.com 75
tuesday by selkas http://selkas.tumblr.com 85
Viwan theme http://viwan-th.tumblr.com 95

PixelUnion Fluid довольно нестандартна в своём оформлении, мне не удалось собрать достаточно статистики чтобы оценить её совместимость. В The Minimalist может отсутствовать выделение сохранённых изображений на страницах.

Темы со встроенным WikPlayer'ом не поддерживаются. Похоже, что этот плеер оборачивает всю страницу в iframe, находящийся за пределами Тумблера.
Также не поддерживаются блоги, защищенные паролем и блоги на собственных доменах, ввиду ограниченной доступности информации из них через API.

Дополнительные возможности

Кроме основного функционала скрипт также добавляет небольшие изменения в оформление постов на страницах. В числе основных - выделение рамкой ранее сохранённых через скрипт изображений. Данный функционал работает, в том числе и между разными блогами: изображение будет выделено, даже если картинка была сохранена с одного блога, а вы просматриваете реблог содержащего её поста в другом тумблере.

Другая полезная возможность заключается в добавлении ссылок для каждого вложенного изображения в посте (не только картинок в фото-постах) либо напрямую на HD-версию картинки (если есть), либо на поиск этого изображения в гугле. Таким образом становится возможным сбор изображений и информации из любых постов, не ограничиваясь только категорией фото.

В числе прочих возможностей: изменение ссылок одиночных изображений в фотопостах напрямую на полную версию картинки в обход страницы /image/; добавление ссылок даже для фото низкого разрешения (потому что скрипту требуется открытие изображений в отдельной вкладке); исправление ошибки в некоторых темах, где прозрачный <div> накладывался поверх изображений в фотопостах, делая ссылки на полные версии недоступными.

Использование

Начальная конфигурация

После установки скрипта (инструкции представлены в README, расположенном в папке конкретной версии) потребуется как минимум заполнить список соответствия тегов и папок в GET-скрипте. Для быстрого составления описания дерева папок в текстовом формате можно выполнить dir /s/b/o:n/A:D > folders.txt в командной строке корневой директории коллекции, после чего использовать редактор типа Excel для дальнейшего форматирования списка по примеру. Используйте двойные '\' вместо одиночных. Если планируется работа с тегами в юникоде наряду с обычными для одного и того же имени, можно использовать опцию "useFolderNames", чтобы избежать ввода обеих версий тега. Достаточно будет ввести пару "тег в юникоде : имя папки в ansi", распознаны будут теги в обоих вариантах записи.

По умолчанию список соответствия содержит конфигурацию, с которой его использую я - около 80 имен на японском (в кандзи) с именами папок на английском. В дополнение к этому можно заполнить вспомогательные БД name и meta с помощью функции импорта. Для этого откройте любое изображение из поста на новой вкладке и откройте меню +settings+. Затем выберите import db там же, и откройте файл names&meta tags DB.txt. Вы можете изменить содержимое файла в текстовом редакторе, я рекомендую использовать Notepad++. По умолчанию дополнительные БД содержат ещё по 150+ имён и 20 метатегов с переводом на английский.

При наличии повторяющихся записей среди БД папок и дополнительных БД имеет место быть следующая иерархия: Folders > names > meta.

Следует заметить, что на размер флэш-БД имеются ограничения, по умолчанию это 10-100 кбайт. Несмотря на то, что каждая запись в БД для отдельного изображения занимает сравнительно мало места (около 70 байт), БД постоянно продолжают заполняться в процессе навигации по тумблеру. Рано или поздно указанный лимит будет достигнут и POST-скрипт покажет уведомление о необходимости его повысить. Можно сделать это с самого начала, в настройках флэша на http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager07.html найдите домен из переменной storeUrl (по умолчанию это dl.dropboxusercontent.com) и выставите значение хотя бы в 1 мегабайт.

Настройки

В юзерскрипт-версии большинство настроек производится редактированием значений переменных в теле скриптов. У аддона для этого есть окно настроек.

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

Часть настроек является общей для обоих скриптов:

  • debug - исходное значение режима отладки, имеет силу до момента загрузки флэш-БД, после чего изменяется на сохранённое там значение.

Режим отладки предусматривает следующие изменения в поведении скриптов:

- включает уведомления обо всех ошибках посредством всплывающих окон сообщений. Без уведомлений пользователь увидит только в заголовке вкладки в случае ошибки, а сами сообщения будут перенаправлены в консоль.
- показывает окно флэш-БД в левом верхнем углу окна, что позволяет увидеть сообщение о превышении ограничения БД по размеру и разрешить повысить лимит.

  • storeUrl - адрес флэш-объекта, управляющего БД. Должен быть одинаковым в обоих скриптах.

Обратите внимание, что при изменении storeUrl все флэш-БД пересоздаются с нуля. Предыдущие версии не удаляются, так что к ним можно вернуться, восстановив прежнее значение этой переменной.

Остальные настройки разные для каждого скрипта:

  1. animage-post:
  • enableOnDashboard - включает работу скрипта в Ленте.
    Это может быть удобно в случае, когда поддержки какого-либо блога, читаемого вами, ещё нет. Благодаря постоянству дизайна ленты обеспечить работу скрипта на ней проще, чем для каждой существующей темы оформления.

  • linkify - обеспечивает добавление ссылок ко всем картинкам в постах.
    Тумблер не создаёт ссылок ни для картинок малого размера в одиночных фотопостах, ни для вложенных картинок в постах любого типа, даже при наличии версии в высоком разрешении. Однако для работы GET-скрипта требуется открытие изображений в отдельной вкладке. Данная опция добавляет ссылки небольших фото на самих себя, а вложенных изображений - либо на версию в высоком разрешении (если есть), либо на поиск этого изображения в гугле.
    Опция находится в стадии тестирования и может привести к проблемам в темах типа Pixel Union Fluid.

  1. animage-get:
  • root - путь к папке, содержащей коллекцию. Должен использовать двойные '\' и заканчиваться ими же.

  • ms - метасимвол, используется для различия между папками-категориями, содержащими папки-имена и самими папками для имен.
    Должен быть первым символом в имени папки-категории, по умолчанию равен '!'.

  • Folders - список соответствия между тегами и папками коллекции.

  • ignore - список тегов, которые будут пропускаться при обработке. Каждый тег должен быть в паре с 'true' чтобы игнорироваться или 'false' в противном случае.

  • allowUnicode - разрешить вводить переводы неизвестных тегов в юникоде в интерфейсе второго скрипта.
    По умолчанию разрешён ввод только в ANSI, так как идея скрипта в генерации наиболее совместимых имен файлов без сомнительных символов в них.

  • useFolderNames - автоматически расширяет список распознаваемых тегов с папками за счет имен самих папок в дополнение к указанным тегам.
    Позволяет вводить для каждого имени только пару "юникод тег : анси имя папки" вместо дополнительного ввода "анси тег : анси папка".

  • downloadifySwf - адрес флэш-кнопки, используемой для копирования пути сохранения, формирования имени файла и вызова диалога сохранения.

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

Повседневное использование

Последовательность действий заключается в следующем: убедитесь, что скрипт активировался на странице с постами (в заголовке вкладки появилось ▶[), затем открывайте картинки постов в новых вкладках (обычно это делается средним кликом). Во время или после загрузки изображения в каждой вкладке скрипт покажет в ее заголовке, удалось ли распознать все теги изображения и выбрать папку. Если имело место быть прямое попадание (на фото одна персона и для нее есть выделенная папка), в заголовке отобразится и путь к папке. Если же были найдены нераспознанные теги, будет показано ? и список этих тегов. Наконец, если теги не были найдены вообще, GET-скрипт не будет запущен и заголовок не изменится.

В случае, если теги были найдены и распознаны, нажмите кнопку Save to disk. Появится диалог сохранения, вставьте путь сохранения из буфера обмена в поле ввода имени файла (можно сделать это комбинацией Shift-Insert), и нажмите Сохранить (или Enter), готово!. Намного лучше, чем вручную искать и выбирать нужную папку для каждой картинки, не так ли? И это еще не всё, если вы часто перевыгружаете только что сохранённые картинки куда-либо, уже имеющийся в буфере обмена путь к последней сохранённой картинке можно точно так же легко вставить в диалоге открытия файла.
Если вы сохраняете подряд несколько изображений в одну папку, нет нужны вставлять путь каждый раз, так как по умолчанию используется последний путь сохранения.

Работа с неизвестными тегами

Скрипт предоставляет удобный интерфейс для работы с тегами, отсутствующими в БД. На странице изображения они будут перечислены слева, под кнопкой сохранения на диск. Для каждого такого тега есть возможность выбрать категорию (имя или мета), ввести перевод (если требуется) или просто скрыть тег из результатов (по клику). После ввода информации нажмите кнопку Submit, чтобы применить изменения, и обратите внимание на заголовок вкладки.

Что нужно иметь в виду:

  • Скрипт пытается принимать во внимание методы, которыми некоторые блоггеры повышают заметность своих постов, вводя всевозможные варианты записи каждого тега. В числе прочего это: ввод имён в прямом и обратно порядке имени/фамилии, ввод имени на кандзи и на английском, ввод кандзи с пробелом и без и т.д. Где возможно, скрипт оставит только только одну версию, удалив дубликаты. Так, например, если тег на кандзи уже найден в какой-либо БД с переводом, а блоггер также включил тот же тег на английском, последний будет удален из результатов.
  • Если же кандзи-тег не распознан, и имеются также нераспознанные теги на английском, скрипт покажет все теги, и, кроме того, позволить выбрать англоязычные теги как варианты перевода кандзи-тегов. Это не только позволит избежать ручного ввода и сэкономить время, но и облегчит задачу перевода иностранных тегов, если хотя бы часть символов вам известна. Я нахожу это очень полезным.
  • Скрипт также пытается распознать различные способы записи 'ō' как o/ou в конце имен в пользу 'o'.
  • Все символы, недопустимые к использованию в именах или путях файлов и также символ % будут заменены на дефисы.

Информация о проекте

Код подробно прокомментирован, я попытался объяснять все, что я делаю. Однако, будучи новичком, я мог допустить некоторые ошибки с оформлением.

Зависимости

Юзерскрипт использует следующие библиотеки:

  • jQuery v1.5-1.11 для манипуляции объектами на странице
  • Javascript Flash Cookies v2.1 by Nfriedly для кроссдоменного хранения данных. Слава флэшу!
  • Downloadify v0.22 by Dcneiner (мой форк). Используется для принудительной загрузки изображений как файлов, формирования имени файла и копирования пути сохранения в буфер обмена (функционал, добавленный мной).

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

Статус версий

v1.2

Основные TODO

(или "Как я могу помочь проекту")

  • Перенести БД папок в отдельный файл, подгружая его автоматически, вместо хранения в теле скрипта. Если это невозможно, придётся хранить в ещё одной флэш-бд и делать интерфейс для редактирования значений. (Актуально для юзерскриптов, в аддоне уже есть возможность работы с файлами)

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

  • Сделать возможным обход дерева реблогов к источнику в поисках тегов, если в посещённом реблоге их нет.

Поможет с реблогами ленивых юзеров.

  • Добавить поддержку бесконечной прокрутки.

Наверное, как-то придётся ловить событие прокрутки или что-то такое, вот багов-то будет. Пока можно использовать no-scroll аддоны.

  • Завести возможность добавления новых тегов в дополнение к переводу существующих, плюс применять вводимые изменения ко всем открытым изображениям из одного поста.

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

Испытания

  • Создать упрощённую версию без функционала перевода для использования только с тегами на латинице.

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

  • Сделать версию без флэша, использующую только API *monkey и HTML5

Это также обеспечит поддержку ОС кроме Windows. Уже реализовано в формате аддона.

Будущий потенциал

  • Добавить третий скрипт, генерирующий страницу статистики по сохранённым изображениям. К примеру, он мог бы отслеживать количество изображений с сольными тегами без папки и выдавать предложения, какому тегу пора создать личную папку. Кроме того, на такой странице можно было бы сделать более функциональный и удобный интерфейс пользователя, вместо рисования поверх страницы с изображением.
  • Обладая данными из БД тегов и изображений, вполне возможно создать локальный сортировщик изображений на диске, работающий по тому же принципу, что этот юзерскрипт. По сути, на входе - имя файла изображения, запись БД с тегами для него и БД соотношения тегов с папками. На выходе - путь перемещения и новое имя файла. Обеспечить работу этого в цикле сразу для нескольких изображений, выбранных с диска должно быть тривиально. Пусть яваскрипт не может перемещать файлы на диске, он вполне может генерировать .bat-файл, содержащий необходимые команды ОС для достижения того же эффекта.
  • Добавить поддержку других фотохостингов с тегами, что повысит популярность и использование проекта. В числе потенциальных кандидатов - soup.io, egloos.com и может быть даже Pixiv. Вместе с вышеупомянутой возможностью сортировки локальных файлов это позволит использовать весь потенциал онлайн-системы тегов для организации коллекций изображений на диске.