{#if currentUserIdentity.id === -2} Please log in to view this page. {:else if currentUserIdentity.id !== -1} {#await wrapped(user, currentUserIdentity)} Loading ... {:then wrapped} {@const anime = year(wrapped.statistics.anime)} {@const manga = year(wrapped.statistics.manga)}
User Avatar
{currentUserIdentity.name}
Status Posts: {wrapped.activities.statusCount}
Messages: {wrapped.activities.messageCount}
Days Active: {#await activityHistory(currentUserIdentity)} Loading ... {:then activities} {#if activities === undefined} Loading ... {:else} {fillMissingDays(activities, true).filter((a) => a.amount !== 0).length}/365 {/if} {/await}
Anime
Time Watched: {((anime.minutesWatched || 0) / 60 / 24).toFixed(2)} days
Completed: {anime.count}
Episodes: {episodes}
Manga
Time Read: {(((manga.chaptersRead || 0) * 8.58) / 60 / 24).toFixed(2)} days
Completed: {manga.count}
Chapters: {manga.chaptersRead || 0}
{#if animeList !== undefined} Highest Rated Anime Cover
Highest Rated Anime
    {#each animeList?.slice(0, 5) as anime}
  1. {abbreviate( anime.title.english || anime.title.romaji || anime.title.native, maxAbbreviateLength, abbreviateTitles )}
  2. {/each}
{:else} Loading ... {/if}
{#if mangaList !== undefined} Highest Rated Manga Cover
Highest Rated Manga
    {#each mangaList?.slice(0, 5) as manga}
  1. {abbreviate( manga.title.english || manga.title.romaji || manga.title.native, maxAbbreviateLength, abbreviateTitles )}
  2. {/each}
{:else} Loading ... {/if}
{#if watermark}
due.moe/wrapped
{/if}

Don't be alarmed! The background will appear as its inverse in the preview, but will be corrected in the final image. Media covers may not appear on mobile Apple devices.

Enable watermark
Enable background transparency
Include music
Include specials and OVAs
Fit long titles
{#if abbreviateTitles} Maximum title length
{/if}


{:catch} {/await} {:else} Loading ... {/if}