This 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!
Hahah, 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 ;)
Oh 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.
Ah, gotcha! Hahah, yeah, I'm sure this is exactly the use case folks were thinking of when dreaming of AI applications decades ago...
Right behind "Badger Badger Badger in photorealistic 3D" ;)
Wait, where is it? Stop teasing us!
This 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;
}
Nice, this reminds me that I made myself some time ago an avatar for a forum, and it has these crazy eyes standing still. Unless a few minutes passed, when they rolled. Only one person noticed it.
I once grabbed the generic profile picture (a silhouette) for an internal bug tracker, tilted it slightly, then set it as my avatar. One person commented something looked off, but they couldn’t put their finger on what.
Love that! Not many folks will notice, but those that do, it will make their day (or make their skin crawl). Speaking of which, there's two or three Easter Eggs in this app as well :)
Thats hilarious! :D
Hahaha, achievement unlocked! Congratulations!
only gotta wait 2.4 hours though, it's missing a zero :)
No, it's correct - for some reason, the library expects centisecs O.o See 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 ;)
It's because that's what the GIF file format uses :)
Ah, I see, that makes more sense then. TIL, thank you!
Hah neat! I've never seen anything expect centiseconds before. Had no idea this was the way gifs are encoded. Bizarre.
Unless the comment above has been edited, I make that 100 days?
I love it: https://s1.gifyu.com/images/SB5A9.gif
Isn't that a child eating creature?
Nice. Thank you for this bedtime story.
ty. uv.
Deal with it
> 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!
I 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.
Also a great filter from the other side.
I was not hired once because I didn't have React experience, despite having years of both Vue and Angular and having led teams building non-trivial apps in both. IME focusing on such a minor detail like that means either a) you're going to be so pressured to get stuff out of the door they can't handle slightly lower productivity for a month while you learn the different syntax, and/or b) the person hiring you isn't technical enough to know this is a minor detail.
Either way, better off somewhere else :)
I actually quite like it when this happens from the candidate side of the table. I don't want to work anywhere that is so short term focused on "you need to have X years of experience with this exact language/framework or we won't even consider you." It saves us both a lot of time by realizing our values are clearly not aligned early on in the process.
I made something similar but for adult videos. I personally think it's technically impressive but it's obviously not something I'd be willing to put my name to.
I landed my first software job when I was 18 years old. I didn't have a degree or any professional experience in their tech stack, and the recruiter told me later that I was hired because of "my passion for Legos and foreign languages" (I was learning Swahili at the time, and one of my interviewers happened to be a former volunteer in the Peace Corps, who conducted most of the interview in Swahili).
I had a great experience at that company while I was in college, which also launched me into an exciting professional career. All of it wouldn't have happened without people like you.
The only thing I can imagine is that they were up against someone making a partyparrot generator.
Must've been this person: https://parrotify.github.io/
Hahaha, genuinely laughed out loud, thank you! (also, big fan of partyparrot, of course)
They realized OP would put them all to shame.
Thank 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!
Sorry to be the devil's advocate (just call me Beelzebub ... sung like Queen [1])
There may be other factors. Hiring is complex. They could have judged tbis fairly and they may have had a better candidate. Having a project like this should probabilistically increase your chances.
[1] https://m.youtube.com/watch?v=fJ9rUzIMcZQ&pp=ygURYm9oZW1pYW4...
Yeah, this is pretty cool and they can fuck off.
Thank you Slack? For the confusing use of "emoji" instead "animated GIF" or sticker.
I'm a Google employee. After looking at this demo I can tell you're spiritually a Googler in ways I can't quite articulate.
Thanks 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.
The 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"
A 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-9cb...
it's useless thence I love it.
I lied, in fact I just used it to create a couple Slack emojis.
This 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
I retract my indignation on the one half of my requests, but transfer it doubly so for the request of a colour palette
I 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 :(Used 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.
It'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!
Found 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
Great way to promote yourself. Well done!
Well 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".
That'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)
I adore it. I would love the ability to add frame delay (and maybe start/end position/rotation tweening?!) to each layer of glasses.
You have done great service to the internets
I love over-built projects. Do not worry about the job offer, the current market is posting job offers that do not exist.
This 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!
I like it... faved for future fuckery. Can you add background photo rotation or shades rotation?
Nice 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).
Infinite 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)
Looks 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.
awesome tool :) thank you for making and sharing it!
My god this is so bad, I love it.
(bad in a taste way, not in the engineering way)
This 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!
Oh man, this is amazing, I love it. Well done.
Please please please add a blunt/joint option. I think my favorite ever use of this meme was in Colossal (2016).
Cool, thanks! It desperately needs the copping feature for the original image, so I don't need other tools.
It seems some memes just stick forever :)
Really nice, can't believe any good place would turn this down. You should be relieved, in a way.
This could be a reCAPTCHA test, to train the models to better detect eye position and face angle.
Thank you for sharing this. Many laughs were had!
The company you were applying to sure missed out!
Hell yeah, this is great. I made a similar, but much worse, thing a while back
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!
Heck 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_d...
[2] https://github.com/tensorflow/tfjs-models/tree/master/face-l...
Thank you OP. I needed this.
Must not know who ASAP Rocky is because it didn't deal with him
this is great. feature request: DEAL WITH IT caption and relative options
Thanks for checking it out! I have adding text on the roadmap: https://github.com/klimeryk/dealwithit/issues/31 :D Upvote on GitHub to show interest!
I love the UI! Definitely gonna inspire from it for a future project
Thank 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.
hahah 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.
Thank you for this. Changed my life for the better.
great 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
Love it. I'll definitely be using this!
Very clean, it just works!
This rules. Nice work!
Nice work klimeryk!
Thanks, Bob! \o/
Great 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.
Hah, 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.
:‑O
yet the back button...
Your third official example works pretty bad for me (glasses are below eyes), but good luck with next iterations
Now this is amazing, well done.
Thanks I hate it. Seriously tho, I've already used this twice at work today.
[flagged]