2.5
This release implements ChatGPT support via OpenAI's unofficial REST API and Mokuro HTML support, enabling tap to select reading and mining of pre-processed manga volumes, and a variety of quality of life and stability improvements.
System Requirements: This application has been tested to work on a variety of devices and emulators running Android 7 to 13. Please note that a significant amount of internal storage space may be taken up by the dictionary database for indexing in order to optimize query speed and performance. Try to give the application around 2-4GB of storage space. Make sure your Android WebView is updated before use. This will resolve common issues that may occur with ッツ Ebook Reader or Mokuro.
Existing Users: Please note that there are changes to the default card template in order to make duplicate checks work. Existing users will need to set the Term
field as the first field if they are using jidoujisho Yuuna
card type. Swap the Term
field with the Sentence
field in AnkiDroid via Manage note types
if your card type was made prior to this version. New users will have the new card type field ordering by default.
🃏 Your comprehensive language learning suite
2.5
📚 Mokuro Support
- Mokuro - A new reader media source will allow users to view manga volumes pre-processed as single HTML files via Mokuro.
- Users will be able to tap to select and get the current image when mining with the source.
- Users may bookmark and add online catalogs of Mokuro volumes for quick access in between volumes, allowing convenient online access to community repositories.
- Viewing an online catalog allows the user to browse to a volume. When the WebView loads into a Mokuro HTML file, the media source may take a very brief time before it switches modes to allow the user to mine and highlight text.
- Users may also import a local HTML file on their device (note that relative images must also be in the appropriate location in the filesystem) or use a direct URL.
- Users may use volume button scrolling when reading with the Mokuro media source.
- Viewing Mokuro volumes with the app defaults to portrait mode. The app automatically toggles single and dual page modes when changing orientation.
🤖 ChatGPT Support
- ChatGPT - Users can now interact with ChatGPT-3.5 by logging into their OpenAI account. Login tokens expire and it is possible that users may need to solve a captcha occasionally.
- Users may chat and may highlight text sent and received in the app, in various languages supported by ChatGPT. Users are advised not to heavily rely on an AI language model if they cannot accurately distinguish its correctness and accuracy.
- Clearing the chat will start a new conversation with ChatGPT.
- Please note that this project is not associated with OpenAI, and that ChatGPT is in active development. As this version's implementation relies on an unofficial REST API, it is possible at some point that support and integration for this feature may require updates to retain its functionality, or may be discontinued.
- As the API may change from time to time, the app now relies on Firebase Remote Config, meaning the user will generally not longer be required to update the app if the latest working reverse proxy API URL changes.
- Note: As of 2.5.14, the app now relies on official API keys from OpenAI.
🎴 Duplicate Checks
- Existing users will need to set their template that they want to check duplicates for (the Term or Word field) as the first field of their card type for this to function. For users that use the app's provided card type, You may do this via the
Manage note types
option in AnkiDroid and swapping theTerm
andSentence
fields in place. New users will have an updated default card type and template, and no change is necessary from this version onwards. - The app will now show a red icon for the Card Creator and Instant Export quick actions if there are notes in AnkiDroid with the currently selected card type that are found to have the same first field value as a dictionary entry's Term.
- This works on recently exported cards or cards that have been exported with the app after the user has installed this version.
🎈 Quality of Life Features
- Single Dictionary Select - A new button on the rightmost tag of a dictionary entry allows users to select a single dictionary meaning when opening the Card Creator or use Instant Export. Users using the Expanded and Collapsed Meaning fields will have the single dictionary in the Expanded Meaning and the remaining fields in the Collapsed Meaning if they use this option.
- Field Locks - Users may select the leftmost icon of a field when using the Card Creator to lock a field. Locked fields will not clear upon export while the Card Creator is open. This is useful if a user wants to export multiple cards from the same field value.
- Sentence Picker - A new enhancement in the Sentence field will allow users to select sentences delimited by punctuation and spacing.
🛠️ Miscellaneous Changes
- The Text Segmentation button has been replaced with the Sentence Picker button in the ChatGPT and WebSocket media sources, and YouTube comments.
- Using the Creator action will now set the selection as the sentence rather than the term in various selectable text widgets. This change has been made to make snipping a sentence from ChatGPT's responses easier, among other use cases.
- Implemented caching for multiple media sources, enhancements and quick actions which fetch online resources, such as images and audio. The app will now use less bandwidth and will not request resources that have already been fetched in the current session, and may also cache in between sessions.
- Added Camera, Pick Image and Crop Image as default Image field enhancements on first time use.
- Added Pick Audio and Audio Recorder as default Term Audio enhancements on first time use.
- Added an option that allows the Reader WebView not to override the app theme.
- Fixed an issue where the Reader WebView would not have options for light mode and forced dark mode themes only.
- Fixed an issue where selecting the Channel option on a video media item's detail page would sometimes not work.
- Fixed an issue where the status bar would hide after recursive searching or opening the Creator when viewing YouTube comments.
- Fixed an issue where the collapsed/expanded/hidden preference of a dictionary might not update correctly after the value has been changed.
- Fixed an issue where starts with results were prioritized over exact results when searching in media sources. Searching on search bars will prioritize starts with results, while searching in media sources will now prioritize exact results. This addresses an issue that may occur a lot in Mokuro media sources.
- Fixed an issue with the Crop enhancement where its dialog may not appear.
- Fixed an issue where opening the Crop enhancement dialog will show the first image to be cropped even on subsequent attempts to crop.
- Fixed an issue where searching audio with the JapanesePod101 source would not show an appropriate error toast if a result was not found.
- Fixed an issue where using the ImmersionKit enhancement will play audio even if no item has been selected yet.
- Fixed an issue where appending sentences with the ImmersionKit enhancement would replace image and audio.
- Fixed an issue which prevented cached Bing images from being re-exported.
- Fixed an issue where Jellyfin would display that progress tracking is not supported with the external player. Media will now also track progress if the session is exited back to Jellyfin or the app enters inactive state, and will be marked as done if nearly finished. Videos played from Jellyfin will now also start based on tracked progress.
- Fixed a possible black screen that may occur when switching apps while the Jellyfin media source is in use.
- Fixed an issue related to Android intents that may cause previous intents to fire.
- Fixed an issue where the expanded/collapsed arrows beside dictionary entries would not change and display correctly.
- Fixed an issue related to long text using a marquee animation showing unwanted widget rebuilds in the dictionary, profile and catalog menus.
- Fixed an issue where hidden dictionaries were included in the Meaning field.
- Fixed an issue where thumbnails in Reader media history would fit width instead of height.
- Fixed an issue where the application would not proceed to the main menu if there is no internet connection.
2.5.1
- The player's backing VLC player now uses hybrid composition instead of virtual displays which may improve performance.
- Fixed an issue where using the app's OS-wide context menu action or sharing to the app would not exit the app and would retain the intent when reopening the app after the action has been dismissed.
- Fixed an issue where adding to the AnkiDroid media collection would still occur if a file did not exist.
2.5.2
- Implemented compression for images exported to the AnkiDroid media collection. 70% JPEG quality is used.
- The Lyrics media source now supports Uta-Net as a fallback source when lyrics cannot be scraped from Google. Uta-Net has many Japanese songs that are not available on Google, and may find songs that do not exactly match the title and artist, but are the right match, but may take longer to scrape from.
- Fixed an issue where there was extra information included after lyrics scraped from Google.
2.5.3
- The context menu now works for the Mokuro reader source.
- Added a Share context menu option across most widgets in the application with text selection controls.
- Narrowed limited search domain of Uta-Net scrapes and improved headless WebView scrapes by ignoring image loads and enforcing a specific user agent.
- Fixed an issue where a selection made in the subtitle would hide as the widget would rebuild when the bottom bar's visibility changes.
- Fixed an issue where long pressing on the subtitle in the Player would keep the text selection toolbar visible. This toolbar has been removed instead. Please use the Share Current Subtitle option to copy or share the subtitle instead.
2.5.4
- Fixed a fatal crash that may be caused by unsanitised lone surrogates in UTF-8 when making dictionary searches.
- Fixed an issue where the database did not preload upon reopening the app from the background.
- Removed emojis from tap to select widgets to mitigate a tap to select issue with text containing emoji.
2.5.5
- The Lyrics media source will no longer require refreshing media when switching to and from a different Reader media source, and will no longer require the tab to be active to detect media changes.
- Miscellaneous changes to the Player tab and Licenses page.
2.5.6
- Added a dark theme toggle for the Mokuro media source. This option needs to be manually toggled on, as it is off by default.
- The Sentence field will now be used as a fallback for the Word field if it is blank when using the Search Dictionary enhancement.
- Profiles that do not correspond to existing card types are now deleted upon selection or use in the Card Creator.
- Changed the opacity of the icon when a quick action is in use to better present its change in state.
- Fixed a possible fatal crash related to a dependency used by the Lyrics source to detect the current played media.
- Fixed a possible exception that may be related to unique indexes in the backing database.
- Fixed an issue where sometimes the orientation would not unlock after exiting a media source.
2.5.7
- A toast is now shown to inform the user that card export with media is not possible when embedded subtitles are currently processing.
- Fixed an issue where the gray thumbnail of a video might appear for another video if deleted.
- Fixed an issue where tapping on kanji to search on dictionary headwords does not show and hide the status bar appropriately in media sources.
2.5.8
- All audio played within the app will now pause when headphones are disconnected.
2.5.9
- Upgraded Isar database dependency to 3.1.0. This brings miscellaneous changes and fixes to database operations using libmdbx.
2.5.10
- Fixed an issue that prevented some devices that did not have access to the public DCIM directory from getting past the splash screen.
- Fixed an issue which may have caused non-Yomichan dictionaries to possibly be listed separately or be omitted in the pop-up dictionary.
- Fixed an issue when importing a DSL dictionary that caused an immediate crash when the file is too big which was caused by reading the entire file's bytes when checking its character encoding.
- Fixed an issue where selecting a drop-down option in the dictionary or profile menu would cause the entire dialog to refresh.
- Fixed an issue where duration would display with a trailing zero for hours and minutes in some instances.
- English results will no longer break down search terms into the character level.
- Japanese results with the same reading will now be compared with frequency tags instead of popularity.
- Included missing licenses for included software, ッツ Ebook Reader, Ve and ipadic. Please do not hesitate to contact the project author for missing attribution concerns.
2.5.11
- Users may now toggle Stretch to Fill to allow the video to fill the entire user's device width.
- Text in the Transcript can now be selected. Tap to select and the dictionary overlay will now show when viewing all subtitles for a video. The behavior will be appropriately different when the Transcript has been opened for subtitle alignment.
- The option to toggle Shadowing Mode has been removed from the Player Settings in order to make room. Tap on the video duration to toggle this mode instead.
- Seeking to a different subtitle in the Transcript in Shadowing Mode will change the subtitle to repeat.
- A new button allows users to toggle Transcript Playback Mode, which will change the behavior of the Transcript to not close on selection and seek of a subtitle. Turning this mode on also shows a play/pause button in the Transcript. Tap to select searches made in this mode will pause the player, and will resume on clear or swipe away.
- Fixed an issue where played sentence or term audio continued to play after the Card Creator is closed.
2.5.12
- Added a new button which toggles the video's visibility when the Transcript is on.
- The video will no longer automatically pause if the Transcript is opened when Transcript Playback Mode is toggled on.
- Audio files viewed in the Player will now use image enhancements when there is no video to take an image from.
- Added bottom padding to the Transcript to ensure that bottom-most subtitles will be scrolled to smoothly.
- Added an assortment of audio file extensions to the filtered list of files viewable by the Player.
- Fixed an issue where audio export would not work if an image from a video is not available.
- Fixed an issue where the Transcript sometimes did not align accordingly to subtitle delay.
- Fixed an issue where the Transcript may not smart pause and resume upon use of the Card Creator.
- Fixed an issue where the Sentence field may have the wrong value when opening the Card Creator from the Transcript.
- Fixed an issue where the Play/Pause button in Transcript Playback Mode did not handle Replay state.
2.5.13
- Tags - Users may export space-separated tags with their exported Anki notes with the
Tags
field. Existing users will need to assign this field and its enhancements. New users will have it assigned by default as a collapsed field. - The Tags field will always populate with its persisted value upon opening the Card Creator or using Instant Export.
- A fresh card, Clear All and Card Export will reset the value to its persisted value. Using the Clear button as an enhancement will wipe the field blank.
- Users may assign and use the Save Tags enhancement to persist the value of the field.
- Fixed an issue where the highlighted subtitle would jump erratically in the Transcript.
2.5.14
- ChatGPT support no longer relies on an unofficial API and will no longer require logging in with an OpenAI account. Users will now be required to provide their own API key.
- Users may expect significantly robust uptime as the app now relies on the official ChatGPT API, and turbo chat completion speeds.
- Users that cannot get a response may check their usage quota.
- Tokenless methods will be reconsidered for readdition if they are stable and not prone to unexpected downtime.
- Added a warning toast for users to inform users that import structured content Yomichan dictionaries that some entries may be missing.
- Added a toast to show the new subtitle delay value when aligning the subtitle with the Transcript.
- Fixed an issue that may cause a black screen on startup.
2.5.15
- Removed some unnecessary dependencies from the project.
- The user's sent message will now be returned to the text field and will not be added to the message log if a chat request does not work.
- Fixed an issue where the user may remain in landscape orientation when exiting the Player.
- Fixed an issue where the app may crash upon switching orientation or toggling stretching to fill.
🦢 A swan song of sorts
I know that I've been at it non-stop with the updates lately. Over the last few months since I released 2.0, I have been able to sit with more comfort knowing that my app has matured as of late. There really is so much going on in the codebase that I can't help but reflect on what I could do now knowing better the requirements and optimal project architecture than when I started the Yuuna rewrite.
This version marks the last missing feature that I could not carry over from Chisa, reading manga. The community has done a great job of make looking up, reading and mining manga a very lightweight and straightforward experience on the go. This app, that was a mere video player that queried words from Jisho.org back then is now what it is now because of the variety of learning experiences that I have been through, and it has been a real vehicle for me to learn all kinds of things, both in terms of my fluency in Japanese and Dart.
I'm really just happy I'm able to keep working on this thing, making it work with YouTube, then with novels, lyrics, then visual novels via a WebSocket server, so on and so forth, all while also having to improve my ability to work with language parsers and my aptitude for the data structures and algorithms relevant to the task. I've come to know a lot of people who I share aspirations with, and fellow developers to learn from and work with.
Though there are bumps in the road I've taken, I wouldn't have it any other way. As always I'd like to thank all of my users, most especially the testers that volunteer their time to inform me of any issues that I overlook -- this thing is massive now and I'm not able to discern all of the things going on under the hood myself.
There is still a lot that I want to do, and the app being as stable as it is now is the chance for me to work on user and developer documentation and doing some clean-up. I anticipate in the future that I cannot run as wild as I have in the past few months. I will probably be really busy soon, and I'll probably sit back as an observer -- the perfect opportunity for me to sit back and actually use this thing, so I can get some insight for myself on the best way forward, but I trust that with this version I'll be leaving things in a good place, and with all these new changes and features, you'll be in comfort for the long while to come.
Happy learning and whatever goals you have, I hope this version helps you get to it! Anyway, that's enough from me. I'm off to read some more ROBOTICS;NOTES!
📲 Which file should I download?
The files below are for different device architectures. As a rule of thumb, arm64
should work for most modern mobile devices. armeabi
should work on older devices. Generally, desktops and emulators should use x86_64
.
Depending on which device you are using, download the appropriate APK
by expanding the Assets
drop-down below and install on your mobile phone by launching the APK
with your file explorer.