6 ms·
Teemoji: Like tee but with emojis
- deleted 2y ago[deleted]
- willswire 2y agoHey HN! I've been playing around with Apple's CoreML framework for some personal projects, and wanted to see how it might work in a CLI context. This is really just something fun I did over the weekend for sh*ts and giggles. I hope you enjoy!
- bkeeper 2y agoAwesome! Pretty impressive that the model only weighs ~200Kb
- ascorbic 2y agoAn AI-powered dev tool? I expect to see this in the next YC batch
- throwaway314155 2y agofor real give this person tens of millions of dollars ASAP
- _nalply 2y agoDoes it produces the infamous emoji if a certain expletive occurs in the input? By the way, I use that emoji to test whether astral planes are handled correctly. I need to recover from the cognitive dissonance now...
- egypturnash 2y agowhat
- internetter 2y agolooks like a markov chain lol
- nejsjsjsbsb 2y agoYou saw cat -v considered harmful and thought ... hold my beer!
- neomantra 2y agoThis is so cute and funny and interesting. Thanks for making and sharing. I was doing `echo cat | teemoji` tests and it would work, but ironically 'echo happy face | teemoji` and the like didn't work so well for many other obvious single-word emojis. But it did a "checkered flag" for "I got the job done".
- willswire 2y agoGlad you enjoy it! There are some inconsistencies/surprises for what emoji gets suggested my the model. I’m hoping to generate some better training data and refine the outputs in the next release.
- kpcyrd 2y agoI wish I could get this on Linux </3 Any ideas how to get there (without reaching out to network apis, like openai)? I assume since it's built on Apple's CoreML framework it's not possible?
- willswire 2y agoI’ll have to look into this; it’s something I’d love to add support for if possible!
- nilamo 2y agoThe training data is in the resources, so you could use that to train a model locally and invoke it.
- sanbor 2y agoI am pretty sure you can get the same result using ollama. Like “cat emojiprompt.txt input.txt | ollama run llama3 | tee output.txt”
- sanbor 2y agoI created a cross-platform version using this approach https://github.com/sanbor/emoji https://github.com/sanbor/emoji It's very slow in comparison because it uses llama3.2 model but it's a very common model and the emojis generated are more related to the lines. Next feature would be to add an emoji model to this tool to make it faster.
- petercooper 2y agoNo, but there are ways you could approach it with various tradeoffs. You could start with something naive using pattern matching, common formats, common words, etc. and apply the most relevant emoji. It'd be fast and small but not as flexible and no cool ML in there to enjoy. It'd probably be how I'd go about it though - you could actually use AI at the dev stage to get the dataset for this pretty tight I reckon.. Or.. you could use a tiny embedding model (which might even be fast on CPU alone), assign emojis to the best appropriate regions, then pick the 'closest' emojis for embeddings of fresh text. Potentially inaccurate but could be fast-ish. Or.. all the way up to using something like TensorFlow and training a classifier, but it'd probably take a fair bit of space and not be super fast if it fell back to CPU. Would be a fun experiment! (I haven't done this on Linux before so I might be wrong in 2025.) One big benefit of Core ML is it Just Works™ if you meet the hardware and OS requirements. On Linux you'd potentially need to fall back to CPU or have a lot of various dependencies to lean on (maybe ONNX takes care of all this nowadays?)
- Dansvidania 2y agoThis is really cute! thanks for sharing :) if I may offer a small nitpick for feedback, I am seeing wrench emojis on empty lines which create a lot of noise. If you are interested in PRs (and making the change) I might try to take a look at the code and see if it's possible for me to contribute this to it.
- netsharc 2y agoThe following is a "Get off my lawn!" comment: When I was in kindergarten there were tasks where you'd get a paragraph of text where you had to fill in blanks, and next to those blanks were pictograms of whatever noun was expected. Whenever I see people overuse emojis, for example "Yesterday we flew [plane emoji] to Japan [Flag of Japan] and took the train [bullet train emoji] and saw Mt. Fuji [emoji of Mt. Fuji]", I always think, "This person is still in kindergarten."...
- fsckboy 2y agoit sounds like a person who does not know their emojis: Japan is the only country to have its geography available as an emoji, so why wouldn't you use it in this case instead of the flag? https://emojipedia.org/map-of-japan https://emojipedia.org/map-of-japan
- MisterTea 2y agoBecause when writing you use proper nouns.
- littlekey 2y agoYou do, but others don't, and I can't imagine anyone getting confused by a phrase like "I went on a [plane emoji] yesterday!" so it's not a barrier to communication. So where's the issue?
- graemep 2y agoBecause its harder to read. The example another comment linked to is a good demonstration https://github.com/fastapi/fastapi/issues/3273 https://github.com/fastapi/fastapi/issues/3273
- PaulHoule 2y agoOccasional emoji are not so bad but people who spam huge numbers of them aren't aware of what a mess they make for screen readers.
- jerf 2y agoIt may have taken 56 years, but this comprehensively resolves the question about whether shell is better than GUI in favor of shell. Thanks to the endless composability of shell, just this one program finally fixes the biggest flaws in text file handling in Unix, but the GUI equivalent would be quite complicated and composes poorly. This vindicates all of the original developers of UNIX once and for all.
- TeMPOraL 2y agoThat's not fixing the biggest flaw, it's just addressing a small set of specific use cases. If anything, it's a bandaid that highlights the biggest flaw of UNIX philosophy: everything is passed as unstructured text. Because of it, half of shell programming is just piecing together ad-hoc, buggy parsers that interpret the input, possibly rearrange it, and then dump it down the pipeline as unstructured text, so the next step can do it all over again. And then, of course, every CLI program has to do that too. This program is using a machine learning model to parse its input; while this may be the only reasonable way to go about guessing emojis from arbitrary text, I can easily see people doing the same to parse outputs of Linux CLI tools at runtime, because it looks much more pleasant and might be even more reliable than writing input parsers by hand. Let's pause here to consider the absurdity of that situation.
- hnlmorg 2y agoI feel you’ve gone on a tangent there. Particularly your unrelated comment about using of using ML because people are too lazy to write parsers. That all said, I don’t really disagree with any of your individual points. But teemoji is clearly not meant to be considered a serious tool so I wouldn’t be too critical of UNIX that this tool exists.
- TeMPOraL 2y agoI'm not critical of UNIX for this tool specifically, and I think it would be useful even if UNIX did things differently - a "pick best fitting emoji for arbitrary line of text" is a well-defined task, and I hit scenarios where I'd wish I had such tool surprisingly often.
- mattbaker 2y agoThis made me grin and I love that it did. Sometimes our profession can be a little short on whimsy and I think projects like this are actually really important! I’m looking forward to using this :)
- gherard5555 2y agoI feel like this defeat the goal of emojis and icons: highlight important informations for our brain to process. This is just an overwhelming amount of emojis for me, but I guess it has its usecases
- fsckboy 2y agomy major and minor complaints are, in order: tee does something very specific, it makes an unmodified copy into a file (one branch of the plumbing tee-joint) as it passes the stream to stdout (the other branch); as opposed to sed or awk or even grep, et al, which modify the stream. How in hell is this inspired by tee which does not modify its inputs? and who capitalizes Tee?
- iforgot22 2y agoBecause it writes to a file like tee.
- willswire 2y agoHN autocorrect that’s who! Haha
- varenc 2y agoAgreed. `tee` without any flags is essentially a no-op and doesn’t have much use, whereas teemoji does. This feels more like `nl` in the sense that it outputs its STDIN with something prepended. But with the additional support for splitting the stream, in which case its STDOUT is unmodified like tee. I still absolutely love this project. It’s inspired me to play around with CoreML.
- hatthew 2y agoYeah, I feel like this should have been implemented solely as a single-in/single-out stream modifier. Then if you want to output to both a file and stdout, you can `command | emojify | tee`, or `command | tee | emojify` if you want to keep the file clean. Or if you want to emojify without splitting the stream (which I suspect would be the most common use case) you don't have to worry about the tee aspect at all.
- donaldihunter 2y ago/usr/local/bin/teemoji: line 2: /usr/local/Cellar/teemoji/0.0.4/libexec/teemoji: Bad CPU type in executable :sadface:
- internetter 2y agointel?
- PaulHoule 2y agoMy RSS reader has an autoposter to post to Mastodon where I always try to choose an appropriate emoji for a post https://mastodon.social/@UP8 https://mastodon.social/@UP8 I've been thinking about training a model, maybe a T5 to automate the task. I've tried asking Microsoft's Copilot to do it, and it is ok but makes decisions that I wouldn't make. I argued with it a lot and couldn't get it to draw ⁰₀⁰₀⁰ as an imitation Olympics logo and had to do it myself.