Lira

Jan 2025 - May 2025personaliOS App

An iOS reading app that helps you visualize scenes/characters from your books using AI.

Tech Stack

SwiftSwiftUISwiftDataReadiumUIKitAIProxyStoreKitCloud KitOpenAI API

What is it?

  1. Scene Visualization: Use AI to generate images of scenes/characters from your books.
  2. Turn your book into an audiobook: Listen to your books with a built-in TTS engine.
  3. Accessibility in mind: Features designed to support diverse reading needs.
  4. Interactive Annotations: Add bookmarks and highlights to your reading material.
  5. Reading Progress Tracker: Keep track of your reading habits and milestones.

Long story

This was actually my thesis project. I wanted to work on something close to home, especially since I knew I’d mostly be working on it during the weekends. Eventually, I landed on the problem of visualization.

One of, if not the biggest, hurdles for me when reading fiction is visualizing the scenes and characters being described in the book. This is especially true for sci-fi books. During a book club session, I realized I wasn’t alone. In fact, for many people, this is one of the main reasons they don’t read and would much rather watch a movie instead.

Whenever I had trouble visualizing something, I would usually search for fan art online. But that came with another big problem: spoilers. On top of that, I also found it annoying to switch between apps or devices just to look up fan art. So I decided to build a solution for it.

The app functions as a normal e-reader. It has the common features you’d expect, such as importing books, reading them, changing font styles and themes, highlighting text, and more. What makes the app different is its AI visualizer feature. Users can input a scene or character description they want to see, and the app generates an image using the proper context from the book. The app also includes a text-to-speech feature to improve accessibility.

Building an e-reader app turned out to be a challenge on its own. I learned a lot about Readium, the reading engine, and how it uses WebView to render EPUB files. One problem I encountered was maintaining consistency in the generated images. Even when the request had the correct context, the model could still generate multiple variations of the same character.

To solve this, I came up with a feature that allows users to add a character image as context for the scene visualizer. When visualizing a scene, users can choose an existing character image and ask the generator to use it as a reference. This helps produce scenes where the character remains visually consistent across different generations. In the end, this project was really fun to work on.

Building an app while also being the “user” helped me understand the problem much better, which ultimately led to a more complete product.