Skip to content

Latest commit

 

History

History
545 lines (392 loc) · 65.7 KB

File metadata and controls

545 lines (392 loc) · 65.7 KB

instagram_monitor release notes

This is a high-level summary of the most important changes.

Changes in 3.9.1 (27 Aug 2026)

Version 3.9.1 makes every published download verifiable, adds automated defect checks on every change, keeps Instagram text safe in the Terminal Dashboard and fixes environment-variable secrets being ignored when no dotenv file is present.

Features and improvements:

  • IMPROVE: Verifiable release downloads - Releases now ship a SHA256SUMS.txt and a signed build attestation, including the .intoto.jsonl bundle, checkable with gh attestation verify
  • IMPROVE: Automated defect checks on every change - A pinned Ruff lint pass now runs in CI before the test suite, plus optional pre-commit hooks and a shared .editorconfig
  • IMPROVE: Corrected and improved wording in setup wizard and doctor preflight

Bug fixes:

  • BUGFIX: Disabled alert channels are reported as disabled - --doctor validated a webhook URL and reported the alert choices as valid even when WEBHOOK_ENABLED was False, and offered to send a real test through a channel the user had switched off. It now reports Webhook alerts are disabled and stops there. Email is gated the same way
  • BUGFIX: Environment variables work without a dotenv file - Secrets exported as environment variables, such as SESSION_PASSWORD, SMTP_PASSWORD, WEBHOOK_URL or NTFY_ACCESS_TOKEN, were applied only when a dotenv file also existed, so an export-only setup silently fell back to the shipped defaults. They are now honored on their own, including with --env-file none.

Security and privacy:

  • SECURITY: Instagram text stays safe in the Terminal Dashboard - Captions, status details and activity messages now have terminal control sequences removed before Rich renders them, so a malicious profile can no longer clear the screen, rename the window or overwrite dashboard text

Changes in 3.9 (22 Aug 2026)

Version 3.9 improves safety and reliability. The Web Dashboard is harder for other websites to reach or control. Its setup can now start with no accounts so you can add them later in your browser. Instagram text is made safe before it appears in your terminal, emails or CSV files. Follow alerts are more reliable when a list is incomplete. Errors explain how to fix the problem. This release also adds offline follow relationship analysis, a security policy and regular security checks.

Features and improvements:

  • NEW: Offline follow relationship analysis - Use --analyze-follows or the Web Dashboard chart button to compare follower and following lists you already saved. It shows mutual accounts, accounts that do not follow you back and fans without contacting Instagram. It shows when each list was saved and warns if they are more than an hour apart. Totals include every account. The two username lists show up to 500 accounts each (thanks @dogukannparlak, from #121)
  • IMPROVE: Errors that tell you what to do - Monitoring errors now end with a To fix: action and a Guide: link where available. DNS errors say when the tool cannot find www.instagram.com instead of showing a vague network error. Monitoring automatically continues when DNS starts working. Use --debug to see the technical details
  • IMPROVE: Doctor works with a broken setup - --doctor now reports an invalid configuration as FAIL with the line number and reason. It keeps running so you can check a file you are fixing. It also checks SENDER_EMAIL and RECEIVER_EMAIL before connecting. Placeholder email addresses no longer pass the email test then fail on every notification. The progress line also redraws cleanly
  • IMPROVE: Lighter human mode - The BeHuman followee visit now checks only the first page of accounts your session follows before choosing one. This greatly reduces extra Instagram requests for accounts that follow thousands of people
  • IMPROVE: Faster monitoring of multiple targets - A target can now start fetching while another target shows a follower-download progress bar. It fetches without a second bar instead of waiting for the first download to finish
  • IMPROVE: Clearer ntfy customization - Generated configuration now explains that WEBHOOK_TEMPLATE, WEBHOOK_USERNAME and WEBHOOK_AVATAR_URL work only with Discord. ntfy does not use a template. For ntfy options such as priority or tags use WEBHOOK_HEADERS
  • IMPROVE: Clearer issue reports and contribution guide - New issue forms ask for the version, install method, operating system, login method and --doctor output. Security problems are directed to private reporting. New CONTRIBUTING.md, CODE_OF_CONDUCT.md and a pull request template explain how to contribute
  • IMPROVE: Published security policy - SECURITY.md explains how to report a security problem privately through GitHub security advisories. It also explains which versions receive fixes and safe deployment basics: keep the password-free Web Dashboard on your own machine, store secrets in owner-only .env files and use configuration files only for settings
  • IMPROVE: Clearer dependency and security checks - New THIRD_PARTY_NOTICES.md lists each dependency, its license and why the project uses it. Automated checks look for known vulnerable dependencies, create a list of installed components, scan the container image and scan the source code. They run on every change and weekly, so newly reported problems can still be found

Bug fixes:

  • BUGFIX: Reliable follower and following alerts - The tool now ignores a changed follower count only after a complete list comparison confirms that no usernames changed. No-login mode, skipped or failed downloads and configured download limits still alert about count changes. An incomplete download is no longer saved as the new comparison list. The tool now also logs Followers list changed when one person follows and another unfollows between checks (@stdpankaj, closes #118 and #119)
  • BUGFIX: Working webhook tests - --send-test-webhook and the dashboard Test Webhook button now send a test message even when all event notifications are off. A default your_webhook_url value is treated as not configured. Normal event notifications still follow your settings. Use --debug to learn why a notification was skipped
  • BUGFIX: Human mode without hashtags - An empty MY_HASHTAGS setting now skips only hashtag browsing. The Explore, profile and followee actions still run
  • BUGFIX: Stable long-running dashboard sessions - Repeated dashboard setting or session changes no longer build up until they stop a monitor. Restarting after a flagged session also keeps your SKIP_FOLLOW_CHANGES choice. A target that is still stopping cannot start a duplicate monitor
  • BUGFIX: Safer live setting changes - The Web Dashboard now rejects invalid values before changing a live setting. This includes unsafe URLs, invalid ports, invalid intervals and invalid hour ranges. Unsupported CURL_CFFI_IMPERSONATE or --impersonate values now name the supported choices instead of causing a vague connection error
  • BUGFIX: Reliable media downloads and dashboard links - Images and videos are checked before they replace an existing saved file. Incomplete downloads, files that are too large and HTML error pages leave the existing file unchanged. Each story, post or reel now starts with a clean media record. Story webhooks no longer depend on email settings. Recently updated media stays in the dashboard even after it reaches 1,000 items
  • BUGFIX: Older configuration files keep loading - Configuration files made by version 3.0 now start normally. Settings removed or renamed in later versions are ignored with a note that tells you which lines to delete. Misspelled settings are still reported as errors
  • BUGFIX: Startup settings apply immediately - CLEAR_SCREEN = False now stops the startup screen clear. COLORED_OUTPUT now applies to the startup banner. The startup internet check now uses your CHECK_INTERNET_URL and CHECK_INTERNET_TIMEOUT values
  • BUGFIX: Faster recovery from a flagged session - When several targets see the same blocked session or IP address, they now share the first result instead of each waiting for its own Instagram request. Long Instagram waits no longer delay webhooks, media downloads or proxy and IP checks
  • BUGFIX: Terminal restored after quitting the dashboard - Pressing q or Ctrl+C now restores normal terminal typing before the tool exits
  • BUGFIX: Accurate dashboard startup errors - The tool reports a port conflict only when the address is actually in use or refused. Other startup errors show their real cause
  • BUGFIX: Dashboard targets survive a restart - Targets added or removed in the browser are now saved to TARGET_USERNAMES when you press Generate Config. A restarted service therefore monitors the same list. The confirmation shows the full file path so you can see when a service started in / is not updating the file passed to --config-file (closes #122)
  • BUGFIX: Target-free dashboard setup - Leave the setup wizard's target question empty to start with only the Web Dashboard then add accounts in your browser. Terminal Dashboard and plain-text setups still require at least one target

Security and privacy:

  • SECURITY: The Web Dashboard accepts only your requests - The dashboard now accepts requests only for 127.0.0.1, localhost, ::1 or your configured WEB_DASHBOARD_HOST. This stops a malicious website from using your browser to control the dashboard. Changes such as stopping monitoring, requesting extra checks, clearing the activity log or sending a test notification must come from the dashboard page itself. Use WEB_DASHBOARD_ALLOWED_HOSTS to add names you intentionally use. Setting it to "*" restores the old behavior. Scripts can still use 127.0.0.1 with a JSON request
  • SECURITY: Saved credentials stay with the right server - If you change SMTP_HOST or SMTP_PORT without entering the password again, the dashboard removes the saved SMTP password. Enter it again in the same save to keep email working. Changing WEBHOOK_URL to a different server also removes NTFY_ACCESS_TOKEN. Changing only an ntfy topic on the same server keeps the token
  • SECURITY: Opening the dashboard does not contact Instagram - The Last Fetched panel shows a thumbnail only when the monitor already saved it on your machine. Opening the dashboard no longer tells Instagram your IP address or which accounts you watch. Failed downloads show a placeholder. Instagram links are also checked before display so they cannot run code in your browser
  • SECURITY: Safer dashboard input - Generated configuration files must use a *.conf name. The dashboard cannot overwrite scripts or hidden files in your working directory. It accepts only valid view options and safe media file names. It imports Firefox cookies only from profiles it found and only for real instagram.com addresses. The dashboard shows media only when the monitor registered the file. It never returns webhook or proxy URLs in settings data. The CSV file name field accepts a file name only. An absolute CSV_FILE path in the configuration or -b still works
  • SECURITY: Configuration files contain settings only - The tool now reads configuration files as settings. It does not run them as Python code. Only known SETTING = value lines with plain values are accepted. Imports, function calls and other code are rejected with the line number. A rejected file changes nothing. This protects you when you start the tool in a downloaded archive or shared directory. Existing valid configuration files still work
  • SECURITY: Instagram text cannot control your terminal or files - The tool removes special terminal commands from biographies, captions, story text, comments and usernames before printing or logging them. A malicious profile cannot clear your screen, rename your terminal window or overwrite text you already read. Text that could act as a spreadsheet formula is saved safely in CSV files. Email alerts also display this text safely. IMGCAT_PATH now opens its image viewer without creating a shell command
  • SECURITY: Notification text stays out of web addresses - ntfy messages are sent in request headers or the request body instead of the web address. This avoids putting follower names, captions or biographies in URLs that servers and proxies often log. Webhooks now require HTTPS, check certificates and do not follow redirects. A changed destination cannot receive custom WEBHOOK_HEADERS meant for the original address
  • SECURITY: Private configuration backups - Configuration backups made by the setup wizard or --generate-config now stay owner-only and keep the original file's permissions
  • SECURITY: Safer container and release builds - Container images now remove pip and build-only packages after installation. This reduces the installed software and removes known high-severity issues. When you start the dashboard in Docker, the tool now explains that Docker uses 0.0.0.0 inside the container. It shows -p 127.0.0.1:PORT:PORT to keep the dashboard on your machine and warns before you expose it publicly. Automated project jobs use fixed versions of third-party actions so a changed tag cannot alter the release process

Changes in 3.8.1 (04 Aug 2026)

Version 3.8.1 streamlines first-time setup and diagnostics, adds portable logs and prevents webhook noise from repeated monitoring failures.

Features and improvements:

  • IMPROVE: Clear timezone recovery - When automatic detection fails, the startup error now identifies the optional tzlocal dependency, shows how to install it and explains that LOCAL_TIMEZONE can be set manually
  • IMPROVE: Portable log separators - The new ASCII_LOG_SEPARATORS setting controls whether separator-only lines saved to log files use ASCII hyphens. "Auto" enables them on Windows by default, "On" enables them on every operating system and "Off" preserves Unicode separators. Terminal separators stay Unicode. Log files and all other logged text remain UTF-8.
  • IMPROVE: Flexible setup intervals - The setup wizard accepts polling interval durations such as 30s, 2m, 1.5h, 1h 30m and 1d while still saving the value as seconds
  • IMPROVE: Actionable Doctor output - Details remain attached to their checks, final target-specific log destinations are validated and pycookiecheat is clearly identified as a Chromium-only import dependency that Firefox does not need
  • IMPROVE: Beginner Python installation walkthroughs - New Windows, macOS and Linux instructions guide first-time Python users from checking prerequisites through installation and the setup wizard

Bug fixes:

  • BUGFIX: Thresholded monitoring alerts - ERROR_FAILURE_THRESHOLD now applies consistently to email and webhook errors so repeated session failures alert once at the configured count instead of sending a webhook on every retry. Alerts for flagged sessions remain immediate (closes #116)

Changes in 3.8 (30 Jul 2026)

Version 3.8 strengthens Discord and ntfy webhook delivery, adds safer private URL setup, improves proxy IP detection and brings better notification controls.

Features and improvements:

  • IMPROVE: Added ordered proxy IP lookup fallback endpoints with backward-compatible single-URL configuration, IPv4 and IPv6 validation plus documented privacy controls (thanks @tomballgithub, from #113)
  • NEW: Added private webhook URL setup through --set-webhook-url with hidden entry and complete HTTPS destination validation
  • IMPROVE: Added stricter webhook request validation for destinations, avatars, templates, transforms and expanded headers plus Discord mention suppression
  • IMPROVE: Added bounded webhook delivery with isolated requests, capped rate-limit delays, one retry for temporary failures and automatic provider correction across CLI, Doctor and Web Dashboard flows
  • IMPROVE: Added native ntfy image attachments with a 5 MiB limit and automatic text-only fallback when image preparation or upload fails
  • IMPROVE: Made the status, follower and error webhook controls enable webhook delivery for the current run
  • IMPROVE: Split the startup notification summary into compact email and webhook rows across concise, verbose and logged views

Bug fixes:

  • BUGFIX: Stopped startup summaries and Web Dashboard setting-change logs from writing private webhook URLs to logs
  • BUGFIX: Kept long ntfy messages below its 4 KB attachment boundary, added a visible truncation explanation and preserved complete UTF-8 characters
  • BUGFIX: Restored green On and red Off status cues in compact notification rows without coloring category text
  • BUGFIX: Made SIGHUP apply rotated proxy credentials to active Instaloader sessions and redetect Discord or ntfy when the private webhook destination changes
  • BUGFIX: Made proxy IP failover try every configured endpoint before the long retry delay, reject invalid successful responses without crashing and preserve custom endpoint lists in generated configuration

Changes in 3.7.1 (24 Jul 2026)

Bug fixes:

  • BUGFIX: Updated the built-in guide link to the renamed Setup & First Run page so CLI help and recovery guidance no longer point to the retired Quick Start URL

Changes in 3.7 (23 Jul 2026)

Version 3.7 makes Docker onboarding portable across macOS, Linux and Windows. It adds host-aware Firefox session import and keeps setup files safe on the persistent /data bind mount. Generated recovery commands now preserve targets, custom files and Web Dashboard ports from import through Doctor and launch.

Features and improvements:

  • IMPROVE: Kept Firefox session import as the recommended Docker setup choice while deferring the import until setup files are saved. The wizard now asks which host environment runs Docker then prints the matching read-only import command for macOS, standard Linux, Snap, Flatpak, Windows PowerShell or Windows Command Prompt
  • NEW: Added Windows-host Firefox session import for direct Docker and Docker Compose through the normal %APPDATA%\Mozilla\Firefox profile root with shell-specific PowerShell and Command Prompt commands
  • IMPROVE: Expanded direct Docker and Docker Compose Firefox import documentation with complete commands for every supported host profile layout
  • IMPROVE: Preserved setup guidance across one-time session imports by keeping terminal history visible and repeating the exact Doctor and monitoring commands after a successful Firefox import
  • IMPROVE: Printed the install-aware monitoring command after a successful Doctor run while preserving explicit targets, selected files and Web Dashboard port publishing

Bug fixes:

  • BUGFIX: Stopped the setup wizard from offering Doctor before a deferred Firefox session import succeeds, avoiding expected authentication failures during incomplete Docker setup
  • BUGFIX: Removed Linux user mapping from generated macOS Docker commands while preserving host UID and GID mapping for Linux commands
  • BUGFIX: Anchored default container setup files to the bind-mounted /data directory so the generated configuration and dotenv files survive the temporary setup container
  • BUGFIX: Preserved Web Dashboard port publishing in Docker and Docker Compose monitoring commands printed after Firefox import then replaced container-only 0.0.0.0 browser links with the reachable loopback URL
  • BUGFIX: Rejected Docker setup destinations outside /data instead of saving ephemeral files then printing commands for different paths
  • BUGFIX: Generated direct Docker commands with ${PWD} for macOS, Linux and Windows PowerShell then switched to %cd% for Windows Command Prompt while retaining Linux user mapping
  • BUGFIX: Prevented local setup from offering immediate monitoring after a declined or failed browser import unless Doctor validates an existing session
  • BUGFIX: Rejected conflicting standalone actions and setup targets instead of silently ignoring part of the command
  • BUGFIX: Matched generated Docker and one-off Compose port publishing to a non-default Web Dashboard port
  • BUGFIX: Restricted terminal time highlighting to valid complete clock values so Docker mappings such as 8000:8000 are no longer partially colored as dates
  • BUGFIX: Prevented a Windows traceback after Ctrl+C when monitoring was started directly from setup. The setup parent now treats its duplicate console interrupt as the same clean termination already handled by the monitoring child

Changes in 3.6.1 (22 Jul 2026)

Features and improvements:

  • IMPROVE: Added automatic Firefox profile discovery for native Linux, Snap and Flatpak installations. CLI and Web Dashboard session imports now locate all three layouts and de-duplicate cookie databases
  • IMPROVE: Improved CLI and --doctor recovery guidance with installation-aware Firefox session import commands and direct links for session, rate-limit, proxy, SMTP, webhook and configuration errors

Bug fixes:

  • BUGFIX: Made the Compose service pass /data/.env explicitly so docker compose up loads saved secrets even when config does not set DOTENV_FILE

Changes in 3.6 (22 Jul 2026)

Version 3.6 focuses on flexible, dependable notifications and safer guided configuration. It adds native ntfy support with protected-topic authentication, interactive delivery checks in --doctor and an editable setup summary, while preserving Discord compatibility and strengthening Docker defaults, saved launch behavior and Web Dashboard exposure.

Features and Improvements:

  • NEW: Added native ntfy webhook notifications for status, follower and error events. Set WEBHOOK_PROVIDER = "ntfy" and save a complete ntfy topic URL in WEBHOOK_URL or select ntfy in the setup wizard or Web Dashboard. The setup wizard also accepts a bare ntfy.sh topic name and expands it to a complete URL
  • NEW: Added authentication for protected ntfy topics via NTFY_ACCESS_TOKEN support with Bearer authentication, hidden setup wizard collection and precedence over custom Authorization headers in WEBHOOK_HEADERS
  • IMPROVE: Preserved Discord as the default webhook provider for backward compatibility, including custom payload templates, headers, transformations, proxy routing and Discord image attachments
  • IMPROVE: Added provider validation to --doctor, provider visibility in startup and dashboard summaries plus a --webhook-provider {discord,ntfy} command-line option
  • IMPROVE: Extended interactive --doctor runs with separate tests for email and webhook channels. Each approved test sends one real message. Doctor never writes files and non-interactive runs remain message-free
  • IMPROVE: Sent native ntfy messages as bounded UTF-8 text with the alert subject as the title, event field details in the body and existing topic query parameters preserved for authentication
  • IMPROVE: Added an editable setup summary so answers can be reviewed before saving
  • IMPROVE: Simplified browser onboarding with separate Firefox and Chromium choices plus optional pycookiecheat installation
  • IMPROVE: Made generated commands portable across Python installations and custom config paths
  • IMPROVE: Added confirmation, backups and validation when replacing configuration files
  • BUGFIX: No-argument launches now honor saved targets and Web Dashboard mode
  • BUGFIX: Improved Docker and Compose support for Linux user mappings, persistent sessions and saved interface choices
  • SECURITY: Limited Docker Web Dashboard publishing to the host loopback interface

Changes in 3.5 (01 Jul 2026)

Version 3.5 focuses on making the tool easier to use, configure and recover when something goes wrong, especially for non-technical users who asked for a simpler path. It brings guided setup, broader browser-session import, clearer diagnostics and friendlier recovery hints so first runs and everyday troubleshooting require less manual digging.

Features and Improvements:

  • NEW: Added an interactive setup wizard to make first-time setup easy for non-technical users. Run it with the --setup flag or launch the tool with no arguments from an interactive terminal and accept the prompt. The wizard asks a short series of questions, then writes a ready-to-run instagram_monitor.conf, routes secrets to a .env file and can start monitoring right away for local installs. It auto-detects whether the tool was installed via pip, run from a downloaded script, run under Docker or run via Docker Compose and tailors the suggested commands accordingly
  • NEW: Added session import from Chromium-based browsers (Chrome, Brave and Chromium) in addition to Firefox, via the new --import-browser-session --browser {firefox,chrome,brave,chromium} flags and a browser dropdown on the Web Dashboard Session page. Firefox stays the recommended source as it requires no additional dependencies, while Chromium-based browsers use the optional pycookiecheat package and work on macOS and Linux only. On Windows, where Chrome's app-bound encryption (Chrome 127+) blocks external cookie access, the tool detects the platform and recommends Firefox instead.
  • NEW: Added unified per-profile selection across all browsers. A single --browser-profile flag now picks a profile for any browser - a Firefox profile name (e.g. default-release) or a Chromium profile directory (e.g. Default, Profile 1) - with an interactive prompt when several exist and a profile picker on the Web Dashboard import flow. --cookie-file is the advanced explicit-database override for every browser. For Chromium-based browsers the cookie database is resolved directly, so both the legacy <profile>/Cookies and the newer <profile>/Network/Cookies layouts work
  • NEW: Added an ASCII art startup banner that prints on launch. It uses pure ASCII for broad terminal compatibility and follows the configured color theme, replacing the previous plain one-line version header
  • IMPROVE: The startup summary now prints a concise view on the terminal that leads with the monitored targets and hides settings left at their default or turned off, so the banner stays on screen and the key details (targets, session mode, polling interval, where output goes) are no longer buried in noise. The full configuration is still written to the log for troubleshooting and can be shown on the terminal with --verbose/--debug
  • NEW: Added an animated demo (install, setup wizard and run) at the top of the README and docs home, generated from a committed VHS tape (demo.tape) so it can be re-rendered as the tool evolves
  • NEW: Added a docker-compose.yml and a .env.example so Docker users can get started with docker compose up instead of long docker run commands, with secrets kept in a copyable dotenv template
  • IMPROVE: Running the tool with no arguments from an interactive terminal now shows a short welcome with the most common commands and an offer to launch the setup wizard, instead of dumping the full help text
  • NEW: Published a documentation site at misiektoja.github.io/instagram_monitor, built with MkDocs Material and deployed via GitHub Actions. The README is now a concise landing page and the full reference guide
  • IMPROVE: The Web Dashboard now shows an actionable "No targets yet" empty state with an Add Target button instead of a permanent "Loading targets..." placeholder when no targets are configured
  • IMPROVE: A broken hand-edited config file now reports the offending line and a To fix: hint instead of a raw traceback
  • NEW: Added a --doctor preflight self-check. Version 3.5 introduced it as a read-only PASS/WARN/FAIL report with no email or webhook delivery. It covers optional dependencies, the config file and secrets, session validity, Instagram connectivity, target resolution and notification configuration with a To fix: next step on each failure plus a non-zero exit code if any check fails. The setup wizard offers to run it at the end
  • IMPROVE: Added action-oriented error hints. Common failures (invalid or expired session, challenge/checkpoint, rate limiting, missing session file, target not found, network problems, SMTP and webhook delivery errors) now print a concise To fix: next step instead of just the raw error
  • IMPROVE: Renamed the session modes from numbered Mode 1 / Mode 2 to intent-based No-login and Logged-in across console output, the Web Dashboard, the config template and the README, so you no longer have to remember which number means what
  • IMPROVE: Added an examples section to --help with copy-pasteable commands for guided setup, anonymous tracking, logged-in tracking and the web dashboard. The examples auto-detect how the tool was launched (pip, downloaded script, Docker or Docker Compose) and print matching commands the same way the setup wizard does
  • IMPROVE: The old --import-firefox-session flag is kept as a backward-compatible alias for --import-browser-session --browser firefox
  • IMPROVE: Expanded the offline pytest suite to increase coverage of critical monitoring workflows, including webhook delivery, paginated follower/following fetching, Web Dashboard endpoints, posts/reels count detection, leaked-collab reporting, profile-picture creation/removal/change handling, install-method detection and startup story item metadata/CSV updates.
  • IMPROVE: Suppressed Instaloader's intermittent retry noise (the repeated JSON Query to graphql/query: 403 Forbidden ... lines it prints to stderr) during normal runs and the --doctor/--setup preflight, since those attempts usually succeed on a later try. The final failure is still shown, while verbose or debug mode keeps the full chatter

Bug fixes:

  • BUGFIX: Repaired logged-in post and reel fetching after Instagram retired the GraphQL doc_id 8845758582119845 (xdt_shortcode_media) in June 2026, which returned null data and crashed Post._obtain_metadata with TypeError: 'NoneType' object is not subscriptable as soon as a field outside the timeline node (such as tagged users) was read. Added a compatibility patch that migrates to doc_id 27128499623469141 (PolarisPostRootQuery) and reshapes the response to the legacy fields (ports instaloader/instaloader#2706, see #2704)
  • BUGFIX: Guarded latest_post_reel against a null GraphQL data response so a deprecated query or a temporary block surfaces a clean, actionable To fix: message instead of a raw TypeError

Changes in 3.4 (16 Jun 2026)

Features and Improvements:

  • NEW: Added a pluggable HTTP transport backend with browser TLS (JA3/JA4) impersonation via curl_cffi, now the default, to avoid fingerprint-based blocks where Instagram returns a spurious HTTP 429 on the very first request even from a clean IP (most often on Linux OS TLS stacks whose fingerprint Instagram treats as automation). Both the anonymous and logged-in paths use the selected backend and it transparently falls back to requests when curl_cffi is unavailable. Configurable via the HTTP_BACKEND / CURL_CFFI_IMPERSONATE config options or the --http-backend / --impersonate flags, with CURL_CFFI_IMPERSONATE defaulting to auto so the impersonated browser is aligned with the configured user agent, keeping the TLS and client-hint headers consistent (including with a Firefox-imported session)
  • NEW: Added detection of leaked collab posts on private accounts (enabled by default). When a private account co-authors a post with a public account, that post stays visible in the private account's timeline media via the public web_profile_info endpoint. The monitor surfaces these otherwise hidden posts (with owner, collaborators, media download and notifications) and reports new ones over time, even for accounts you do not follow. Only probes accounts whose posts are not otherwise viewable. Disable via the DETECT_COLLAB_POSTS config option or the --no-detect-collab-posts flag. Inspired by InstagramPrivSniffer
  • IMPROVE: The anonymous post path now populates tagged users and co-authors from web_profile_info instead of leaving the list empty
  • IMPROVE: Centralized repeated timestamp label and newline handling in print_cur_ts() (thanks @tomballgithub, from #100)
  • IMPROVE: Added Jinja2 as a direct dependency for Web Dashboard template rendering

Bug fixes:

  • BUGFIX: Fixed the configured proxy and TLS certificate settings being dropped on the anonymous mobile profile lookup (web_profile_info), which caused that request to bypass the proxy and go out over the real IP
  • BUGFIX: Restored the progress bar unit label after paused follower/following batch waits so later progress output keeps the expected label (thanks @tomballgithub, from #103)
  • BUGFIX: Fixed flagged-account detection not sending email or webhook alerts. The notification was gated behind ERROR_FAILURE_THRESHOLD so the script terminated before the count was reached. A flagged session or IP now alerts the operator immediately, bypassing the threshold and de-duped so one shared flag alerts once across all monitored targets (fixes #108)

Changes in 3.3 (01 Jun 2026)

Huge thanks to everyone who contributed to this release, with a special shout-out to @tomballgithub who drove most of the work behind these changes and to @BlueXAyman for the Instaloader GraphQL profile metadata patch.

Features and Improvements:

  • NEW: Added proxy support for routing Instagram and webhook traffic through a proxy, with an optional client certificate, automatic masking of proxy credentials in output, runtime toggling without a restart and support for multiple IP-lookup services (--enable-proxy / --proxy-url / --proxy-cert / --enable-proxy-webhooks flags or the matching PROXY_* config options)
  • NEW: Added privacy substitution support to redact or replace monitored target identities (display names, usernames, captions) across console output, logs, dashboards and webhook payloads, applied at display time so the real identity is never leaked
  • NEW: Added shadowban and flagged-account detection, including a canonical-account probe that distinguishes a removed or renamed account from a temporarily flagged one and smarter logic on whether to keep idling or exit while an account is flagged (closes #78)
  • NEW: Added advanced control over fetching followers and followings, with batched fetching, configurable total limits and correct handling of stop and recheck events during long fetches
  • NEW: Added a SKIP_WRAP_MESSAGES config option to suppress the wrap messages emitted during request monkey-patching
  • IMPROVE: Hardened IP-address lookups with retries, interruptible backoff waits and credential masking, plus extra retries when the proxy is temporarily unavailable
  • IMPROVE: Switched elapsed-time tracking to a monotonic timer for accurate runtime statistics
  • IMPROVE: Refined the progress bar: fit its text during PAUSE, show remaining time above two hours in hours rather than minutes, drop decimals from minute and hour values and handle PAUSED states more robustly
  • IMPROVE: Hardened type handling across the code base to satisfy static type checking with pyright
  • IMPROVE: Enforced gitleaks secret scanning in CI, added Dependabot version updates and bumped the Docker base image and GitHub Actions dependencies
  • IMPROVE: Added an offline test suite (pytest) covering config parsing, time formatting, scheduling windows, privacy substitutions, notification helpers, follower diffing, CSV writing and session-flag detection, with no network access, running automatically in CI across Python 3.9 to 3.14

Bug fixes:

  • BUGFIX: Added a compatibility patch for Instaloader GraphQL profile metadata to fix 400 Bad Request on GraphQL query: invalid request when using session mode
  • BUGFIX: Decoupled follower/following webhook notifications from the email notification flags so they fire independently and only when something actually changed
  • BUGFIX: Fixed hours_to_check() behavior when the feature is disabled (fixes #80)
  • BUGFIX: Guarded against posts_count being None during post-count comparisons
  • BUGFIX: Hardened update_ui_data debug formatting against non-dict payloads

Changes in 3.2 (10 Apr 2026)

Features and Improvements:

  • NEW: Added Docker support with a slim runtime image (closes #13 and #75)
  • NEW: Implemented separate error counters for BeHuman simulation and the main monitoring loop
  • IMPROVE: Added configurable failure threshold and improved alerting for Instagram human mode issues (closes #63)
  • IMPROVE: Improved progress bar stability and output handling with thread-safe suppression and safer width bounds (thanks @tomballgithub, from #69)
  • IMPROVE: Improved progress bar ETA and rate calculations for early updates (thanks @tomballgithub, from #69)
  • IMPROVE: Suppressed noisy TLS-on-HTTP Werkzeug parse logs in console output (fixes #67)
  • IMPROVE: Added GitHub Actions workflow for publishing packages to PyPI and auto-building/attaching zip and tar.gz assets to published releases

Bug fixes:

  • BUGFIX: Used nominal interval for human-mode probability on restricted schedules (fixes #64)
  • BUGFIX: Triggered error notifications exactly at the configured failure threshold (fixes #71)
  • BUGFIX: Made single-target recheck state consistent and returned accurate recheck-all status (fixes #68)
  • BUGFIX: Avoided joining current or main thread in target stop path (fixes #73)
  • BUGFIX: Normalized non-ASCII characters to avoid output issues (fixes #76)
  • BUGFIX: Ensured request monkey-patch is applied when progress bar setup is initialized (fixes #77)
  • BUGFIX: Made requests monkey-patch setup thread-safe for progress bar jitter and serialized HTTP paths
  • BUGFIX: Restored anonymous profile lookup on Instaloader 4.15.1 via web_profile_info fallback

Changes in 3.1 (07 Feb 2026)

Features and Improvements:

  • NEW: Implemented custom webhook configuration support allowing custom templates and headers, defaults to Discord compatibility (thanks @tomballgithub);
  • IMPROVE: Enhanced request jitter with exponential backoff and improved 429 error handling
  • IMPROVE: Improved webhook robustness with retries and custom User-Agent
  • IMPROVE: Updated human mode display to include verbosity option
  • IMPROVE: Updated webhook URL validation to accept both HTTP and HTTPS schemes

Bug fixes:

  • BUGFIX: Corrected timestamp issue in debug mode (fixes #62)
  • BUGFIX: Prevented deadlock in close_pbar by making STDOUT_LOCK re-entrant (fixes #60)
  • BUGFIX: Ensured verbose flags display messages independently of debug mode (fixes #59)
  • BUGFIX: Handled empty caption edges in mobile API to prevent index error in anonymous mode
  • BUGFIX: Added input validation bounds, safe thread cleanup and reels_count null checks

Changes in 3.0 (23 Jan 2026)

Welcome to version 3.0 — our biggest and most ambitious release to date! This update introduces a completely redesigned experience with a powerful new Dual Dashboard system (Web and Terminal), Webhook / Discord notifications, native Color support, custom Output directory feature and advanced Follower Churn detection.

A huge thank you to our amazing contributors @Sha-Dox, @tomballgithub, @YouveGotMeowxy and @jl-nr for their invaluable code, ideas and testing that made this release possible.

Web dashboard screenshot

Features and Improvements:

  • NEW: Added a comprehensive dashboard system accessible in terminal and web, including a Rich-powered Terminal Dashboard and a Flask-powered Web Dashboard with real-time stats, activity feeds and interactive controls; check the Terminal Dashboard and Web Dashboard for more info
  • NEW: Added webhook notifications system compatible with Discord and other webhook services for all monitored events with support for sending local image files; check the Webhook Notifications for more info
  • NEW: Implemented native color output support for terminal, enhancing user experience with customizable color themes (see COLORED_OUTPUT and COLOR_THEME config options). You can still use the old grc method if you prefer to only color the logs
  • NEW: Added follower churn detection (--followers-churn flag or FOLLOWERS_CHURN_DETECTION config option) - forces the tool to download and compare the full list of followers/followings even if the total count hasn't changed, allowing the detection of user handle changes or simultaneous additions and removals; check the Follower Churn Detection for more info
  • NEW: Added custom output directory feature to organize all files into target-specific subdirectories (images, videos, logs, json, csvs) which significantly improves organization for multi-target monitoring; check the Output Directory for more info (closes #35)
  • NEW: Added skip follow changes option (--skip-follow-changes flag or SKIP_FOLLOW_CHANGES config option) - allows to completely silence and disable follow-related tracking (console prints, activity logs, email/webhook notifications and CSV saving) while still maintaining live statistics in the dashboards; note that enabling this automatically disables follower churn detection as detailed tracking is suppressed; check the Skipping Follow Changes for more info
  • NEW: Implemented debug mode (--debug flag or DEBUG_MODE config option) - provides full technical logging including every API request and internal state changes
  • NEW: Introduced verbose mode (--verbose flag or VERBOSE_MODE config option) - provides a middle-ground logging level that shows timing details, next check schedule and loop completion messages without the exhaustive detail of Debug Mode
  • NEW: Added support for 12-hour time format (TIME_FORMAT_12H config option) across the entire tool including dashboards, console output, activity logs and email notifications
  • NEW: Implemented HTML formatting for email notifications for better readability
  • NEW: Added dashboard view modes - toggle between 'User' and 'Config' modes across both dashboards with a single keypress ('m') or button click; includes synchronized state throughout the tool
  • NEW: Implemented per-target logging - in multi-target mode, each user gets their own log file; common messages (like the summary screen) are automatically broadcasted to all active logs
  • IMPROVE: Enhanced CSV path resolution - CSV files are now automatically placed in a csvs/ subdirectory when OUTPUT_DIR and relative path is used. In multi-target mode, the tool always enforces per-user files (even with absolute paths) to ensure data isolation
  • IMPROVE: Enhanced CHECK_POSTS_IN_HOURS_RANGE logic to support disabling hour ranges and updated status message (to disable any range, set both MIN and MAXto 0);

... and many other improvements (check the list of commits for the release if you are interested)

Bug fixes:

  • BUGFIX: Fixed recent post detection logic in anonymous mode (fixes #34)
  • BUGFIX: Expanded tabs to spaces in log files for consistent alignment

Changes in 2.0.4 (04 Jan 2026)

Features and Improvements:

  • IMPROVE: standardized visual appearance of progress bar to unify its width in both terminal and log files

Bug fixes:

  • BUGFIX: Fixed progress bar display issues - Ensured close_pbar() is called before any print statements in the try block to prevent interleaved output and duplicate progress bars (thanks @tomballgithub)

Changes in 2.0.3 (03 Jan 2026)

Features and Improvements:

  • NEW: Multi-user monitoring in a single process - Monitor multiple Instagram users simultaneously without spawning separate processes. Simply pass multiple usernames as arguments or use the --targets flag with comma-separated values
  • NEW: Automatic request staggering - When monitoring multiple users, requests are automatically spread across the check interval to avoid triggering Instagram's anti-bot mechanisms. Configurable via MULTI_TARGET_STAGGER or --targets-stagger flag
  • NEW: Progress bar for downloading followers/followings - When fetching lists of followers or followings, a real-time progress bar is displayed showing download progress, statistics (names per request, total requests, elapsed time, estimated remaining time) and completion status. Progress updates are shown in the terminal only (to avoid log file clutter), with the final state written to the log file for reference (thanks @tomballgithub)
  • NEW: Per-user CSV files in multi-target mode - When monitoring multiple users, each user gets their own CSV file (e.g., instagram_data_user1.csv, instagram_data_user2.csv) using the configured CSV filename as a prefix. Single-user mode continues to use the exact filename specified
  • NEW: Improved log file naming - Multi-target log files now use sorted usernames joined with underscores (e.g., instagram_monitor_user1_user2_user3.log), preventing filename collisions when monitoring different user sets
  • NEW: Per-thread output buffer - Enhanced redirect detection to use thread-specific output buffers, ensuring accurate session error detection in multi-target mode
  • IMPROVE: Enhanced session error notifications - Session error emails now include both the session account (logged-in user or anonymous) and the target user that triggered the error, providing better context for debugging
  • NEW: Added MULTI_TARGET_STAGGER, MULTI_TARGET_STAGGER_JITTER, and MULTI_TARGET_SERIALIZE_HTTP configuration options for fine-tuning multi-target behavior
  • NEW: Added TARGET_USERNAMES configuration option to specify multiple targets in config file (CLI arguments take precedence)
  • IMPROVE: Thread-safe logging with lock protection to prevent interleaved output when multiple targets write simultaneously
  • IMPROVE: File save messages now include the username (e.g., "Story video saved for {user} to '{filename}'") for better clarity when monitoring multiple users
  • IMPROVE: Enhanced error messages for Instagram challenge/shadow ban detection - when Instagram requires a challenge/re-login or temporarily shadow bans the IP, error messages now provide clear, informative explanations instead of cryptic KeyError 'data' messages
  • IMPROVE: Follower/following count comparison - Enhanced display of reported vs actual follower/following counts with improved accuracy by refreshing profile data after fetching lists to ensure current reported counts are compared with actual fetched counts (thanks @tomballgithub)
  • IMPROVE: Enhanced initialization progress messages - During script initialization, progress messages now show what's happening during profile loading, including loading profile from username, fetching reels count (when applicable), checking for stories (when applicable) and loading own profile (when logged in). This provides better visibility into the initialization process and helps with debugging account ban issues (thanks @tomballgithub)
  • IMPROVE: Standardized formatting in print statements

Bug fixes:

  • BUGFIX: Fixed redirect detection buffer that was using broken shared/local variable logic, now properly uses per-thread output tracking
  • BUGFIX: Fixed follower/following count comparison logic - Removed inefficient helper functions that were fetching full lists just to get counts, simplified comparison function with proper type hints and fixed order of operations to ensure accurate reported vs actual count comparisons

Dependencies:

  • NEW: Added tqdm dependency for progress bar functionality

Changes in 1.9.1 (18 Dec 2025)

Features and Improvements:

  • IMPROVE: Enhanced CHECK_POSTS_IN_HOURS_RANGE logic: hour ranges now gate fetching updates (not just posts/reels), covering additional monitored activity (thanks @tomballgithub)
  • NEW: Added HOURS_VERBOSE for debugging hour-based update gating (prints whether updates are fetched or skipped) (thanks @tomballgithub)
  • IMPROVE: Refactored hour-range calculations: de-duplicate overlapping ranges, ignore invalid hours and prevent crashes on misconfiguration
  • IMPROVE: Improved Be Human action probability when hour-range mode is enabled (scales to the configured active-hour window) (thanks @tomballgithub)
  • IMPROVE: Added messaging for sleep time if HOURS_VERBOSE is enabled to give insight into when next check will be (thanks @tomballgithub)
  • IMPROVE: Liveness check logic is now recomputed after config/env/CLI overrides are applied and after check-interval changes via signals
  • IMPROVE: Improved Firefox session import handling (safer SQLite connection usage; clarified error message; consistent session path handling)
  • IMPROVE: Enhanced sleep message output and refined hour range checks for updates

Bug fixes:

  • BUGFIX: Fixed missing current-hour (cur_h) assignment that could break hour-range gating
  • BUGFIX: Restored Python 3.9 compatibility in type hints (replaced datetime | None with Optional[datetime])

Changes in 1.8.1 (30 Nov 2025)

Features and Improvements:

  • IMPROVE: Improved error handling for check intervals

Bug fixes:

  • BUGFIX: Corrected bug in compare_images() function (thanks @jl-nr)

Changes in 1.8 (18 Jun 2025)

Features and Improvements:

  • NEW: Added mobile-web JSON fallback to restore post details fetching in mode 1 (no session); reel details still require mode 2 (session login)
  • IMPROVE: Added missing exception handling in several areas and included display of exception types for better debugging

Bug fixes:

  • BUGFIX: Guarded has_public_story behind login check due to recent Instagram API anonymous session changes

Changes in 1.7 (13 Jun 2025)

Features and Improvements:

  • NEW: Introduced new experimental Be Human mode that makes the tool behave more like a real user to reduce bot detection by performing random feed / profile / hashtag / followee actions. It is disabled by default, check the Human Mode for more info.
  • NEW: Added new Jitter mode which allows to force every HTTP call made by Instaloader to go through a built-in jitter/back-off layer to look more human. It is disabled by default, check the Jitter Mode for more info.
  • NEW: Added config options and flags to set desktop and mobile Instagram user agent strings. Check User Agent for more info.
  • NEW: Ensured all Instagram requests now include the appropriate user agent, if not specified - they are randomly generated per session

Bug fixes:

  • BUGFIX: Fixed config file generation to work reliably on Windows systems

Changes in 1.6.2 (22 May 2025)

Bug fixes:

  • BUGFIX: Extended try block to suppress full stack trace
  • BUGFIX: Corrected VERSION assignment syntax in source code

Changes in 1.6 (21 May 2025)

Features and Improvements:

  • NEW: The tool can now be installed via pip: pip install instagram_monitor
  • NEW: Added support for external config files, environment-based secrets and dotenv integration with auto-discovery
  • NEW: Added full support for Instagram reels (not just video posts) and optimized post/reel fetching to reduce API calls
  • NEW: Added --import-firefox-session to load session from Firefox cookies with detection of all profiles (replaces old script)
  • IMPROVE: Improved detail extraction for posts and reels (via mobile API)
  • NEW: Added notification for follow-request acceptance and for removed posts/reels
  • NEW: Display access scope and session user info, including reels count
  • IMPROVE: Enhanced session-login logic to auto‐load or create Instaloader sessions
  • IMPROVE: Display whether the user can access all content of the monitored account
  • IMPROVE: Enhanced startup summary to show loaded config, dotenv and empty profile pic template file paths
  • IMPROVE: Auto detect and display availability of imgcat binary for profile picture preview
  • IMPROVE: Simplified and renamed command-line arguments for improved usability
  • NEW: Implemented SIGHUP handler for dynamic reload of secrets from dotenv files
  • NEW: Added configuration option to control clearing the terminal screen at startup
  • IMPROVE: Changed connectivity check to use Instagram API endpoint for better reliability
  • IMPROVE: Added check for missing pip dependencies with install guidance
  • IMPROVE: Allow disabling liveness check by setting interval to 0 (default changed to 12h)
  • IMPROVE: Improved handling of log file creation
  • IMPROVE: Refactored CSV file initialization and processing
  • NEW: Added support for ~ path expansion across all file paths
  • IMPROVE: Added validation for configured time zones
  • IMPROVE: Refactored code structure to support packaging for PyPI
  • IMPROVE: Enforced configuration option precedence: code defaults < config file < env vars < CLI flags
  • IMPROVE: Made empty profile picture template path configurable
  • IMPROVE: Only show profile picture template status if the file exists
  • IMPROVE: Renamed Caption to Description in logs and email bodies
  • IMPROVE: Email notifications now auto-disable if SMTP config is invalid
  • IMPROVE: Minimum required Python version increased to 3.9
  • IMPROVE: Removed short option for --send-test-email to avoid ambiguity

Bug fixes:

  • BUGFIX: Fixed data key error, however due to Instagram changes, post/reel details can no longer be fetched in mode 1 (no session), though count differences are still reported
  • BUGFIX: Fixed post location fetching after Instagram broke legacy endpoints
  • BUGFIX: Corrected public vs. private story checks and iteration (#9)
  • BUGFIX: Fixed rare issue with reporting changed profile pic even though timestamp is the same
  • BUGFIX: Fixed issue where manually defined LOCAL_TIMEZONE wasn't applied correctly
  • BUGFIX: Fixed imgcat command under Windows (use echo. & instead of echo ;)

Changes in 1.5 (03 Nov 2024)

Features and Improvements:

  • NEW: Possibility to skip getting posts details (new -w / --skip_getting_posts_details parameter)
  • IMPROVE: Print message changed when empty followers list is returned
  • IMPROVE: Added message about fetching user's latest post/reel (as it might take a while)

Bug fixes:

  • BUGFIX: Fixed bug with saving removed followers/followings to CSV file when empty list is returned and count is > 0
  • BUGFIX: Fixed wrong CSV entry timestamp in case posts number decreases

Changes in 1.4 (02 Aug 2024)

Features and Improvements:

  • NEW: Detection when user changes profile visibility from public to private and vice-versa; the code already supported both private and public profiles, however it did not inform the user when the profile visibility has changed; now the tool will notify about it in the console and also via email notifications (-s) and CSV file records (-b)
  • IMPROVE: Added info about used mode of the tool in the main screen, so it is easier to correlate it with the description in the README

Bug fixes:

  • BUGFIX: Indentation fixes in the code

Changes in 1.3 (14 Jun 2024)

Features and Improvements:

  • NEW: Added new parameter (**-z|*8 / --send_test_email_notification) which allows to send test email notification to verify SMTP settings defined in the script
  • IMPROVE: Checking if correct version of Python (>=3.8) is installed
  • IMPROVE: Possibility to define email sending timeout (default set to 15 secs)

Bug fixes:

  • BUGFIX: Fixed "SyntaxError: f-string: unmatched (" issue in older Python versions
  • BUGFIX: Fixed "SyntaxError: f-string expression part cannot include a backslash" issue in older Python versions

Changes in 1.2 (07 Jun 2024)

Features and Improvements:

  • IMPROVE: pyright complained the code is too complex to analyze, so it has been simplified little bit (so it does not complain anymore)
  • IMPROVE: Changed email notifications string in SIGUSR1 signal handler

Bug fixes:

  • BUGFIX: Fixed nasty bug terminating the script in case of issues while processing story items (yes, copy & paste bug ;-))

Changes in 1.1 (03 Jun 2024)

Features and Improvements:

  • NEW: Support for detecting multiple stories (if session login is used)
  • NEW: Fully anonymous download of user's story images & videos (thumbnail image will be also attached in email notifications and displayed in the terminal if imgcat is installed); yes, user won't know you watched their stories 😉
  • NEW: Download of user's post images & videos (thumbnail image will be also attached in email notifications and displayed in the terminal if imgcat is installed)
  • NEW: Detection of changed profile pictures; since Instagram user's profile picture URL seems to change from time to time, the tool detects changed profile picture by doing binary comparison of saved jpg files; initially it saves the profile pic to instagram_{user}_profile_pic.jpg file after the tool is started; then during every check the new picture is fetched and the tool does binary comparison if it has changed or not; in case of changes the old profile picture is moved to instagram_{user}_profile_pic_old.jpg file and the new one is saved to instagram_{user}_profile_pic.jpg and also to file named instagram_{user}_profile_pic_YYmmdd_HHMM.jpg (so we can have history of all profile pictures); in order to control the feature there is a new DETECT_CHANGED_PROFILE_PIC variable set to True by default; the feature can be disabled by setting it to False or by enabling -k / --do_not_detect_changed_profile_pic parameter
  • NEW: Detection of empty profile pictures; Instagram does not signal the fact of empty user's profile image in their API, that's why we can detect it by using empty profile image template (which seems to be the same on binary level for all users); to use this feature put instagram_profile_pic_empty.jpg file in the dir from which you run the script; this way the tool will be able to detect when user does not have profile image set; it is not mandatory, but highly recommended as otherwise the tool will treat empty profile pic as regular one, so for example user's removal of profile picture will be detected as changed profile picture
  • NEW: Attaching changed profile pics and stories/posts images directly in email notifications (when -s parameter is used)
  • NEW: Feature allowing to display the profile picture and stories/posts images right in your terminal (if you have imgcat installed); put path to your imgcat binary in IMGCAT_PATH variable (or leave it empty to disable this functionality)
  • IMPROVE: Improvements for running the code in Python under Windows
  • NEW: Automatic detection of local timezone if you set LOCAL_TIMEZONE variable to 'Auto' (it is default now); requires tzlocal pip module
  • NEW: Support for honoring last-modified timestamp for saved profile pics (it turned out it reflects timestamp when the picture has been actually added by the user)
  • IMPROVE: Information about time zone and posts checking hours is displayed in the start screen now
  • NEW: Fetching of post's location and comments + likes list is back (however needs to be enabled via -t parameter as it highly increases the risk that Instagram will mark the account as an automated tool)
  • NEW: Added new parameter -r / --skip_getting_story_details to skip getting detailed info about stories and its images/videos, even if session login is used; you will still get generic information about new stories in such case
  • NEW: Added new parameter -t / --get_more_post_details to get more detailed info about new posts like its location and comments + likes list, only possible if session login is used; if not enabled you will still get generic information about new posts; it is disabled by default as for some unknown reasons it highly increases the risk of the account being flagged as an automated tool
  • NEW: Added new parameter -k / --do_not_detect_changed_profile_pic which allows to disable detection of changed user's profile picture
  • IMPROVE: Email sending function send_email() has been rewritten to detect invalid SMTP settings + possibility to attach images
  • IMPROVE: Strings converted to f-strings for better code visibility
  • IMPROVE: Rewritten get_date_from_ts(), get_short_date_from_ts(), get_hour_min_from_ts() and get_range_of_dates_from_tss() functions to automatically detect it time object is timestamp (int/float) or datetime
  • IMPROVE: Better checking for wrong command line arguments
  • IMPROVE: Help screen reorganization
  • IMPROVE: pep8 style convention corrections

Bug fixes:

  • BUGFIX: Improved exception handling while processing JSON files
  • BUGFIX: Escaping of potentially dangerous variables in HTML email templates
  • BUGFIX: Fix for saving empty followers/followings list to JSON file when the tool is started and Instagram API returns empty list

Changes in 1.0 (25 Apr 2024)

Features and Improvements:

  • NEW: Support for Instagram users having no posts yet
  • NEW: Support for handling private profiles
  • IMPROVE: Improvements in monitoring Instagram user activity without session

Bug fixes:

  • BUGFIX: Disabled fetching location, list of likes and comments for posts due to errors after recent Instagram changes (HTTP Error 400)