Table of Contents
  1. Draw My Today - AI Picture Diary
  2. Technology Stack
  3. Flutter
  4. Backend
  5. PromptEngineering
  6. Demo
  7. Finish

We share the story of developing the “Draw My Today - AI Picture Diary” service.
👉 한국어 버전


Draw My Today - AI Picture Diary

AI-based emotional diary app that artistically records daily life
👉 Android : Link
👉 iOS: Link

Draw My Today - AI Picture Diary is a service that was developed over 6 months by a team of 5 members. It creates a unique picture diary using artificial intelligence (AI), which is based on the emotions and stories entered by the user.

The design is crafted for easy utilization in a one-page, one-task format, ensuring user-friendly access.The design is crafted for easy utilization in a one-page, one-task format, ensuring user-friendly access.

Everyday emotions and experiences are expressed in colors and images, which can also be used as an attractive mood tracker. Users can recreate images as they wish and share images they like by posting them on social media.

May the day come when our service can be seen on social media platforms... 🙏May the day come when our service can be seen on social media platforms... 🙏

Technology Stack

Frontend & Backend & AI technology stackFrontend & Backend & AI technology stack

Flutter

The backend team prioritized the implementation of Apple and Google social logins. Consequently, the Flutter team conducted prompt engineering based on Firebase until the backend API became available. To facilitate the seamless replacement of Data Access logic with the backend API from Firebase in the future, the Flutter team introduced Clean Architecture to design the structure.

Application ArchitectureApplication Architecture

State management is handled using Cubit, and operations involving tasks such as extracting the average color of an image for use as a background are implemented with a Cache Layer in the Repository. This implementation aims to conserve the phone’s battery by optimizing resource-intensive operations.

Colors extracted from the image were used as the background to increase immersion.Colors extracted from the image were used as the background to increase immersion.

Additionally, we were able to improve the completeness of the service through animation and UX improvements.

Onboarding
Creating diary
Diary Detail

The onboarding screen consists of three pages, utilizing PageView to control the Opacity of each page. All elements smoothly appear as if touched by a brush, employing sequential application of Transition and Opacity upon their appearance.

In the diary creation screen, where image generation takes approximately 6-8 seconds, a loading screen is implemented using Lottie animations and a message based on user input to prevent user disengagement during the process.

Upon initial entry to the diary detail screen, an image rating bottom sheet appears. To ensure visibility on smaller devices, content is scrolled to prevent the image from being obscured by the bottom sheet. Additionally, swiping left or right allows easy navigation to diaries of different dates. Dynamic creation of a PageView enables the loading of previous or next month’s diaries during swiping, taking advantage of the paginated handling of the diary list API on a monthly basis.

Backend

The backend team prioritizes service security by encrypting all diaries using AES before storage. Additionally, to control access to images strictly within a limited timeframe, Presigned URLs are utilized. For ensuring a stable service, a monitoring system based on Grafana has been established.

Backend ArchitectureBackend Architecture

Code quality is maintained through code reviews and the inclusion of test codes. The entire codebase is operated as open source, allowing progress tracking through the provided link.

PromptEngineering

To enhance prompts, clear goals must be defined. Without clear goals, it is challenging to discern whether improvements are being made or not.

For this project, the primary goal is to create images that evoke the emotions selected by the user. While searching for prompts on the DALL·E website, it was found that the results obtained from the DALL·E API did not consistently match those achieved with the same prompts, making it necessary to create a testing environment within the app. This allowed the identification of prompts that worked well with the API model.

Subsequently, the secondary goal is to incorporate the context of the diary content into the images. However, processing natural language diaries using conventional programming methods posed numerous challenges due to a multitude of exceptions. To address this, ChatGPT was introduced to tune the diaries into prompts, successfully achieving the second goal.

Prompt engineering was not easy to achieve the desired results compared to effort.Prompt engineering was not easy to achieve the desired results compared to effort.

Since generative AI can significantly impact the service with just one strange response, a substantial amount of time and effort in prompt engineering is invested in controlling AI.

The initial DALL·E lacked support for Negative Prompt, leading to exploration of alternatives such as Stable Diffusion and Karlo. Currently, the service utilizes Karlo, which offers free usage up to a certain limit, supporting both Negative Prompt and parameter tuning. Prompt engineering with Karlo can be easily tested on the karlo.ai website.

Future plans involve implementing the ability to customize various artistic styles and characters. Karlo provides a quantitative metric for NSFW (Not Safe For Work) content, and building a system to collect both control and target variables quantitatively will further enhance prompt engineering based on data.

Demo

Demo video

Finish

In this project, while there were many challenges in prompt engineering, we successfully achieved a consistent generation of images with a brush-like touch, capturing a sense of artistic coherence.

AI-generated soothing imagesAI-generated soothing images

Draw My Today - AI Picture Diary service will continue to be offered as long as.

We’ve hidden a game as an Easter egg within the app. if you find it, please let us know in the comments! 🥚
👉 Android : Download Link
👉 iOS : Download Link
👉 Presentation : Link.
👉 Backend Github : Link