Skip to content

2Xsave/insave

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📸 insave_core

Rust-библиотека и CLI для скачивания рилсов и постов Instagram (видео, фото, карусели)

CI License: MIT Crate

✨ Возможности

  • Скачивание видео из рилсов (/reel/) и изображений из постов (/p/)
  • Поддержка каруселей (несколько фото в одном посте)
  • Парсинг метаданных через JSON-блоки в <script> тегах
  • Ротация User-Agent, поддержка прокси и cookies
  • Повторные попытки с джиттером и управление таймаутами
  • Python-биндинги через pyo3/maturin

🚀 Быстрый старт (CLI)

cargo run --release -- https://www.instagram.com/reel/ABC123/
cargo run --release -- https://www.instagram.com/p/DEF456/ --output-root ./downloads

Аргументы

Аргумент Описание
url Публичная ссылка на рилс или пост (обязателен)
--output Желаемое имя файла или каталога
--output-root Корень файлов выгрузки
--config Явный путь к JSON-конфигу
--skip-check Пропустить предварительную проверку

🦀 Rust API

use insave_core::{execute_download, DownloadRequest};

let request = DownloadRequest {
    url: "https://www.instagram.com/reel/ABC123/".to_string(),
    output: None,
    skip_check: false,
    output_root: None,
    config_path: None,
    runtime_config: None,
    max_size_mb: None,
};

let outcome = execute_download(request).await?;

🐍 Python API

Сборка Python-модуля:

cargo build --release --features python
# либо используйте maturin для упаковки в wheel
maturin develop

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

from insave_core import download_as_files, download_as_binary

files = download_as_files(url="https://www.instagram.com/reel/ABC123/")

binary = download_as_binary(url="https://www.instagram.com/p/DEF456/")
for asset in binary.assets:
    print(asset.filename, len(asset.content))

download_as_binary не создаёт файлы на диске — все данные живут в памяти. download_as_files сохраняет медиа и metadata.json рядом с ассетами.

⚙️ Конфигурация

Настройки берутся из instagram_config.json (путь можно переопределить через INSTAGRAM_CONFIG_PATH).

Пример конфига:

{
  "cookies": { "sessionid": "your_session_id" },
  "proxies": ["socks5://127.0.0.1:9050"],
  "max_retries": 3,
  "retry_backoff": 1.25,
  "request_timeout": 15.0,
  "output_dir": "downloads"
}

Переменные окружения

Переменная Описание
INSTAGRAM_CONFIG_PATH Путь к JSON-конфигу
INSAVE_COOKIES_JSON JSON-строка с парами cookie
INSAVE_COOKIE Простая строка "a=b; c=d"
INSAVE_PROXIES Список прокси через запятую
INSAVE_MAX_RETRIES Количество попыток повтора HTTP
INSAVE_RETRY_BACKOFF Базовая задержка между повторами (секунды)
INSAVE_REQUEST_TIMEOUT Таймаут запроса (секунды)
INSAVE_ACCEPT_LANGUAGE Значение заголовка Accept-Language

Приоритет: переменные окружения → значения из файла → значения по умолчанию.

📄 Лицензия

MIT — см. LICENSE.

About

Instagram media downloader core — Rust async library and CLI

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages