9 ms·
Show HN: I built the most over-engineered Deal With It emoji generator
Hi, all! Author here. What started as a small tool I built for a job interview, became "The Most Over-engineered Deal With It Emoji Generator":
- All operations done fully client-side - no backend, no private data leaves your browser.
- Uses machine learning models (MediaPipe Face Detector task) to automatically scale and position glasses on the detected faces.
- Extensive customization options for glasses:
- Placement of glasses anywhere on the input image (including slightly going outside it).
- Change the size of glasses.
- No limit on the number of glasses.
- Flip the glasses vertically or horizontally.
- Customize the direction from which the glasses appear on the image.
- Different types of glasses.
- GIF output options:
- Looping mode.
- Number of frames.
- Frame delay.
- Separate delay setting for last frame.
- Output size.
- Celebration confetti
- Easter eggs.
I've been working remotely for the last >9 years. When using non-verbal communication, it's important that your tone and intent comes across accurately.. Custom emojis became for me part of expressing yourself, creating bonds and camaraderie. I've originally created an MVP of this tool while applying for a exciting new job opportunity. As a showcase of my passion for programming, building teams and creating delightful user experiences. Unfortunately, they were not impressed and ultimately did not offer me the job :( But I wanted to polish it and release it for everyone to use for free, so that you can too "Deal With It"!
I have more ideas for even more features (check GitHub[1]), but wanted to launch it and see what's the feedback and ideas from the community!
And if you're looking for a Fullstack Developer with >14 years of experience, with passion for great customer experience (remote work or locally in Iceland), let's chat!
[1] - https://github.com/klimeryk/dealwithit https://github.com/klimeryk/dealwithit
- m2fkxy 2y agoit's useless thence I love it. I lied, in fact I just used it to create a couple Slack emojis.
- klimeryk 2y ago> it's useless thence I love it. That's what kept me going while adding more features :D Just the joy of creating something so useless, but still capable of bringing smile to my (and hopefully your too!) faces. Glad you love it!
- andybak 2y agoI love it: https://s1.gifyu.com/images/SB5A9.gif https://s1.gifyu.com/images/SB5A9.gif
- pieter_mj 2y agoIsn't that a child eating creature?
- mattnewton 2y agoSaturn, yes https://en.m.wikipedia.org/wiki/Saturn_Devouring_His_Son https://en.m.wikipedia.org/wiki/Saturn_Devouring_His_Son
- pieter_mj 2y agoty. uv.
- hatingisok 2y agoNice. Thank you for this bedtime story.
- hersko 2y agoDeal with it
- pelagicAustral 2y agoI like it... faved for future fuckery. Can you add background photo rotation or shades rotation?
- klimeryk 2y agoYup, shades rotation is on the roadmap: https://github.com/klimeryk/dealwithit/issues/30 https://github.com/klimeryk/dealwithit/issues/30. Hope to get it done some time today/tomorrow. Most pieces are ready, just need to figure out a good UX for the rotate handle. Worst case scenario, it can be also an input field. Background photo rotation - could you share what would be the use case? The output would be a bit weird, since it has to be square, so either it needs to be cropped (so now there needs to be crop feature ;)) or there will be blank spaces. Honest question, I might be missing some interesting use case! But hopefully, rotating the shades would solve for most of these.
- pelagicAustral 2y agoBackground photo rotation is the over-engineered alternative to shade rotation...
- klimeryk 2y agoHahaha, roger that! I mean, it would be in line with the whole premise of the tool... I should implement it so that the whole tool/page rotates around the glasses XD
- chankstein38 2y agoThis is great! I always joke with my girlfriend about people in billboards or whatever needing deal with it glasses and will likely use this regularly haha Thank you!
- llampx 2y agoThis could be a reCAPTCHA test, to train the models to better detect eye position and face angle.
- klimeryk 2y agoIt's already using https://ai.google.dev/edge/mediapipe/solutions/vision/face_detector https://ai.google.dev/edge/mediapipe/solutions/vision/face_d... for detecting the eye (and nose) position for the perfect fit ;) The face detection should be done locally, so hopefully Google is not fine-tuning their models based on this.
- airstrike 2y ago> Unfortunately, they were not impressed and ultimately did not offer me the job :( Sorry to hear that. No recruiting process is perfect. They often get it wrong, as they clearly did here!
- klimeryk 2y agoThank you! Yeah, I totally understand and not taking it against them. It's impossible to always get the right impression and fit for the candidate (even if it was based on a few interviews and trial, like here). So I figured I'd make the best of the situation and share the project with others! Hoping to make some new connections this way, and maybe find an even better opportunity!
- Aeolun 2y agoThe only thing I can imagine is that they were up against someone making a partyparrot generator.
- aio2 2y agoYeah, this is pretty cool and they can fuck off.
- com2kid 2y agoI interviewed a developer once who was super junior on paper but had a side project of a fully featured desktop anime episode to watch/watched tracker with lots of library feature features. Hire. Interviewed another Dev who made arcade sticks as a side project. Hired. You can't teach passion. Hire all that passionate people you can. Tech stacks are irrelevant compared to the love of building things.
- vladde 2y agoLove it. I'll definitely be using this!
- agos 2y agothis is great. feature request: DEAL WITH IT caption and relative options
- klimeryk 2y agoThanks for checking it out! I have adding text on the roadmap: https://github.com/klimeryk/dealwithit/issues/31 https://github.com/klimeryk/dealwithit/issues/31 :D Upvote on GitHub to show interest!
- klabb3 2y agoUsed in WhatsApp on iOS the last frame didn’t stay, it seems to stop instantly and/or loop back to too early. IIRC I used 20 frames, 250ms between frame and 2500ms for the last one. Seems to have a similar problem on Telegram. Otherwise incredible. The customization options are much appreciated.
- summermusic 2y agoThis is a known problem for Telegram at least. It cuts off the last frame regardless of that frame's duration. I work around this by adding a single identical frame for 1ms at the end of the GIF. Source: I've made way too many GIFs for Telegram.
- eezing 2y agoGreat way to promote yourself. Well done!
- TZubiri 2y agoThis is useless, I can't make the glasses come from below, in addition to coming from above. Also, glasses can only be black? We demand a color palette for glass colour. EDIT: wait, I managed to make the glasses come from below blob:https://emoji.build/50c07035-efb9-4341-9205-30adfd6b088e https://emoji.build/50c07035-efb9-4341-9205-30adfd6b088e I retract my indignation on the one half of my requests, but transfer it doubly so for the request of a colour palette
- klimeryk 2y ago> We demand a color palette for glass colour. You can choose different styles of glasses. But, yeah, they're all black-ish. Definitely open to different colors/styles! I've created a new issue with some possible solutions and will look into it: https://github.com/klimeryk/dealwithit/issues/33 https://github.com/klimeryk/dealwithit/issues/33 (but PRs are welcome too!)
- barryrandall 2y agoThat feature was removed because half the people who want black frames were offended that the app offered options that they didn't want to use.
- cheschire 2y agoThose responsible for sacking the people who have just been sacked, have been sacked.
- TZubiri 2y agoWhat's interesting is that the moment that you introduce a feature that allows for sharing of the images, and you need a backend to host the images. You enter a world of pain where you inevitably will end up hosting illegal material, and it turns from a fun project to a serious project.
- klimeryk 2y agoYeah, that's why I'm keeping everything client-side. There's no backend. This is hosted on Cloudflare Pages, everything on the backend is static. Definitely not looking to host any generated images.
- teqsun 2y agoThat's fantastic stuff! Minor UX notes: - clicking the header doesn't navigate back to the "home" screen - singular page history (so the back button doesn't take you back to the previous page state) Combined it made it not intuitive for me how to "get rid" of the selection I'd created (I eventually figured it out, but the previous two points were what I intuitively tried first)
- klimeryk 2y ago> clicking the header doesn't navigate back to the "home" screen - singular page history (so the back button doesn't take you back to the previous page state) Could you describe in more detail this? I'm not sure I agree that state changes should be pushed to browser history. In my experience this usually leads to confusing user experience. But that might be also just years of conditioning and I'm missing some best practices. So happy to learn more.
- teqsun 2y agoMy natural instinct to return to the "default" view (as in, how the page looked the very first time before I interacted with anything) was to click the header text at the top (that says "deal with it"). Same as you click the "Hacker News" text at the top to return to the default home page view. Just as something to be a quick "oops, didn't want to use that image, I want to go back to how the site is when I first visited it", and essentially wipe the state. The history stuff is secondary, since that was my second instinct after trying to find and hit a "home" button, just from my personal UX perspective.
- Aardwolf 2y agoIt seems some memes just stick forever :)
- morkalork 2y agoPlease please please add a blunt/joint option. I think my favorite ever use of this meme was in Colossal (2016).
- devmor 2y agoI adore it. I would love the ability to add frame delay (and maybe start/end position/rotation tweening?!) to each layer of glasses.
- klimeryk 2y agoI think we're thinking of the same thing here: https://github.com/klimeryk/dealwithit/issues/22 https://github.com/klimeryk/dealwithit/issues/22 That's part of the reason I made the list of glasses draggable/sortable. Because I want to add the ability to specify which glasses should appear together and which ones should appear in a sequence. So many features to implement, so this one did not make it for the launch, but it's definitely on the roadmap!
- devmor 2y agoExactly what I meant! I now look forward to your future work with more excitement than most actual products.
- dsalaj 2y agoCool, thanks! It desperately needs the copping feature for the original image, so I don't need other tools.
- jihadjihad 2y agoIt's great. I wish you could paste an image URL too, that would be slick. Oh, and it would be cool to have an option for the meme text to go under the image too, and to appear in the final frame of motion for the glasses. For now, I can DEAL WITH IT!
- klimeryk 2y ago> It's great. I wish you could paste an image URL too, that would be slick. Good suggestion - implemented in https://github.com/klimeryk/dealwithit/commit/12c2254e4a1e5f93eac0693e22631a23f80cc4ef https://github.com/klimeryk/dealwithit/commit/12c2254e4a1e5f... > Oh, and it would be cool to have an option for the meme text to go under the image too, and to appear in the final frame of motion for the glasses Yup, on my radar! Upvote on GitHub: https://github.com/klimeryk/dealwithit/issues/31 https://github.com/klimeryk/dealwithit/issues/31
- chiefrubberduck 2y agoawesome tool :) thank you for making and sharing it! https://s11.gifyu.com/images/SB5XB.gif https://s11.gifyu.com/images/SB5XB.gif
- joshdavham 2y agoI love the UI! Definitely gonna inspire from it for a future project
- klimeryk 2y agoThank you! It was my first time using Tailwind CSS (and antd). Wanted to try them out for a while, so figured it's a nice opportunity.
- jammaloo 2y agoHell yeah, this is great. I made a similar, but much worse, thing a while back https://jammaloo.com/DealWithIt/ https://jammaloo.com/DealWithIt/ It uses face-api.js to find the face, and then move the sunglasses over it. It's about a 5 meg model, so it's pretty slow to load. You can customize with a URL, or drag and drop an image on. Resizing the browser also moves the glasses around. Very happy to see someone take the idea way way way further!
- klimeryk 2y agoHeck yeah! Love the touches like resize handling or rotation support! Contributions are more than welcome... hint hint ;) > It uses face-api.js to find the face Yeah, I'm using Google AI's Face Detector [1]. There's Tensorflow's Face Landmarks Detection [2] that looked most promising and accurate. But it had two bugs [3][4] that are blockers. The first one got fixed recently, but the other one is still pending. [1] https://ai.google.dev/edge/mediapipe/solutions/vision/face_detector https://ai.google.dev/edge/mediapipe/solutions/vision/face_d... [2] https://github.com/tensorflow/tfjs-models/tree/master/face-landmarks-detection https://github.com/tensorflow/tfjs-models/tree/master/face-l... [3] https://github.com/tensorflow/tfjs/issues/7905 https://github.com/tensorflow/tfjs/issues/7905 [4] https://github.com/tensorflow/tfjs/issues/8290 https://github.com/tensorflow/tfjs/issues/8290
- ninju 2y agoFound a bug If *after* generating a gif you change the gif size (bigger in my case) the new gif has the sunglasses appear in the same place. But if I change the size first and then generate everything work fine. Hope I explained it right
- klimeryk 2y agoI immediately knew what you meant, because I ran into the bug while testing earlier today and apparently forgot to file it. So thanks for reporting - I've filed it now properly and should have it fixed soon.
- Krei-se 2y agoHey man, awesome job and while i'm hitting that same bug: Changing to 512px does not resize the glasses for me and it's on the wrong placement. This is great for mastodon replies so PLEASE make this work. Hang tight!
- klimeryk 2y agoShould be fixed by https://github.com/klimeryk/dealwithit/commit/7728d06c90c4375559fb553e0dda1eed71785388 https://github.com/klimeryk/dealwithit/commit/7728d06c90c437... As the classic saying goes: > There are only two hard things in Computer Science: cache invalidation and naming things.
- ryandrake 2y agoInfinite spinner for me: Stuck at "Loading AI models for face detection..." forever. I'd want to fix that before sharing it with recruiters as an example project. Desktop Safari 18.0.1 (18619.1.26.111.11, 18619)
- DrammBA 2y agoAs another data point it works on my M1 with Safari 17.2
- klimeryk 2y agoAny console errors?
- ryandrake 2y agoYep, a bunch of warnings and then: Unhandled Promise Rejection: Error: StartGraph failed: $Service "kGpuService", required by node mediapipe_tasks_vision_face_detector_facedetectorgraph__mediapipe_tasks_components_processors_imagepreprocessinggraph__ImageCloneCalc... Warnings prior to the error: [Warning] I0000 00:00:1729008143.963000 1 gl_context_webgl.cc:81] Couldn't create webGL 2 context. (vision_wasm_internal.js, line 1087) [Warning] W0000 00:00:1729008143.966000 1 gl_context_webgl.cc:106] Creating a context with WebGL 2 failed: UNKNOWN: emscripten_webgl_create_context() returned error 0 (vision_wasm_internal.js, line 1087) [Warning] === Source Location Trace: === (vision_wasm_internal.js, line 1087) [Warning] third_party/mediapipe/gpu/gl_context_webgl.cc:82 (vision_wasm_internal.js, line 1087) [Warning] W0000 00:00:1729008143.967000 1 gl_context_webgl.cc:107] Fall back on WebGL 1. (vision_wasm_internal.js, line 1087) [Warning] I0000 00:00:1729008143.968000 1 gl_context_webgl.cc:81] Couldn't create webGL 1 context. (vision_wasm_internal.js, line 1087) [Warning] W0000 00:00:1729008143.968000 1 gl_context.cc:1000] OpenGL error checking is disabled (vision_wasm_internal.js, line 1087) [Warning] E0000 00:00:1729008143.968000 1 gl_graph_runner_internal.cc:252] StartGraph failed: INTERNAL: Service "kGpuService", required by node mediapipe_tasks_vision_face_detector_facedetectorgraph__mediapipe_tasks_components_processors_imagepreprocessinggraph__ImageCloneCalculator, was not provided and cannot be created: emscripten_webgl_create_context() returned error 0; StartRun failed (vision_wasm_internal.js, line 1087) [Warning] === Source Location Trace: === (vision_wasm_internal.js, line 1087) [Warning] third_party/mediapipe/framework/calculator_graph.cc:651 (vision_wasm_internal.js, line 1087) [Warning] third_party/mediapipe/framework/calculator_graph.cc:682 (vision_wasm_internal.js, line 1087) [Warning] third_party/mediapipe/framework/calculator_graph.cc:551 (vision_wasm_internal.js, line 1087) [Warning] research/drishti/app/pursuit/wasm/graph_utils.cc:87 (vision_wasm_internal.js, line 1087) Hope that helps!
- yapyap 2y agoMy god this is so bad, I love it. (bad in a taste way, not in the engineering way)
- whiteandmale 2y ago[flagged]
- steve_adams_86 2y agoThanks for sharing this. I love tiny projects like this, especially if they’re over engineered. The job market is rough. I have no doubt you were considered, and they were interested, but everyone is giving their all right now. Someone likely submitted something even cooler, somehow.
- yieldcrv 2y ago> somehow yeah by recycling their project from a previous interview and adding more to it I just don't engage in that kind of assessment anymore, the job market isn’t thaaaat tough to need to compromise or, put another way, jumping through that hoop will not solve your interview progress as its just far too subjective. other hoops are just as fine
- klimeryk 2y agoTo clarify - I wrote this tool as my own initiative. On top of the "normal" process (that involved multiple interviews and a day paid trial). I was really excited about the opportunity and wanted to go the extra mile.
- gxs 2y agoDude I’m often on interview panels and some of the other interviewers are insufferable. When they give feedback, they love getting on their soapbox and critiquing others as if they were Olympic judges or something. I’ve had to hold myself back from saying bro we wouldn’t hire you yourself if this criteria actually had to be met. Some hiring managers require all this elaborate prep work and it’s such bullshit, imo it’s a total cop out to have people do so much work as part of the interview process. It’s the lazy way of evaluating someone versus thoughtfully putting together a good hiring process and conducting effective interviews.
- steve_adams_86 2y agoI’ve had the same experience many times where the people I’m interviewing candidates with wouldn’t get hired under the same conditions. They tend to be early hires who have stuck around, and they’re super protective and defensive. Rather than welcome people to the team to learn from them and grow the team, they criticize and reject people like crazy. It’s very reactive rather than proactive behaviour, and it’s a bad sign to have it at a company.
- underlines 2y agoThe company who didn't hire you will soon use your tool because they feel remorse for not hiring you, and now they have to "deal with it"
- klimeryk 2y agoWell, I'm using their tool in mine (hint is in one of the Easter Eggs... or just look at what's powering the product analytics ;)). So it's an ouroboros of open-source :D
- stavros 2y agoOh man, this is amazing, I love it. Well done.
- fHr 2y agoNow this is amazing, well done.
- zamadatix 2y agoThis is 100% the kind of thing I was hoping for when daydreaming "what will the internet be like 20 years from now" growing up. Cool design, hilariously overpowered backend to do something basic (but do it so well), and 0 of the corporate feeling or ad apocalypse. Awesome stuff!
- klimeryk 2y agoHahah, so true! One clarification, though: while I'm sure the backend is overpowered (Cloudflare Pages, easily handling the Hug of Death from HN), but in this case it's only serving static resources. All the hard work is done by the hilariously overpowered devices we carry in our pockets or use for everything but serious work ;)
- zamadatix 2y agoOh 100%, the hosting is more than fitting. I had meant to refer to the app's non-UI code (machine learning to place meme glasses)! Apologies for the lack of clarity.
- jhickok 2y agoThanks I hate it. Seriously tho, I've already used this twice at work today.
- bewuethr 2y agoA rudimentary version of this used to be integrated into Giphy[1], but it seems to be broken now, meaning the market is wide open for this! ;) [1]: https://giphy.medium.com/the-secret-giphy-slack-commands-9cb4693ca6bf https://giphy.medium.com/the-secret-giphy-slack-commands-9cb...
- silisili 2y agoThis is actually really neat. I like the configurability. Is there an option to change glasses size that I missed? I think that's the only thing I noticed I couldn't do when playing around with it. * Found it, there is a small indicator in bottom right of glasses that allows dragging out to resize. Thanks all!
- navigate8310 2y agoVery clean, it just works!
- asdfman123 2y agoI'm a Google employee. After looking at this demo I can tell you're spiritually a Googler in ways I can't quite articulate.
- bethemoly 2y agoInteresting take.
- moffkalast 2y agoWell if people start using it and like it a lot, only for him to then suddenly delete the whole thing without warning... then he'd truly be a Googler. ;)
- asdfman123 2y agoThis feels more like an internal tool that will be used forever
- hersko 2y agoOoof, savage
- j_bum 2y agoI’m sorry, but this comment reads as “culty” to me. Google has 180,000+ employees, of which tens of thousands must be engineers. What does “Googler” mean. Someone who is passionate, hacky, and creative? If so, why do we need to slap a corporate label onto them? Can’t you just describe them as such? I’m not trying to be cynical or rude, but this just feels wrong to me.
- asdfman123 2y agoEvery company has a corporate culture, including Google, and my comment has a heavy dose of self deprecation in it.
- i_am_a_squirrel 2y agoThank you OP. I needed this.
- howmayiannoyyou 2y agoThank you for this. Changed my life for the better.
- ChrisArchitect 2y agoThank you Slack? For the confusing use of "emoji" instead "animated GIF" or sticker.
- below43 2y agoThank you. As a non-Slack user, this explains a lot. I was somewhat disappointed that this didn't generate actual emojis.
- radicality 2y agoWould that even make sense, to “generate emojis” ? They are defined by the Unicode emoji specs like here: https://unicode.org/reports/tr51/ https://unicode.org/reports/tr51/ I guess it would need to generate all possible emojis given by the spec? Supposing it did generate all emojis, is there even a way to “install” it for example iOS ?
- radicality 2y agoI’m similarly annoyed by Discord’s term “server”. Only recently started using Discord, and joined various “servers”, which seem as basically just groups with chats. When I was prompted to create my own “server”, at first was hesitant thinking “whoa, I don’t want them to provision a whole server for me, that can’t be cheap”, then realized it has nothing to do with actual servers.
- SlackingOff123 2y agoIn the Discord API, "servers" are called "guilds" which I assume it was the original name for them when they started developing the platform. Don't know why they decided to change it.
- TheNicholasNick 2y agoSuspect, pure speculation, when they pivoted from being focused on gamers, switching from guild to server helped.
- think_build 2y agoI love over-built projects. Do not worry about the job offer, the current market is posting job offers that do not exist.
- deleted 2y ago[deleted]
- blacksqr 2y ago:‑O
- kjaer 2y agoThis made me smile :) if (looping.mode === "off") { // If you waited for a day, you deserve to see this workaround... // Since there is no way to not loop a gif using gifwrap, // let's just put a reeeeaaaaallly long delay after the last frame. return 8640000; }
- klimeryk 2y agoHahaha, achievement unlocked! Congratulations!
- burke 2y agoonly gotta wait 2.4 hours though, it's missing a zero :)
- benjijay 2y agoUnless the comment above has been edited, I make that 100 days?
- klimeryk 2y agoNo, it's correct - for some reason, the library expects centisecs O.o See https://github.com/jimp-dev/gifwrap?tab=readme-ov-file#new_GifFrame_new https://github.com/jimp-dev/gifwrap?tab=readme-ov-file#new_G... Although, I will admit I never waited 24 hours (or even 2.4 hours) to verify ;)
- cannibalXxx 2y agogreat project mate! but i'd like to know how to get in touch with you. please reply with an email address where i can contact you
- tonymet 2y agoyet the back button...
- cabidaher 2y agoThank you for sharing this. Many laughs were had! The company you were applying to sure missed out!
- intelVISA 2y agoReally nice, can't believe any good place would turn this down. You should be relieved, in a way.
- jitl 2y agoI got an error after clicking the "Deal with it" button. Graph successfully started running. Uncaught (in promise) Error: Unsupported MIME type: application/xml at Et.a (gif.worker-WYu6DU4i.js:23:56331) at Et.zt (gif.worker-WYu6DU4i.js:23:78271) This might be caused by my workplace enforcing the Okta chrome plugin :(
- raesene9 2y agoNah I'm getting the same error on Chrome and Firefox (both on Windows). It seems a little intermittant in that I got one good generation but most of the time I just get this error.
- klimeryk 2y agoSorry about that - it's a regression I caused last night, see https://github.com/klimeryk/dealwithit/issues/38 https://github.com/klimeryk/dealwithit/issues/38. It should be fixed since this morning UTC.
- b212 2y agoGreat job, thanks for sharing. Just noticed what company you did leave and I have even more respect for you. Someone get this guy a job please.
- klimeryk 2y agoHah, appreciate it! It's been indeed quite a ride (and it seems the CEO is not stopping). Glad for the offer, it was the very last nudge I needed.
- WolfCop 2y agoLooks cool, but getting an error in Safari after clicking "Deal with it!". Unhandled Promise Rejection: Error: Unsupported MIME type: application/xml On this line: Q = await getGlassesImages(p, D, O); This is a 2020 M1, Safari 17.6.
- klimeryk 2y agoYup, that's a regression I caused last night - see https://github.com/klimeryk/dealwithit/issues/38 https://github.com/klimeryk/dealwithit/issues/38. Should be fixed now.
- rralian 2y agoNice work klimeryk!
- klimeryk 2y agoThanks, Bob! \o/
- ks2048 2y agoNice job. Although I disagree with the adjective "over-engineered". I think it means using too much machinery to accomplish a simple task (bad), where here it seems to mean having lots of options (good).
- donq1xote1 2y agohahah dude this is great idea. This is something very fun to play with. Maybe you can consider to add more memes related data on it.
- nyoomboom 2y agoMust not know who ASAP Rocky is because it didn't deal with him
- m000 2y agoWell done! I had built something similar, but as a cli tool. It must still be sitting on my old laptop, never took the time to spin it up as a service. What I miss feature-wise from my variant is text. IIRC, I had two lines of text (top and bottom, rendered in capital Impact of course) that were configurable on when they appear and for how long. The main use of the text was to tease friends supporting rival sports teams after lost games. E.g. "STILL THE BEST" "DEAL WITH IT".
- CodeWriter23 2y agoYou have done great service to the internets
- sheerun 2y agoYour third official example works pretty bad for me (glasses are below eyes), but good luck with next iterations
- deleted 2y ago[deleted]
- mattmar96 2y agoThis rules. Nice work!