Palette: A fun, interactive image editor based on a music album
The Album Art Generator for IU's album, Palette.
I was browsing around, and found someone's DeviantArt mockup of an album art from IU, a K-pop artist. Originally, the album art looks like this...
The person re-made this album art in Photoshop as a template, so you're able to change the image and text. However, this is not very accessible to people who don't have Photoshop, so I wanted to make a fun web app that anyone can use to make their own album art.
I quickly thought about how I was going to make this app. Everything was do-able in my head: create a straightforward UI that encapsulates the album art template, handle uploading and implement a simple cropping system. However, I didn't know how the user was going to be able to save the album art they created. Luckily, the app Carbon came into my mind. Carbon is an app where you can paste your code, and it'll basically put it into a pretty frame. For example...
I looked at Carbon's source code, and tried to look for the library they were using that related to saving webpages to images. I found dom-to-img, a library to save parts of the webpage to an image file. Now that I found a way to save a generated image, I had the whole app planned out. It was time to start getting the resources for the album art.
First I took the album art and cut out the picture.
Then I looked at the person's mockup, then checked what font they were using. It was called "LTC Bodoni 175." I searched for it online, and found that it comes with my Adobe Fonts subscription, with website licensing too. Sweet!
I then made a basic UI, and then the app was functioning.
For cropping, I decided to use the react-easy-crop library. I liked this library as it was very minimal--no sliders or anything like that, just a simple one where you can drag and scroll. It even came with guide lines too!
To indicate that the photo was movable/croppable, I flashed the guide when the user inserted a photo. I wanted to see if people would know that they had the ability to adjust the photo. I asked my friends to test the website without mentioning the cropping feature. After they finished using it, I asked them about the first action they took upon loading a photo. All of them said they moved the photo around. Even some of them said that they would've still moved it even if the guide didn't show up at all. This cropping feature is similar to posting a photo on Instagram, so most people should be able to use it, at least Gen Z...
I implemented the library, but there was one more problem left: setting the initial size of the photo. Basically, the problem was that if the user loaded a huge photo, it would be too big for the frame, and if the user loaded a small photo, it would be too small for the frame. The user would either need to zoom out or zoom in extraneously to fit their image. To fix this, I coded a quick algorithm that takes in account image size and device size. No matter how big or small photo or device, the photo will always be the perfect size when loaded into the template.
After I was done with that, the app was done. I had one more thing... IU is a Korean artist, so I wanted to add Korean translations to this app. I researched a bit to find the most accurate Korean translator. I knew that it wasn't going to be perfect, but I wanted Koreans to at least have an easier time understanding. I used react-i18next to handle the language changing. I implemented English and likely less accurate Korean translations, then made it so if the user's browser language was set to Korean, the app would automatically switch to Korean.
As I was putting the finishing touches, I tagged the GitHub repository with "IU". I was curious and checked the other repositories tagged with "IU". There's a good amount! I starred some that I liked.
A few hours later, a developer from one of the repositories I starred made a pull request to fix the Korean translations. Huge thanks to wonderlandpark for contributing.
Once I made the finishing touches and added SEO, it was completely finished. I deployed it on Vercel. Overall, this was a very fun project to make!
If you would like to try it, you can check it out at paletteiu.vercel.app