Я устал от Яндекс.Диска и «неработающего» CleanShot Cloud и сделал своё облако для скриншотов
Собрал своё мини-облако для скриншотов: одна горячая клавиша, и у меня в буфере короткая ссылка с превью в Telegram и аккуратной страницей просмотра.
Скриншоты у меня — рабочая валюта: я постоянно кидаю их клиентам, в задачи команде, в переписки и заметки. И каждый раз бесит одно и то же: лишняя возня и «вот вам файл где-то в облаке, разберётесь».
Если вы тоже часто отправляете скриншоты клиентам, команде или в задачи, то наверняка поймёте: бесит не сам скрин, а вся возня после него — загрузка, ссылка, доступы, лишние пояснения.
Сначала я делал это через Яндекс.Диск. Как хранилище он норм, но как инструмент, чтобы быстро поделиться — боль: лишние клики, неочевидные ссылки, которые каждый раз приходится объяснять. Потом купил CleanShot X и понял, каким должен быть идеальный сценарий: снял — и сразу поделился. Но в России CleanShot Cloud нормально не работает, и в какой-то момент стало очевидно: если я хочу этот удобный процесс, значит, придётся собрать своё маленькое облако под себя
Что я хотел получить (чек-лист требований)
Мне не нужен был ещё один сервис, который надо настраивать, поддерживать и держать в голове. Нужен был один простой сценарий: сделал скрин, нажал горячую клавишу, получил ссылку. Поэтому я собрал для себя простой чек-лист требований:
- Один хоткей → ссылка готова и уже в буфере обмена
- Короткий URL без мусора: ss.pilotnikov.com/JOxw9eTk
- Просмотр как у сервиса: превью по центру + кнопка «Скачать»
- Поддержка не только картинок, но и видео (с нормальным плеером и fullscreen)
- Превью в мессенджерах (Telegram и т.п.), чтобы ссылка выглядела как сервис, а не как случайный файл
- Приватность по умолчанию: чтобы страницы и файлы не улетали в индексацию и не попадали в веб-архивы
Всё. Если эти пункты выполняются, значит инструмент решает задачу.
Как я это собрал
Я не хотел создавать сервис. Мне нужно было вернуть удобную привычку: сделал скриншот и отправил ссылку, без лишних папок, ручных загрузок и выдачи доступа.
На Mac у меня уже был готовый набор: CleanShot X сохраняет исходники, Compresto автоматически сжимает и складывает готовые файлы отдельно. Оставалось связать это одним действием. Я сделал bash-скрипт: он берёт самый свежий файл, присваивает ему короткий код для ссылки, загружает на сервер и кладёт URL в буфер обмена. Чтобы вообще не думать про терминал, я обернул запуск в Raycast и повесил на хоткей. Получилось ровно то, чего не хватало: «скрин → хоткей → ссылка».
Серверную часть тоже не усложнял: поддомен на Beget, папка для файлов и один view.php. Он по коду находит нужный файл и показывает его на аккуратной странице просмотра — картинку или видео. Всё собиралось по принципу: минимум деталей, максимум удобства.
Как это работает в реальной жизни
В реальной жизни это выглядит так:
- Делаю скриншот в CleanShot X (у меня это на средней кнопке Logi MX Master 3S).
- Compresto автоматически сжимает файл и кладёт его в папку «готовых».
- Нажимаю хоткей в Raycast — скрипт забирает последний файл, заливает на ss.pilotnikov.com и копирует ссылку в буфер.
- Вставляю ссылку в Telegram/чат/задачу.
- И самое приятное: ссылка открывается не «файлом», а нормальной страницей просмотра, плюс в мессенджерах появляется превью.
Как устроено: Mac + простой PHP на сервере
Если совсем простыми словами, у меня две части: Mac, где появляются скриншоты, и сервер, где они лежат и открываются по короткой ссылке.
На Mac
- CleanShot X сохраняет скриншоты и записи экрана.
- Compresto автоматически сжимает их и кладёт в папку «готовых».
- Мой скрипт по хоткею берёт самый свежий файл, присваивает ему короткий код для ссылки, загружает на сервер и копирует URL в буфер.
На сервере
- Загруженные файлы лежат в папке /files.
- Короткая ссылка вида ss.pilotnikov.com/owiMZfcB через .htaccess ведёт на один обработчик — view.php.
- view.php по коду находит файл и показывает страницу просмотра: картинку, видео или кнопку «скачать».
Видео показываю через Plyr, подключаю его локально (без CDN) и только на страницах, где он реально нужен. Для картинок всё проще: адаптивное превью по центру и клик для открытия оригинала.
В итоге это не «облако» в привычном смысле, а быстрый конвейер: снял → загрузил → отправил ссылку → открыл красиво.
Почему превью в Telegram реально экономит время
Превью в Telegram не для красоты. Это реально влияет на то, как люди воспринимают ссылку и насколько охотно по ней переходят.
Когда ты кидаешь в чат просто файл или длинную ссылку, это выглядит как что-то непонятное, и не ясно, что внутри. Её легко пропустить, отложить на потом или вообще не открыть. А когда ссылка сразу превращается в карточку: заголовок, описание и миниатюра скриншота — это воспринимается как нормальный инструмент. Понятно, что внутри, и понятно, зачем открывать.
Для меня это важно именно в рабочей переписке:
- с клиентом — чтобы быстрее согласовывать правки и не тратить время на объяснения «откройте вот это»;
- внутри команды — чтобы задача читалась с одного взгляда;
- в заметках/CRM — чтобы по ссылке было видно, что там лежит, не открывая.
По сути, мета-теги для превью превращают «файл где-то на сервере» в удобный рабочий артефакт. И это напрямую экономит время на коммуникации.
Приватность: чтобы рабочие скрины не «светились» в интернете
Для меня это принципиально: это не фотохостинг и не публичная галерея. В скриншотах часто остаются рабочие детали — переписки, интерфейсы админок, цифры, куски ТЗ. Поэтому сервис должен быть удобным для обмена ссылкой, но не должен попадать в поиск и архивы.
Что я сделал на базовом уровне:
- страницы и файлы помечены как noindex/nofollow (через заголовки и meta), чтобы поисковики не индексировали контент;
- запретил кэширование/сниппеты и «показ картинок» в выдаче;
- закрыл сервис от веб-архивов, чтобы случайно не появлялись сохранённые копии.
При этом важно понимать границу: «не индексируется» ≠ «защищено паролем». Если кто-то получил прямую ссылку, он сможет открыть её. Поэтому в URL используется короткий случайный код, чтобы ссылку нельзя было угадать по порядку, и я не храню там ничего, что должно быть строго закрытым.
Если буду усиливать дальше, то сделаю код длиннее и добавлю авто-удаление старых файлов. Но даже текущая версия закрывает главный риск: мои рабочие скриншоты не превращаются в контент для поиска и архивов.
Что это говорит обо мне как о SEO-специалисте
Для меня SEO — это не только семантика, структура и тексты. Это ещё и скорость работы команды: как быстро мы фиксируем проблему, показываем правку, согласовываем изменения и фиксируем результат.
Этот мини-сервис вырос из реальной рутины. Скриншоты постоянно участвуют в согласованиях, задачах и отчётах, и если шаринг неудобный, теряется время на пустом месте. Я сделал так, чтобы один хоткей закрывал всю цепочку: ссылка, превью, просмотр.
Итоги и что дальше
В итоге я получил ровно то, что хотел: быстрый и предсказуемый сценарий «скрин → хоткей → ссылка». Ссылка короткая, открывается на аккуратной странице просмотра, видео смотрится прямо в браузере, а в Telegram сразу появляется превью. И главное: всё живёт на моём поддомене и не улетает в поиск — это рабочий инструмент, а не публичная витрина.
Зачем я написал эту статью? Чтобы показать простую мысль: такой инструмент может собрать любой, у кого есть желание и базовый техничный кругозор. Тут нет большой разработки, всё держится на понятной связке: скриншоты на Mac → загрузка по горячей клавише → простой обработчик на сервере.
Если захотите повторить, минимальный план такой:
- поддомен и папка для файлов на хостинге;
- короткие ссылки (правило для URL) → страница просмотра;
- локальный скрипт, который берёт последний файл и заливает на сервер;
- базовая приватность: noindex и запрет архивов, чтобы рабочие скрины не улетали в поиск.
Если буду допиливать дальше, то по минимуму:
- авто-удаление старых файлов (30–90 дней);
- сделать код в ссылке длиннее (меньше риск угадывания);
- кнопка «удалить» по отдельной скрытой ссылке;
- постер/превью для видео.
Отдельно могу показать и техническую сборку: .htaccess, view.php, шаблон страницы просмотра и bash-скрипт, который отправляет файл на сервер.
Больше таких историй в Telegram: