invisible-watermark🟢 Не требует оригинального изображения (standalone watermarking) — можно встраивать метку даже если нет “эталона”.🟢 Работает как библиотека и как командная строка (CLI-инструмент) — удобно использовать в пайплайнах или скриптах для обработки изображений.🟢 Поддерживает разные алгоритмы внедрения водяных знаков, устойчивые к некоторым трансформациям (сжатие, изменение оттенков).🟢 Лёгкая зависимостями — типичный стек: PIL/Pillow или аналогичные библиотеки обработки изображений.
pip install invisible-watermark
#библиотеки
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤3🔥1
DevPyConf на Cтачке
Python-разработка│ 3 октября │ Санкт-Петербург
На DevPyConf соберутся ведущие Python разработчики, чтобы обсудить тренды, архитектуру и инструменты.
Ключевые треки конференции:
— Архитектура и python
— Современный ML, AI тулинг
Выступят спикеры:
→ Михаил Гурбанов, TechLead в Райффайзенбанке. Тема доклада: «Архитектура сервисов в AI ландшафте»
→ Евгений Блинов, Разработчик в Авито. Тема доклада: «Дружим sync и async питоны»
→ Юрий Маркин, Старший разработчик в X5 Tech. Тема доклада: «Pythorust не серебряная пуля»
→ Денис Воронкин, Backend разработчик в KTS. Тема доклада: «Почему надежно кешировать данные сложно?»
→ Александр Кучин, Python разработчик в Литрес. Тема доклада: «Мы уменьшили длительность нашего пайплайна в несколько раз - до 17 минут»
→ Алексей Фиссон, Тим лид в X5 Tech. Тема доклада: «Чем вам asyncio не фреймворк, а Redis не брокер?»
→ Сергей Волков, Team Lead в Сбере. Тема доклада: «Метрики без боли: AI-агент вместо BI-навигации»
→ Денис Аникин, Тимлид/Комьюнити лид в Райффайзенбанке. Тема доклада: «Выбираем LLM gateway»
Программа и билеты на сайте
Следите за новостями в Телеграме и ВК
Python-разработка│ 3 октября │ Санкт-Петербург
На DevPyConf соберутся ведущие Python разработчики, чтобы обсудить тренды, архитектуру и инструменты.
Ключевые треки конференции:
— Архитектура и python
— Современный ML, AI тулинг
Выступят спикеры:
→ Михаил Гурбанов, TechLead в Райффайзенбанке. Тема доклада: «Архитектура сервисов в AI ландшафте»
→ Евгений Блинов, Разработчик в Авито. Тема доклада: «Дружим sync и async питоны»
→ Юрий Маркин, Старший разработчик в X5 Tech. Тема доклада: «Pythorust не серебряная пуля»
→ Денис Воронкин, Backend разработчик в KTS. Тема доклада: «Почему надежно кешировать данные сложно?»
→ Александр Кучин, Python разработчик в Литрес. Тема доклада: «Мы уменьшили длительность нашего пайплайна в несколько раз - до 17 минут»
→ Алексей Фиссон, Тим лид в X5 Tech. Тема доклада: «Чем вам asyncio не фреймворк, а Redis не брокер?»
→ Сергей Волков, Team Lead в Сбере. Тема доклада: «Метрики без боли: AI-агент вместо BI-навигации»
→ Денис Аникин, Тимлид/Комьюнити лид в Райффайзенбанке. Тема доклада: «Выбираем LLM gateway»
Программа и билеты на сайте
Следите за новостями в Телеграме и ВК
❤3🔥3
Media is too big
VIEW IN TELEGRAM
requests, PIL, opencv-python, yt_dlp, pyperclip и др. Все скрипты автономны и легко подключаются. 🟢 Background Remover — удаляет фон с изображений автоматически.🟢 QR Code Creator — генерирует QR-коды из URL или текста.🟢 YouTube Downloader — скачивает видео или аудио из YouTube.🟢 Resource Monitor — следит за использованием CPU, памяти и логгирует превышения.🟢 Clipboard Tracker — логирование текста, скопированного в буфер обмена.
Пример использования (фрагмент скрипта “Resource Monitor”):
import psutil
import time
def monitor(interval=5):
while True:
cpu = psutil.cpu_percent(interval=1)
mem = psutil.virtual_memory().percent
print(f"CPU: {cpu}%, MEM: {mem}%")
time.sleep(interval)
if __name__ == "__main__":
monitor()
🟢 Объединяет множество автономных скриптов в одну коллекцию🟢 Каждый скрипт выполняет отдельную задачу — от обработки изображений до мониторинга или анализа🟢 Можно клонировать проект и запускать нужные модули без лишней обвязки🟢 Отлично подходит для тех, кто любит “toolbox” для повседневных задач
🔗 Репозиторий GitHub
#скрипты
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤6👍6🔥4
Flask-Obscure🟢 Поддерживает разные схемы шифрования: num, hex, b32, b64 и tame (особый base32-вариант без гласных).🟢 При генерации URL через flask.url_for, автоматически превращает числовые ID в “замаскированную” форму, а при маршрутизации — обратно декодирует.🟢 Интеграция с Jinja2: фильтры доступны в шаблонах — можно прямо выводить “обфусцированные” ID.🟢 Использует 32-битное “соль” (salt), которую можно задать вручную или через конфигурацию Flask (OBSCURE_SALT) для уникального преобразования.
pip install Flask-Obscure
#библиотеки
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5❤4👍3
psutil, subprocess, time, logging, yaml/json или argparse — основной функционал строится на psutil. # Python 3.8+
import time
import psutil
import subprocess
import logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s %(levelname)s %(message)s')
WATCHLIST = [
{"name": "my_app.py", "cmd": ["python3", "/opt/myapp/my_app.py"], "max_mem_mb": 500.0}
]
def find_by_name(name):
procs = []
for p in psutil.process_iter(['pid','name','cmdline']):
try:
if p.info['name'] == name or (p.info['cmdline'] and name in ' '.join(p.info['cmdline'])):
procs.append(p)
except (psutil.NoSuchProcess, psutil.AccessDenied):
continue
return procs
def restart(cmd):
logging.info("Запускаю: %s", cmd)
subprocess.Popen(cmd)
def monitor_loop(interval=10):
while True:
for item in WATCHLIST:
procs = find_by_name(item['name'])
if not procs:
logging.warning("Процесс %s не найден — стартую", item['name'])
restart(item['cmd'])
else:
for p in procs:
try:
mem_mb = p.memory_info().rss / 1024**2
if item.get('max_mem_mb') and mem_mb > item['max_mem_mb']:
logging.warning("Память %s MB > %s — перезапуск %s", mem_mb, item['max_mem_mb'], item['name'])
p.terminate()
restart(item['cmd'])
except (psutil.NoSuchProcess, psutil.AccessDenied):
continue
time.sleep(interval)
if __name__ == "__main__":
monitor_loop()
🟢 Мониторит процессы и перезапускает упавшие.🟢 Основано на psutil — информация о процессах, CPU и памяти.🟢 В репозитории есть готовые bin/скрипты и пример конфигурации; можно быстро поставить в cron/systemd.🟢 Лёгкий MIT-проект — можно взять и адаптировать под свои нужды (лимиты, политики рестарта, логирование).
#скрипты
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤5👍5🔥2😁1
pure-utils🟢 Стандартная библиотека только — нет внешних зависимостей, всё “чистый Python”.🟢 Поддержка аннотаций типов, чистый интерфейс, утилиты без побочных эффектов.🟢 Возможность использовать стандартные структуры данных, но с полезными дополнениями (например, расширенные методы работы с контейнерами).🟢 Хорошая документация и примеры использования.
pip install pure-utils
#библиотеки
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤3
Pillow (для работы с изображениями), openpyxl или xlsxwriter (для чтения данных из Excel / CSV), os, argparse и др.from PIL import Image, ImageDraw, ImageFont
import csv
import os
def generate_cert(template_path, data_csv, output_folder, font_path, font_size, text_position):
img = Image.open(template_path)
draw = ImageDraw.Draw(img)
font = ImageFont.truetype(font_path, font_size)
with open(data_csv, newline='', encoding='utf-8') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
name = row['name']
cert = img.copy()
d = ImageDraw.Draw(cert)
d.text(text_position, name, font=font, fill=(0, 0, 0))
out_path = os.path.join(output_folder, f"cert_{name}.png")
cert.save(out_path)
print(f"Saved certificate for {name} → {out_path}")
if __name__ == "__main__":
generate_cert(
template_path="templates/cert_template.png",
data_csv="data/people.csv",
output_folder="out",
font_path="fonts/Times.ttf",
font_size=64,
text_position=(300, 400)
)
🟢 Читает CSV / Excel с именами (и другими данными)🟢 Открывает шаблон сертификата как изображение🟢 Накладывает текст (имя / данные) в указанную позицию🟢 Сохраняет индивидуальные сертификаты для каждого в отдельный файл🟢 Можно масштабировать: для 1000 человек — запуск скрипта, отдых
#скрипты
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤7👍6🔥3
Olipy🟢 Модули с разными эстетическими эффектами: можно применять стили, трансформации, декорации к тексту.🟢 Использует TextBlob для разбора текста; при установке подгружаются зависимости, но сама Olipy — относительно лёгкий компонент к экосистеме.🟢 Поставляется с примерами скриптов, которые показывают, как генерировать стилизованный текст как отдельные утилиты.
pip install olipy
#библиотеки
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥3❤2
riddle.py из репозитория Trivernis/python-utility-scriptsrequests, os, argparse (в репозитории указаны зависимости) riddle.py — скрипт, который скачивает все изображения из одного или нескольких сабреддитов. Удобен, если ты хочешь быстро собрать изображения по теме, не вручную копируя ссылки. import os
import requests
import argparse
def download_subreddit_images(subreddit, limit=50, dest="downloads"):
os.makedirs(dest, exist_ok=True)
url = f"https://www.reddit.com/r/{subreddit}/.json?limit={limit}"
headers = {"User-Agent": "Mozilla/5.0"}
resp = requests.get(url, headers=headers)
data = resp.json()
for post in data.get("data", {}).get("children", []):
img_url = post["data"].get("url")
if img_url and (img_url.endswith(".jpg") or img_url.endswith(".png")):
filename = os.path.basename(img_url)
path = os.path.join(dest, filename)
try:
img_data = requests.get(img_url).content
with open(path, "wb") as f:
f.write(img_data)
print("Downloaded:", filename)
except Exception as e:
print("Ошибка скачивания", img_url, e)
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Download images from subreddit")
parser.add_argument("subreddit", help="Name of subreddit")
parser.add_argument("--limit", type=int, default=20, help="How many posts to parse")
parser.add_argument("--dest", default="downloads", help="Destination folder")
args = parser.parse_args()
download_subreddit_images(args.subreddit, limit=args.limit, dest=args.dest)
🟢 Делает HTTP-запрос к API Reddit (JSON)🟢 Парсит посты, проверяет, есть ли в url изображения (.jpg/.png)🟢 Скачивает найденные изображения в папку🟢 Поддерживает указание количества постов через параметр limit🟢 Печатает статус каждого скачанного файла
#скрипты
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍3🔥2
PyXAB📌 PyXAB — библиотека для X-armed бандитов и онлайн blackbox оптимизации. Предназначена для задач, где пространство действий непрерывно или высокоразмерно, и классические дискретные методы бандитов не подходят. Реализует такие алгоритмы, как HOO, StoSOO, HCT, GPO и др., а также даёт инструменты для оценки и синтетические функции для экспериментов.
🟢 Поддерживает несколько алгоритмов X-armed бандитов — HOO, StoSOO, HCT, а также более современные подходы GPO, VHCT и др.🟢 Встроенные синтетические функции (test functions) для отладки и сравнительной оценки алгоритмов.🟢 Гибкость в выборе разбиения пространства, параметров модели и стратегии поиска.🟢 Документированная программная обвязка: интерфейсы для запуска экспериментов, анализа результатов, визуализации.🟢 Открытая лицензия MIT, исходники на GitHub, доступна через PyPI.
pip install pyxab
#библиотеки
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥4❤2
• Установка зависимостей:
pip install winshell tqdm pywin32
• Запуск:
python cleanup.py
🟢 Автоматически чистит “мусор” на Windows: рабочий стол, временные директории, логи и др.🟢 Имеет удобное меню, чтобы выбрать, что именно очистить.🟢 Запрашивает права администратора, если нужно.🟢 Показывает прогресс операций и логирует действия.
#скрипты
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3😁3❤2🔥1
python_utilities/Parallelizer💾 Модули:
multiprocessing, threading, os, io_tools, scripting — часть общей библиотеки утилит python_utilities на GitHub. from python_utilities.parallel import Parallelizer, make_data_iterator
from python_utilities.scripting import setup_logging
def process_item(item, constant=10):
return item * constant
def main():
setup_logging()
data = list(range(100))
par = Parallelizer(func=process_item, data=data, n_jobs=4)
results = par.run()
print(results)
if __name__ == "__main__":
main()
🟢 Унифицирует способы параллелизации: локально или распределённо🟢 Не требует переписывания кода функций под “parallel” — простая обёртка🟢 Подходит для обработки больших наборов данных или задач, которые можно распараллелить
#скрипты
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🔥1
Generic-Util🟢 Содержит модули примерно таких групп: benchmarking — контекст-менеджеры и функции, чтобы измерять время выполнения разных реализаций, и суммировать результаты.🟢 Утилиты “функционального стиля” (маппинг, фильтрация, композиция), которые облегчают работу, особенно если часто пишешь вспомогательный код.🟢 Не зависит от внешних тяжёлых библиотек, использует стандартную библиотеку + минимум нужного.🟢 Подходит, когда надо быстро сравнить реализации, профилировать, или просто сделать утилиту “на лету”, не заморачиваясь с boilerplate.
pip install Generic-Util
#библиотеки
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤5🔥3
os, shutil (стандартные), python_minifier (для удаления пробелов/комментариев и “минификации”), GitPython (для работы с git, если скрипты из репозитория). packer.py из gist пользователя JMcrafter26 автоматически берёт заданный перечень файлов Python (основной + вспомогательные), минифицирует их, объединяет в один файл — удобно для дистрибуции, когда хочется отправить один “собранный” скрипт вместо множества модулей. import os
import shutil
from python_minifier import minify
from git import Repo # GitPython
# Настройки
remove_comments = True
minify_rename_vars = False
program_allowed = [
'main_server.py',
'packets.py',
'protocol.py',
'regex_patterns.py',
'socket_handler.py',
]
def load_files(files):
contents = []
for file in files:
with open(file, 'r', encoding='utf-8') as f:
text = f.read()
if remove_comments:
# python_minifier(minify) сам удаляет комментарии
text = minify(text, rename_locals=minify_rename_vars)
contents.append(f"# Begin {file}\n" + text + f"\n# End {file}\n")
return "\n".join(contents)
def package_script(output_file='packaged.py'):
code = load_files(program_allowed)
with open(output_file, 'w', encoding='utf-8') as f:
f.write(code)
print(f"Packaged into {output_file}")
if name == "__main__":
package_script()
🟢 Берёт список Python файлов, объединяет их содержимое в один файл.🟢 Минифицирует код: убирает комментарии, пробелы, возможно переименование переменных.🟢 Позволяет собрать все модули проекта в один “соло-скрипт”, удобно для простого деплоя или когда структура проекта не критична.🟢 Уменьшает количество файлов, упрощает распространение скрипта без множества зависимостей файловой структуры.
#скрипты
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍4🔥2
pypi-latest📌 pypi-latest — утилита-библиотека, которая проверяет, является ли установленная версия пакета на твоём компьютере самой последней, доступной на PyPI. Удобна, если ты работаешь с множеством зависимостей и хочешь быстро убедиться, что всё “в актуале”.
🟢 Простота — минимализм: всего одна задача — проверка версии и сообщение о необходимости обновления.🟢 Работает как библиотека и как инструмент командной строки.🟢 Лёгкая зависимость — не требует множества дополнительных пакетов.🟢 Может быть интегрирована в скрипты или CI-процессы, чтобы автоматически предупреждать разработчика, что пакет устарел.
pip install pypi-latest
#библиотеки
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤3🔥1
Установка:
cd autoDownloader
pip install -r requirements.txt
Конфиг
config.json:{
"items": [
{
"name": "Новости Блога",
"dest_dir": "/home/user/auto_downloads",
"provider": {
"type": "RssProvider",
"url": "https://someblog.com/rss.xml",
"xpaths": {
"title": "/item/title",
"items": "//item",
"url": "/item/link"
}
},
"cache": {
"type": "FileCache",
"path": "/home/user/auto_downloads/cache.txt"
},
"downloader": {
"type": "HttpDownloader",
"method": "GET"
},
"post_downloads_script": "/home/user/scripts/notify_new.sh"
}
]
}🟢 Проверяет источники на новые записи / ссылки🟢 Если появляются новые URL — скачивает🟢 Использует кэш, чтобы не перезагружать то, что уже скачано🟢 Можно подцепить свои скрипты перед/после скачивания, чтобы делать автоматические действия🟢 Отлично подходит для автоматизации сбора данных, распространения материалов или мониторинга новых публикаций
#скрипты
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5❤3👍3
python-magic🟠 Определение формата по содержимому: magic.from_file("file") или magic.from_buffer(data) — когда файл ещё не записан на диск.🟠 Можно вернуть MIME-тип: mime=True.🟠 Может быть небезопасным для параллельного использования (не потокобезопасен) при некоторых конфигурациях.🟠 Требует установить libmagic (C-библиотека) на систему: на Linux/Unix её обычно устанавливают через менеджер пакетов, на Windows — использовать python-magic-bin с DLL.
pip install python-magic
На Windows:
pip install python-magic-bin
#библиотеки
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤4👍2
📱
Python 3.xurllib.request, json, os, subprocess, getopt — используется встроенный HTTP-API GitHub и системные вызовы git clone. import getopt
import json
import os
import subprocess
import sys
from urllib.request import urlopen
def Usage():
print("Usage: %s -u <github user> -d <directory>" % sys.argv[0])
def main():
githubUser = ''
destDirectory = ''
try:
opts, args = getopt.getopt(sys.argv[1:], "u:d:h")
for o, a in opts:
if o == '-u':
githubUser = a
elif o == '-d':
destDirectory = a
elif o == '-h':
Usage()
sys.exit(0)
except getopt.GetoptError as e:
print(str(e))
Usage()
sys.exit(2)
if not githubUser or not destDirectory:
print("Use -u for GitHub user, -d for destination dir")
Usage()
sys.exit(0)
reposLink = f"https://api.github.com/users/{githubUser}/repos?type=all&per_page=100&page=1"
f = urlopen(reposLink)
repos = json.loads(f.readline())
print("Total repos:", len(repos))
os.makedirs(destDirectory, exist_ok=True)
os.chdir(destDirectory)
os.makedirs("repos", exist_ok=True)
os.makedirs("gists", exist_ok=True)
# Скачиваем репозитории
os.chdir("repos")
for repo in repos:
print("Cloning:", repo['html_url'])
subprocess.call(['git', 'clone', repo['html_url']])
# Скачиваем гисты
os.chdir("../gists")
gistsLink = f"https://api.github.com/users/{githubUser}/gists"
f = urlopen(gistsLink)
gists = json.loads(f.readline())
print("Total gists:", len(gists))
for gist in gists:
print("Cloning gist:", gist.get('git_pull_url'))
subprocess.call(['git', 'clone', gist.get('git_pull_url')])
if __name__ == "__main__":
main()
🟢 Получает список репозиториев пользователя через GitHub API🟢 Клонирует каждый репозиторий командой git clone🟢 Получает список гистов и клонирует их как отдельные git-репо🟢 Кладёт всё это в структуру папок: repos/ и gists/ в указанном каталоге
#скрипты
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍3🔥1
yt-dlp, os, sys, ffmpeg — используется для скачивания и обработки медиафайлов.yt-downloader-multi https://www.youtube.com/watch?v=VIDEO_ID --format mp3 --quality 192k
🟢 Скачивает одиночные видео по ссылке🟢 Скачивает все видео из плейлистов🟢 Сохраняет контент в указанную папку, создавая её при необходимости🟢 Поддерживает оффлайн-архивирование медиаконтента
#скрипты
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤4🔥2
pytube🟢 Простота использования — интуитивно понятный интерфейс для скачивания видео и аудио.🟢 Поддержка субтитров — возможность загрузки субтитров в формате .srt.🟢 Получение миниатюр — легкий доступ к URL-адресам миниатюр видео.🟢 Отсутствие сторонних зависимостей — не требует установки дополнительных пакетов.🟢 Поддержка прогрессивных и DASH-потоков — скачивайте видео и аудио в различных качествах.🟢 Загрузка целых плейлистов — скачивайте все видео из плейлиста с помощью одной команды.🟢 Обработка событий — настройка обратных вызовов для отслеживания прогресса загрузки и завершения процесса.
pip install pytube
#библиотеки
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍3
✅
FastText-aligned🟢 Поддержка подгонки (alignment) методом Procrustes, Orthogonal Procrustes и др.🟢 Совместимость с эмбедингами fastText (бинарные и текстовые форматы).🟢 API, похожий на оригинальный fastText: load_model, align_to, get_vector.🟢 Работает как вспомогательный инструмент, легко интегрируется в NLP-пайплайны, например для кроссъязыковых задач.
pip install fasttext-aligned
🔢 Документация
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍2🔥1