<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <id>https://anipy.ru/changelog.xml</id>
  <title>ANIPY — SDK releases</title>
  <subtitle>Python SDKs for anime, manga and light novels: py-aniliberty, ranobelib-python-sdk, mangalib-python-sdk.</subtitle>
  <link rel="self" href="https://anipy.ru/changelog.xml"/>
  <link rel="alternate" href="https://anipy.ru/en/changelog/"/>
  <icon>https://anipy.ru/logo.png</icon>
  <updated>2026-10-25T00:00:00Z</updated>
  <author><name>LLIJIYAPNIK</name></author>
  <entry>
    <id>tag:anipy.ru,2026:mangalib-python-sdk/0.2.1</id>
    <title>mangalib-python-sdk 0.2.1</title>
    <updated>2026-10-25T00:00:00Z</updated>
    <link rel="alternate" href="https://anipy.ru/en/changelog/#mangalib-python-sdk"/>
    <category term="mangalib-python-sdk"/>
    <content type="html"></content>
  </entry>
  <entry>
    <id>tag:anipy.ru,2026:ranobelib-python-sdk/0.14.1</id>
    <title>ranobelib-python-sdk 0.14.1</title>
    <updated>2026-10-25T00:00:00Z</updated>
    <link rel="alternate" href="https://anipy.ru/en/changelog/#ranobelib-python-sdk"/>
    <category term="ranobelib-python-sdk"/>
    <content type="html"></content>
  </entry>
  <entry>
    <id>tag:anipy.ru,2026:mangalib-python-sdk/0.2.0</id>
    <title>mangalib-python-sdk 0.2.0</title>
    <updated>2026-10-18T00:00:00Z</updated>
    <link rel="alternate" href="https://anipy.ru/en/changelog/#mangalib-python-sdk"/>
    <category term="mangalib-python-sdk"/>
    <content type="html">&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Export manga to CBZ and PDF, size pages, skip closed chapters title-wide&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>tag:anipy.ru,2026:mangalib-python-sdk/0.1.0</id>
    <title>mangalib-python-sdk 0.1.0</title>
    <updated>2026-10-18T00:00:00Z</updated>
    <link rel="alternate" href="https://anipy.ru/en/changelog/#mangalib-python-sdk"/>
    <category term="mangalib-python-sdk"/>
    <content type="html">&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Add the mangalib-python-sdk package&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>tag:anipy.ru,2026:ranobelib-python-sdk/0.14.0</id>
    <title>ranobelib-python-sdk 0.14.0</title>
    <updated>2026-10-18T00:00:00Z</updated>
    <link rel="alternate" href="https://anipy.ru/en/changelog/#ranobelib-python-sdk"/>
    <category term="ranobelib-python-sdk"/>
    <content type="html">&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Build ranobelib on libsocial-core&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Changed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Release each package by its own prefixed tag&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>tag:anipy.ru,2026:ranobelib-python-sdk/0.13.0</id>
    <title>ranobelib-python-sdk 0.13.0</title>
    <updated>2026-10-18T00:00:00Z</updated>
    <link rel="alternate" href="https://anipy.ru/en/changelog/#ranobelib-python-sdk"/>
    <category term="ranobelib-python-sdk"/>
    <content type="html">&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Add public chapter_image_urls() and rewrite_image_urls() helpers&lt;/li&gt;&lt;li&gt;Add public chapter_paragraphs() helper&lt;/li&gt;&lt;li&gt;Add public cache_stats() and clear_cache() for disk cache maintenance&lt;/li&gt;&lt;li&gt;Add Title.base_names, the title's names without the format suffix&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>tag:anipy.ru,2026:py-aniliberty/1.0.0</id>
    <title>py-aniliberty 1.0.0</title>
    <updated>2026-10-16T00:00:00Z</updated>
    <link rel="alternate" href="https://anipy.ru/en/changelog/#py-aniliberty"/>
    <category term="py-aniliberty"/>
    <content type="html">&lt;h3&gt;Breaking changes&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Name identifier parameters release/episode and accept model objects&lt;/li&gt;&lt;li&gt;Make the path of torrents.download() keyword-only&lt;/li&gt;&lt;li&gt;Rename client.auth.otp.get() to issue()&lt;/li&gt;&lt;li&gt;Rename client.me.views.delete_timecodes() to remove_timecodes()&lt;/li&gt;&lt;li&gt;One LinkedAccount model for the site account of release, torrent and team members&lt;/li&gt;&lt;li&gt;Make HttpClient.discard_cookie() private&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Export the Literal types (ReleaseType, CollectionType, ...) from the package root&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>tag:anipy.ru,2026:py-aniliberty/0.4.0</id>
    <title>py-aniliberty 0.4.0</title>
    <updated>2026-10-16T00:00:00Z</updated>
    <link rel="alternate" href="https://anipy.ru/en/changelog/#py-aniliberty"/>
    <category term="py-aniliberty"/>
    <content type="html">&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Send a session token from HttpClient (token, with_token, discard_cookie)&lt;/li&gt;&lt;li&gt;Add client.auth and AniLiberty(token=...) / client.token&lt;/li&gt;&lt;li&gt;Add client.me.profile() returning UserProfile&lt;/li&gt;&lt;li&gt;Add client.me.favorites (ids, add, remove, releases, references)&lt;/li&gt;&lt;li&gt;Add client.me.collections (ids, add, remove, releases, references)&lt;/li&gt;&lt;li&gt;Add client.me.views, client.releases.timecodes(), client.episodes.timecode()&lt;/li&gt;&lt;li&gt;Add client.releases.ratings (get, set, remove the user's own score)&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Fixed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Take the error message from the &amp;quot;error&amp;quot; field when there is no &amp;quot;message&amp;quot;&lt;/li&gt;&lt;li&gt;Map empty text/html responses by status instead of as an anti-bot page&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>tag:anipy.ru,2026:py-aniliberty/0.3.0</id>
    <title>py-aniliberty 0.3.0</title>
    <updated>2026-10-16T00:00:00Z</updated>
    <link rel="alternate" href="https://anipy.ru/en/changelog/#py-aniliberty"/>
    <category term="py-aniliberty"/>
    <content type="html">&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Add client.schedule (now, week) and the ScheduledRelease model&lt;/li&gt;&lt;li&gt;Add client.genres (list, get, random, releases, iter_releases)&lt;/li&gt;&lt;li&gt;Add client.franchises (list, get, random, for_release)&lt;/li&gt;&lt;li&gt;Add HttpClient.request_raw() and stream() for non-JSON responses&lt;/li&gt;&lt;li&gt;Add client.torrents (list, get, for_release, file, download, RSS)&lt;/li&gt;&lt;li&gt;Add client.teams (list, roles, users)&lt;/li&gt;&lt;li&gt;Add client.media (promotions, videos)&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>tag:anipy.ru,2026:py-aniliberty/0.2.0</id>
    <title>py-aniliberty 0.2.0</title>
    <updated>2026-10-16T00:00:00Z</updated>
    <link rel="alternate" href="https://anipy.ru/en/changelog/#py-aniliberty"/>
    <category term="py-aniliberty"/>
    <content type="html">&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Add client.catalog.references (genres, types, seasons, years, ratings, statuses, sorting)&lt;/li&gt;&lt;li&gt;Add Literal types for catalog filter values from the spec enums&lt;/li&gt;&lt;li&gt;Add client.catalog.releases() and iter_releases() with validated filters&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>tag:anipy.ru,2026:py-aniliberty/0.1.0</id>
    <title>py-aniliberty 0.1.0</title>
    <updated>2026-10-16T00:00:00Z</updated>
    <link rel="alternate" href="https://anipy.ru/en/changelog/#py-aniliberty"/>
    <category term="py-aniliberty"/>
    <content type="html">&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Add exception hierarchy&lt;/li&gt;&lt;li&gt;Add HttpClient with JSON decoding and status-to-exception mapping&lt;/li&gt;&lt;li&gt;Add AniLiberty client with client.app.status()&lt;/li&gt;&lt;li&gt;Retry 429/5xx/network errors with backoff, pace requests and bound concurrency&lt;/li&gt;&lt;li&gt;Add max_concurrency to AniLiberty&lt;/li&gt;&lt;li&gt;Add query-string serialization for list and nested filters&lt;/li&gt;&lt;li&gt;Add ValueDescription and Image models with absolute image URLs&lt;/li&gt;&lt;li&gt;Add Page[T] and the iterate_pages helper&lt;/li&gt;&lt;li&gt;Serialize params and resolve image URLs against the client's host in resources&lt;/li&gt;&lt;li&gt;Add Release, ReleaseMember and Genre models&lt;/li&gt;&lt;li&gt;Add client.releases (latest, random, recommended, list, get, members)&lt;/li&gt;&lt;li&gt;Add Episode model and episodes inside Release&lt;/li&gt;&lt;li&gt;Add client.episodes.get()&lt;/li&gt;&lt;li&gt;Add client.app.search_releases()&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Changed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Add GitHub Actions workflow&lt;/li&gt;&lt;li&gt;Build docs in CI and deploy them to GitHub Pages&lt;/li&gt;&lt;li&gt;Publish to PyPI from GitHub Releases via Trusted Publishing&lt;/li&gt;&lt;li&gt;Regenerate CHANGELOG.md with git-cliff when a release is published&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>tag:anipy.ru,2026:ranobelib-python-sdk/0.12.0</id>
    <title>ranobelib-python-sdk 0.12.0</title>
    <updated>2026-10-04T00:00:00Z</updated>
    <link rel="alternate" href="https://anipy.ru/en/changelog/#ranobelib-python-sdk"/>
    <category term="ranobelib-python-sdk"/>
    <content type="html">&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Add Catalog.list_statuses() and filter list_titles() by several statuses&lt;/li&gt;&lt;li&gt;Expose Title.last_chapter_at from get_info()&lt;/li&gt;&lt;li&gt;Filter Catalog.list_titles() by chapter count&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>tag:anipy.ru,2026:ranobelib-python-sdk/0.11.0</id>
    <title>ranobelib-python-sdk 0.11.0</title>
    <updated>2026-09-30T00:00:00Z</updated>
    <link rel="alternate" href="https://anipy.ru/en/changelog/#ranobelib-python-sdk"/>
    <category term="ranobelib-python-sdk"/>
    <content type="html">&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Send browser-like headers to the API&lt;/li&gt;&lt;li&gt;Send browser-like headers when downloading illustrations&lt;/li&gt;&lt;li&gt;Raise AccessBlockedError for the edge protection's HTML 403&lt;/li&gt;&lt;li&gt;Forward headers= through RanobeLib and Catalog&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>tag:anipy.ru,2026:ranobelib-python-sdk/0.10.0</id>
    <title>ranobelib-python-sdk 0.10.0</title>
    <updated>2026-09-29T00:00:00Z</updated>
    <link rel="alternate" href="https://anipy.ru/en/changelog/#ranobelib-python-sdk"/>
    <category term="ranobelib-python-sdk"/>
    <content type="html">&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Expose translator footnotes as Chapter.footnotes&lt;/li&gt;&lt;li&gt;Keep footnotes in exports and size estimates&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Fixed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Keep paragraph boundaries of dropped block-level tags&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>tag:anipy.ru,2026:ranobelib-python-sdk/0.9.0</id>
    <title>ranobelib-python-sdk 0.9.0</title>
    <updated>2026-08-14T00:00:00Z</updated>
    <link rel="alternate" href="https://anipy.ru/en/changelog/#ranobelib-python-sdk"/>
    <category term="ranobelib-python-sdk"/>
    <content type="html">&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Support filtering by multiple countries in Catalog.list_titles()&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>tag:anipy.ru,2026:ranobelib-python-sdk/0.8.0</id>
    <title>ranobelib-python-sdk 0.8.0</title>
    <updated>2026-08-12T00:00:00Z</updated>
    <link rel="alternate" href="https://anipy.ru/en/changelog/#ranobelib-python-sdk"/>
    <category term="ranobelib-python-sdk"/>
    <content type="html">&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Add country/region of origin to Title and Catalog.list_titles()&lt;/li&gt;&lt;li&gt;Add tags filter parameter to Catalog.list_titles()&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>tag:anipy.ru,2026:ranobelib-python-sdk/0.7.0</id>
    <title>ranobelib-python-sdk 0.7.0</title>
    <updated>2026-08-10T00:00:00Z</updated>
    <link rel="alternate" href="https://anipy.ru/en/changelog/#ranobelib-python-sdk"/>
    <category term="ranobelib-python-sdk"/>
    <content type="html">&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Add Catalog.list_genres()&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>tag:anipy.ru,2026:ranobelib-python-sdk/0.6.1</id>
    <title>ranobelib-python-sdk 0.6.1</title>
    <updated>2026-08-09T00:00:00Z</updated>
    <link rel="alternate" href="https://anipy.ru/en/changelog/#ranobelib-python-sdk"/>
    <category term="ranobelib-python-sdk"/>
    <content type="html">&lt;h3&gt;Fixed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Retry past rate limiting in download_title() and preserve partial progress&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
</feed>
