Changelog

Unreleased

Latest — A new name

Highlights

The application is called Aniba now. Nothing else moves: the same catalogue, the same collections, the same rankings — under a name that no longer promises only songs.

Core

  • Find the application under its new name. Anisong becomes Aniba, on every page title, on the error pages, and in the import source that reads the site's own catalogue.

0.12.0

— Robustness & repair

Highlights

Most of what this release repairs was already supposed to work, and none of it announced itself when it did not. An import that met one slow video stopped where it stood while the run still read terminé; a file only had to call itself a picture to be stored as one; a filter carried in a link vanished at the first click elsewhere. Each of those now refuses, says so, or picks up where it left off. And nine episodes in ten gained the broadcast date they never had.

Imports

  • Give up on a media download that stalls. A source that answers a few bytes at a time no longer holds an import for as long as it likes — a transfer past its time budget is abandoned and retried later, instead of freezing everything behind it.
  • Say what a bundle import will refuse, before it runs. A bundle whose items are not all complete now states how many will fail and why, instead of reporting it afterwards as a red run. The import still goes ahead for everything that passes.
  • Resume an import that stopped part-way. A run now says how many items were approved and never applied, and offers to relaunch exactly those. The count only appears when something is genuinely stuck, so a run that is merely still working stays quiet.
  • Point an import at what the catalogue already holds, instead of copying it. Adding a studio to an anime, or an artist to a song's credits, staged a fresh entry for something already known — either can be picked from the catalogue now. A draft can also open on a record already in the base, searched by name, to complete it rather than duplicate it: nothing is imported on top of it unless it is asked for, and the screen says which record the import will update.
  • Warn before an import lands beside a hand-typed row. A layer that already holds a manual entry says so, so a moderator knows the import will leave two rows to arbitrate — instead of discovering it at review.
  • Import episodes even when a Kitsu link points at a deleted record. Kitsu renames a deleted anime rather than removing it, and a stale link to one brought back no episodes at all. An import now reaches the live record instead, so its episodes and their dates arrive.
  • Upload a media file straight into a draft. A draft's media fields took only a remote URL; now a cover, a banner, a logo or a theme's WebM clip can be uploaded from the editor and is hosted with the record on import, no URL needed.

Catalogue

  • Show when each episode aired. Nine episodes in ten carried no date at all; an import now takes them from the source that publishes a broadcast schedule, and the anime and episode pages show them. A dated episode also carries its themes into the season it was heard in, so an opening arriving halfway through a long series stops being filed under the anime's debut. An episode still to air stays blank rather than showing a date that may move.
  • Show a title in its own language before its romaji and its synonyms. A record's alternative names were listed alphabetically, so an aggregated alias could sit above the English or Japanese title — and push it out of sight on a record carrying more than five. The « Synonyme » label that pushed each name onto two lines is a small icon beside it now, the size of a flag, so the list reads in half the height.

Core

  • Close a notification, or let it go on its own. A confirmation used to sit at the top of the page for as long as the page lasted, with no way to be rid of it. Notifications appear in the corner now, over the page rather than pushing it down, and clear themselves after a few seconds — held as long as the pointer or the keyboard is on them. An error stays until it is closed.

Fixes

  • Store an image or a video for what its bytes are, not for what it claims. A source only had to label a file as a picture for it to be stored as one; the file itself is read now, and anything that is not the picture or the clip it claims to be is refused. The catalogue stores a single video format, so an MP4 no longer slips in on its extension's word either — and the refusal says what to encode to.
  • Keep a detail page's embedded lists to themselves. Switching the animes of a studio, or the themes of an artist, to list view also flipped every main page to list; that choice stays on the page it was made on now. Those lists were also fetched a second time on every visit, flashing a loading skeleton over a list already on screen.
  • Keep a theme filter that arrived in the URL. Opening a link filtered on an artist or a studio showed the right themes above an empty form, and the first use of any other filter dropped the one from the link. The filters open on what the URL asked for now, each named as a human picking it would have seen it.

0.11.0

— Sharing & a new home

Highlights

Share a collection or an activity by link, or make it public. Give an activity an image of its own, and swap two placed cards in one gesture. Land on a rebuilt home, and on the app's own error pages instead of Django's bare default.

Playground

  • Share a collection or a ranking by link, or make it public. A visibility switch — Privé, Par lien, Public — sits beside each one, with a link to copy. Whoever opens it reads it without an account, and without its owner's controls. A shared ranking keeps its author's columns and card style.
  • Dress an activity in an image of one's own. A JPG, a PNG or a WebP joins the gradients and the covers, cropped to the stage. It travels with the activity, so a shared link carries it. A file too heavy, too large, animated or not an image is refused, and the refusal says which.
  • Tell two activities apart at a glance. A listed activity shows the image its author gave it, or the covers of what it ranks, or a colour and its module's mark. It used to draw a box of small text, beside collections that drew their covers.
  • Say whether an activity is finished. A badge — Terminé or En cours — replaces the count on every screen that lists one. The count stays one hover away.

Playground — Ranking

  • Swap two cards in one gesture. Drop a card on a place that is taken, or pick a card and click the place it should have. Moving the 7th to the 2nd used to cost three gestures. A placed card moves from the keyboard too.
  • Empty a ranking in one gesture. A ⋮ menu clears the ranking, clears the hors classement, or sends everything still to judge into it — which is how a top is declared finished. Each says how many it takes before taking them.

Home

  • Open on the season on air. A theme of the season plays from the banner, ↻ au hasard draws another, and two columns list the season's animes and themes, drawn at random. Six tiles reach the rest of the catalogue, and a lighter footer credits the sources the data comes from.

Core

  • Find the pages that say what the site is. Références credits the four services the data is built on. À propos becomes a FAQ. The privacy page says what is kept and what is never collected. A legal notice joins them, and a contact page whose form waits on its delivery.
  • Serve the whole interface from one place. Stylesheets, JavaScript and the country flags came from three public CDNs, each of which saw every visitor. Everything ships with the site now, and no page compiles its stylesheet in the browser any more.
  • Answer an error with the app's own page, in French. A missing page, a refusal, a malformed request and a server error each keep the navbar, the footer and the account's theme. An expired link reads like the rest of the app, not like a crash. An API call still gets JSON.

Account

  • Refuse a profile picture the application cannot store, and say which rule refused it. Whatever its extension claims, a file that is not really a JPG, a PNG or a WebP is turned away — as is an animated one, or one too large in pixels to open. An animated GIF used to be accepted and frozen on its first frame.

0.10.0

— Activities - Ranking

Highlights

Open the Playground to activities, and add the first of them: the ranking. Introduce a video player of our own, on every screen where an opening or an ending plays. Reach the admin from any resource in one click.

Playground

  • Introduce activities. An activity is one arrangement of one collection, driven by a module, belonging to whoever created it.
  • Start one from any collection, and find them all again under Mes activités — filtered by module, by collection or by name, each saying how far along it is.

Playground — Ranking

  • Add the ranking, the first activity module. Place a collection's animes or themes on a board of numbered places, by dragging a card onto a place or by picking a card and clicking where it goes. Every gesture is written as it is made, and the pool of what is left to judge can be searched and sorted.
  • Set aside what does not belong. A hors classement band holds it, and one click sends it back to the pool.
  • Resize a ranking at any time. A smaller board names what it would drop before dropping it.
  • Dress a ranking. Card style, columns, fill direction, place numbers and card fields, kept from one ranking to the next — plus a backdrop, a gradient or one of the ranking's own covers, which belongs to that ranking and travels with it.
  • Show the result, and export it as an image. The ranking alone, numbered by its real places or renumbered from one, with or without the empty places — downloadable as a PNG in four formats.

Themes

  • Introduce a video player of our own. It replaces the browser's default controls everywhere an opening or an ending plays — a theme's page, a list, a ranking — with one progress bar, one volume control, fullscreen, and the keyboard to drive them.
  • Remember the chosen volume, play one video at a time, and say when a video fails to load.
  • Stop the playing variant when another one is chosen. It used to keep going out of sight, with no control left to stop it.
  • Play a theme whose video is hosted elsewhere on its own page. It showed as unavailable while the same video played in the Playground.

Actions

  • Edit any resource in the admin, in one click. The ⋯ menu of every anime, series, franchise, studio, episode, tag, song, theme, variant, person, group and collection now opens the screen that corrects it, instead of walking back through the admin index — offered only to an account that can open it.
  • Separate one action from the next, in the ⋯ menu and in the row of controls of a detail page. Two actions of the same kind used to run together as a single block.

0.9.1

— Deployable on PostgreSQL

Corrections

  • The application can be installed on PostgreSQL. A migration written for SQLite alone stopped every fresh PostgreSQL database, in every release from 0.4.0 to 0.9.0; existing SQLite databases are unaffected.

0.9.0

— Playground, collections & actions

Highlights

The Playground opens: a section of your own, next to the shared catalog. Group animes or themes into collections, browse each one with the catalogue's own filters, and build them from wherever you happen to be. Reaching them from anywhere came with a ⋯ menu on every resource of the catalog, which is where the actions to come will land too.

Collections

  • A collection gathers animes or themes into one list. It holds a single type, chosen once at creation, and is private.
  • Browse it with the catalogue's own tools — same filters, sorts, views and pagination as the anime or theme listing, over its members alone, plus one sort of its own: insertion order.
  • Fill it from anywhere: Add to collection in a card's ⋯ menu, or the picker, where the resource's own listing turns into a selection screen and every click is saved as you go. Add every result takes the current filter in one go, however many rows it matches.
  • Rename, empty or delete it, and remove any member from the page that shows it. A resource dropped from the catalog leaves an orphan rather than shrinking the collection silently; the page counts them and clears them on request.
  • With no collection yet, three ready-made ones are offered on the current season — its openings, its endings, its animes — each stating how many it would add. If that season is still empty, they step back to the last one that is not, and name it.

Actions on every resource

  • A ⋯ menu now sits on every card, every row and every detail page of the catalog — animes, series, franchises, studios, episodes, tags, songs, themes, people and groups. It offers what applies to that resource, in that place, for your role, and nothing else.
  • Same corner and same order everywhere, destructive entries last and in red, each asking before it acts.

Configuration

  • What the import module treated as code but is really policy — which source feeds which layer, batch and retry sizes, per-provider timeouts and ceilings — is now read from the environment. A deployment can be tuned without a release.

Corrections

  • Icons and plural labels agree between the import and the Playground: an anime was drawn 🎬 in one and 📺 in the other — where 📺 marks an episode.

0.8.0

— Unified manual import

Highlights

The two hand-import paths — the "manual" form and the wizard — are now one, and the editor behind them has been rebuilt. Pick a resource type, prefill it from a source or start blank, and land in a draft where every element is editable on its own — down to a song's performers. Alongside it, every import now reports one state from item to run, and Kitsu joins the sources with real episode data.

Manual import

  • One Manual import entry point replaces the old "Manual" and "Assisted", open to moderators.
  • Pick the resource type first — anime, song, studio, person, group, franchise, tag. For an anime, prefill queries the chosen source live (AniList, offline database, AnimeThemes) with the same filters and depth layers as the automatic import; pick a result and go. Other types start from a blank form. Resources that depend on another (episode, theme, variant) are created as a layer of an anime, never on their own.
  • Tick the layers to load up front (genres, studios, staff, episodes, themes) and cap each one: the draft arrives already filled.

Draft editor

  • Every element of a draft — person, studio, episode, theme, variant, song — has its own form, opened by a on its row. Fix a studio or an episode instead of deleting and recreating it.
  • Work either way: synthesis view shows the whole draft at once and edits in a page; step-by-step view moves layer by layer and edits in a modal, without leaving the page.
  • Adding starts with one question — where does it come from? A resource already in the draft, an external source, or a blank form. The side drawer is gone.
  • Edit as deep as the data goes: a song's performers, a variant's staff and its per-episode appearances, a theme's song and its variants.
  • Import from… on each layer fills it from an external source: episodes from Kitsu, studio logos from AnimeThemes.
  • Before submitting, a page states what goes to review, what gets deleted for no longer being attached, and what will fail at import.

Import status

  • One vocabulary across the module — To review → Ready to import → Imported — replaces the technical per-item statuses. An item, a bundle and a whole run all read the same way.
  • A bundle is ready only when nothing inside it still waits for a decision, and a run rolls up its bundles the same way.
  • Import buttons follow that state: a bundle with an unsettled conflict or duplicate cannot be imported. Admins keep a force escape.
  • Imports are filtered on two independent axes — how ingestion went, and where validation stands.
  • The "to review" count is the number of decisions left to take, not the number of items.
  • Import everything that is ready applies every bundle that needs nothing more, in one click.

Kitsu as a source

  • Kitsu joins AniList, the offline database and AnimeThemes, and serves episodes with their title, air date, synopsis and thumbnail.
  • An automatic import merges them by number into the episodes the primary source only knows by count, so an anime keeps a single episode list.
  • An episode's airing season is derived from its air date.

0.7.0

— Data quality & import polish

Highlights

Imported data is now trustworthy and the import screens pleasant to work with. Themes carry their own airing season, the four Import screens have been rebuilt around clear bundle cards and in-place review, and a long list of import gaps — lost episodes, missing studio logos and artist photos, dropped ids — is closed.

Theme seasons

  • A theme now has its own airing season, so a long-runner's twenty-fifth opening is shown and sorted by when it actually aired, not by the anime's debut. A recent One Piece opening no longer looks like it dates from 1997.
  • The theme list can be filtered and sorted by the theme's own season, and a moderator can correct a variant's season when a source got it wrong.

Import, redesigned

  • The Import home is now three action cards, the list of imports, and the active sources — no more tabs.
  • The automatic-import screen reuses the catalog's filters (season, year), groups the import layers by cost, and lets you cap each one. Loading, empty and error states are handled properly.
  • The import detail page is a column of bundle cards with colored statuses and icon actions, and a whole import can be validated in one click.
  • Imports are reviewed bundle by bundle: a synthesis view, an item-by-item navigator, field checkboxes, merge decisions saved as you go, and clear flags for failed items and partial bundles.

What imports better now

  • Episodes are no longer lost when several animes are imported together — runs that used to drop most of their episodes now keep them all.
  • Studio logos and artist photos are now imported, groups are created, and an anime's ids from different sources accumulate instead of being dropped.
  • AniList synonyms and the English title are now kept as alternative names.
  • Importing from the offline database now brings in themes and handles two spellings of the same studio.

Corrections

  • A conflicting external id no longer fails a whole item and strips its other ids.
  • The media counter no longer counts the same file twice.
  • Switching the import source no longer carries a stale season or year into the next run.

0.6.0

— Automatic import

Highlights

A moderator-only Imports area now fills the catalog from external sources instead of by hand. Pick an airing season, select the animes you want, and the application fetches their metadata, studios, staff, episodes and themes — down to the images and videos. Nothing reaches the catalog without review, and any import can be undone.

Automatic import

  • Pick a source, a season and a year, and the application lists the matching animes, flagging those already in the catalog.
  • Select the animes you want — or the whole season — then how deep to go: genres, studios, staff, episodes, themes.
  • The import runs in the background, so you can leave the page. A full season (around fifty animes) takes about two minutes.
  • Each imported anime forms a bundle with its related resources, reviewed and applied in one go.

What gets imported

  • Animes: titles, format, status, airing season, dates, episode count, synopsis, cover and banner.
  • Studios (with their animation or production role), genres, staff (director, music, character design…) with their roles and photos, and episodes.
  • Themes: openings and endings, each linked to its song, its performers and its video versions.
  • An anime seen by several sources is recognized and enriched rather than duplicated: its AniList, MyAnimeList, AniDB… ids accumulate on a single entry.

Review & validation

  • Every import is reviewed resource by resource, with a Before → After comparison field by field: you choose exactly what gets applied.
  • A name close to an existing entry is never merged blindly. The item is flagged "Doublon possible" and lets you merge it or create a new entry.
  • An applied import can be undone, item by item or as a whole. The confirmation screen warns about what would be overwritten and refuses to delete an entry other data depends on.

Theme editions

  • An anime airing two versions of the same opening — an advance premiere, say — now keeps both. The second one used to be silently lost.
  • On an anime's page, plain themes are listed first, then each edition in its own sub-section. The edition also shows in the theme catalog and on a theme's page.

Media

  • Covers, banners, studio logos, staff photos and theme videos are downloaded and hosted in the background, without holding up validation.
  • A remote server under strain no longer costs you the media: downloads are retried automatically, and an admin can relaunch any that stayed in error in one click.

Corrections

  • Animes with no known airing season now always appear at the end of a date-sorted list, in both directions. Previously, sorting newest-first placed them at the top, as if they were upcoming.
  • On an anime's page, themes of the same type now appear in a stable order from one visit to the next.

0.5.0

— Names, links & shareable URLs

Highlights

This release reworks how every entry is identified, found, and linked. Each anime, series, studio, episode, artist, group, staff member and song now leads with a primary name, carries an open-ended list of aliases that search can match, and lives at a readable, permanent address. External links to reference sites (AniList, MyAnimeList…) are now available across the whole catalog — in the API and on detail pages — and the staff page is brought in line with the artist and group pages.

Names & search

  • Every entry — animes, series, studios, episodes, artists, groups, staff and songs — now shows a primary name alongside its Japanese and romaji variants, plus an open-ended list of alternative names (aliases). Search finds an entry by any of its names, including aliases.
  • Animes and series now lead with their main (often English) title where one is known; their addresses follow this main title, so some anime and series URLs have changed.
  • Every detail page now lists a resource's alternative names in the sidebar, each shown with its language flag (or a "Synonyme" badge when no language applies). Long lists collapse behind a "Voir tout" toggle.

Navigation

  • Detail page addresses are now readable and shareable: animes, series, studios, artists, groups, staff and themes use a name-based address (e.g. /catalog/animes/bocchi-the-rock) instead of an internal identifier. Episodes live under their anime (e.g. /animes/bocchi-the-rock/episodes/1).
  • Each address is unique and fixed for the lifetime of an entry, so bookmarks and shared links stay valid even if a title is later edited. Previously shared identifier-based links are no longer valid.

External links

  • Animes, series, episodes, studios, songs (and their alternate versions), artists, groups, individual persons, themes and theme variants can now carry external links to reference sites (AniList, MyAnimeList, Kitsu, AniDB…), exposed throughout the API.
  • These external links are now shown in the sidebar of the theme detail page, alongside the existing links on the other detail pages.

People

  • The staff member page now matches the artist and group pages: a hero, a sidebar (information, professions, groups, external links), and Themes / Animes tabs.
  • A staff member's theme and anime credits are now filterable (search, type, role, period), sortable, and paginated, with both grid and list display modes. Each credit shows the person's role.

0.4.0

— Unified browsing & People

Highlights

This release brings every list and detail page under a single, consistent results-and-filters system, and introduces a full People section (artists, groups, persons) with redesigned pages. Browsing now feels the same across the catalog, music, and themes: shared filter controls, a results header with live counts, and uniform image fallbacks throughout.

Browsing & filters

  • Every list — series, animes, studios, themes, artists, groups — now shares the same results component: consistent layout, grid/list toggle, sorting, pagination, and a header showing how many results match.
  • Reusable filter controls across the whole app: multi-select pills, single-select pills, a unified season + year period selector, and grouped filter blocks.
  • Themes gain an advanced filters panel, and filter bars can be collapsed with a toggle to keep pages uncluttered.

People

  • New unified People section covering artists, groups, and individual persons, available both in the browsing interface and the API.
  • Redesigned artist and group detail pages: hero, sidebar, filtered theme history, and an enriched members tab.
  • The people list now shows everyone by default (artists and groups together).

Catalog

  • Studio detail page reworked: founding year and country shown on a single line, with the country flag.
  • Studio browsing gains an All / Animation / Other mode selector.
  • When sorting animes by date, not-yet-released titles are now pinned at the upcoming end of the list.

Visual consistency

  • Anywhere an image is missing or fails to load, a colored letter placeholder is shown instead — applied consistently to detail heroes and to the avatars and chips in sidebars.

Themes

  • Theme list redesigned with both list and grid display modes.

Corrections

  • The reset control on the theme list no longer triggers an infinite loop.
  • The sort dropdown now reflects the active sort when a page first loads.
  • The grid/list view mode no longer desyncs on detail pages.
  • The year filter is now validated, and episodes display correctly on covers.
  • Fixed missing filter options on the artist and group detail pages.

0.3.0

— Anime and theme related detail pages

Highlights

All anime and theme related detail pages have been redesigned around a consistent layout: a hero section with key information, a sidebar (tags, description, external links), and a main content area with filters and pagination. Navigation also gains breadcrumbs and a cleaner appearance on detail pages.

Anime page

  • Full redesign with tabbed layout (Themes, Staff)
  • Genres, age rating, and associated studios (with their role) now displayed
  • Staff section grouping credits by category

Serie page

  • New detail page with hero (cover image, anime and theme counters, source badge)
  • Anime list with filters (format, status, year) and sort by name or release date
  • Sidebar: tags, description (truncated with a "Read more" button), external links

Studio page

  • New detail page with hero (logo, type, founding year, country)
  • Produced anime list with filters (format, status, year, role) and sort by name or release date
  • Sidebar: information, description, external links

Theme page

  • Redesigned with a sidebar (artist, series, studio, staff by category) and video clip playback directly on the page

Navigation

  • Breadcrumbs on all detail pages (e.g. Series › Fullmetal Alchemist)
  • Navigation tabs (Series / Anime / Studios) are hidden on detail pages to reduce visual noise
  • Full season name displayed (e.g. "Spring 2024" instead of the abbreviated label)
  • Anime and studio lists default to descending release date sort

0.2.0

— Profile & Settings

Highlights

This release introduces user profiles and a full settings panel, image storage for avatars and banners via MinIO with automatic resizing through imgproxy, API tokens for staff members, video clips on theme variants, and a redesigned administration back-office.

User Profiles

  • Public profile page displaying avatar, banner, display name, role badge, bio, and links to external accounts (Twitter, MyAnimeList, AniList)
  • Default gradient displayed when no banner or avatar is set; colored initial used as fallback

Settings

  • Multi-tab settings panel: Profile, Preferences, Password, Connections
  • Avatar and banner upload with instant preview and inline error messages; client-side validation (format and size) before any request is sent
  • Visual theme picker across 14 DaisyUI themes; active badge synced in real time with the navbar toggle
  • Password change form that keeps the session alive

Images & Storage

  • Avatars and banners stored in an S3-compatible object store (MinIO), served through imgproxy (256×256 for avatars, 1200×300 for banners, converted to WebP)
  • Catalog images (anime covers, artist photos) can be imported from a remote URL with MIME and size validation

Video Clips

  • Theme variants can now have an associated video clip, playable directly on the theme detail page

Administration

  • Back-office fully redesigned with the Unfold theme; all catalog, music, theme, and user entities are manageable
  • Swagger UI accessible to staff members via the admin dropdown
  • Add API tokens (Knox) directly from the settings panel, usable for authenticated API calls from external tools

0.1.0

— Base Catalog

Highlights

First release of Anisong. It lays the foundation for the data catalog, REST API, and browsing interface. All core entities are accessible — animes, music, and themes — with their relationships and associated credits.

Catalog

  • Franchises, series, and animes with broadcast information (season, year, format, status)
  • Episodes with numbering and types (regular, OVA, movie…)
  • Animation studios
  • Tags and air seasons

Music

  • Artists, groups, and persons with their details
  • Songs with artist credits and alternate versions

Themes

  • Openings, endings, and insert songs linked to animes and episodes
  • Theme variants with staff credits (direction, animation…)
  • Staff detail pages with complete credit history

API & Interface

  • Full REST API with interactive Swagger documentation and per-resource tags
  • Browsing interface with search and filters (type, format, status…)
  • Light / dark theme, persisted and synced with the user account
  • Authentication and user profile
  • Static pages: About, Changelog, Terms of Service, Privacy Policy