10 interesting stories served every morning and every evening.

Android May Soon Restrict On-Device ADB, Affecting Shizuku, libadb and Developers

kitsumed.github.io

Early Warning

Before we dive in, please note that this is not an of­fi­cial Google an­nounce­ment. Instead, this is based on a re­cent, on­go­ing fea­ture re­quest on Google IssueTracker, in which a com­ment by one of the core ADB main­tain­ers (Google em­ployee) talked about re­strict­ing On-Device ADB con­nec­tions to pro­tect from bad ac­tors”.

Before you stop what you are do­ing to head over to that IssueTracker thread, please read this care­fully:

If you plan to visit the is­sue tracker just to post low-qual­ity com­ments (such as Hey, don’t do this, I need Shizuku!”), com­plaints about mo­nop­oly, or in­sults, I highly rec­om­mend that you re­frain from do­ing so. Spamming the thread will only cause Google de­vel­op­ers to lock the is­sue, ig­nore valu­able com­mu­nity feed­back, or stop shar­ing pub­lic up­dates about this change en­tirely.

I think a change like this could ben­e­fit Google as it goes well along their new Sideloading changes, but I do not ac­tively be­lieve this is what is go­ing on here. There is a true, valid rea­son be­hind this, and I think two dif­fer­ent ap­proach can be taken. We will talk about it in this blog post.

How You Can Help:

If you have a unique use case: If you are di­rectly af­fected and can write a de­tailed, con­struc­tive mes­sage ex­plain­ing your work­flow, pro­vid­ing links, or of­fer­ing tech­ni­cal so­lu­tions/​com­pro­mises, please, by all means, share your feed­back in Google is­sue.

If your use case has al­ready been men­tioned: You do not need to re­peat it. Instead, sim­ply click the +1 but­ton in the top right cor­ner of the Google IssueTracker to let Google know you are af­fected, and tog­gle no­ti­fi­ca­tions to stay up­dated on the dis­cus­sion.

I am hes­i­tant to make this blog post, as I fear it may over­load the few de­vel­op­ers that work on ADB. I am un­sure if I should wait more and see what hap­pens or hold it longer and see what ap­proach they take. Waiting too long could also be bad… As of writ­ing this, I am un­sure when/​if this post will re­lease. I saw some re­cent up­dates on as­sign­ments which were given to the main guy who pre­vi­ously worked on ADB, so we will see what hap­pens.

Introduction

Hi! I’m Kitsumed, de­vel­oper of ShizuCallRecorder, a Shizuku based ap­pli­ca­tion. As you may have guessed by now, I would be af­fected by this change. Obviously, I would re­ally like it if they do not pro­ceed with it in a way that pre­vent loop­back con­nec­tions.

To talk briefly about my­self, I made ShizuCallRecorder to help with some of my own dis­abil­i­ties. I can get by with­out it, but it’s much eas­ier with it.

You could say I have a very unique use case, and I keep dis­cov­er­ing other un­usual ones, like this per­son on Reddit, who used my ap­pli­ca­tion to pre­serve the voice­mail of a de­ceased loved one.

Call record­ing on Android is a com­pli­cated topic. There are count­less user re­quests, an of­fi­cial at­tempt to add the fea­ture in Android 11 that was later can­celed, and many closed-source, pri­vacy-in­va­sive ap­pli­ca­tions that use work-arounds.

I used to hear that many users with dis­abil­i­ties had to trade their pri­vacy for an eas­ier daily life. I guess that’s what peo­ple mean when they talk about those trade-offs.

Don’t even get me started on OEMs that force an au­dio warn­ing such as This call is be­ing recorded,” when it’s in places where it’s not legally re­quired. People of­ten don’t re­act well to that, even if you ex­plain why you’re record­ing the call, it gives a bad im­pres­sion. To be hon­est, I prob­a­bly would­n’t re­act well to it ei­ther.

I’m sure most of you have a more power-user” use of Shizuku or even use loop­back ADB for de­vel­oper tasks. I do those too, but I wanted to point out one of my unique use case.

Alright, back on the main topic. Before I ex­plain what the pro­posed change is, I’m go­ing to ex­plain what is ADB for less tech­ni­cal users.

What’s ADB?

ADB, also called Android Debug Bridge, is pro­to­col cre­ated by Google to let de­vel­op­ers do de­vel­oper things on Android de­vices…

Basically, it grant us a high level of priv­i­leges, give us ac­cess to a lot of sen­si­ble com­mands to tests how the phone and ap­pli­ca­tion be­have. Useful stuff for any de­vel­op­ers or power-users.

ADB was orig­i­nally de­signed to work over a USB con­nec­tion, but later ex­panded how it could works:

USB: The orig­i­nal way. ADB com­mu­ni­cates di­rectly over a USB ca­ble.

TCP/IP: Introduced as a way to run ADB over a net­work us­ing an IP ad­dress and port (typically port 5555). The con­nec­tion car­ries ADB traf­fic in plain text and pro­vides a YES/NO prompt as au­then­ti­ca­tion. Can only be en­abled once you al­ready have an ac­tive ADB con­nec­tion.

Wireless Debugging (Wifi 1.0/2.0): Introduced in Android 11, it aims to im­prove the legacy TCP/IP work­flow. It re­quires pair­ing the com­puter with the de­vice us­ing a pair­ing code or QR code, then es­tab­lishes an au­then­ti­cated and en­crypted con­nec­tion for sub­se­quent ADB ses­sions. It does not re­quire an ac­tive ADB con­nec­tion to be en­abled.

What’s a On-Device ADB con­nec­tion?

ADB was orig­i­nally in­tended to be used with two de­vices (simplified ex­pla­na­tion): the Android de­vice be­ing de­bugged run the ADB Daemon (ADBD) and a sep­a­rate de­vel­oper ma­chine run the ADB client. In prac­tice, how­ever, this setup is not al­ways con­ve­nient. Some de­vel­op­ers work di­rectly from their Android de­vice and do not have ac­cess to a sec­ond ma­chine.

This led to us­age of On-Device ADB (this is not a of­fi­cial term). By us­ing a ter­mi­nal em­u­la­tor such as Termux, de­vel­op­ers can run an ADB client di­rectly on their phone and es­tab­lish a con­nec­tion to the lo­cal dae­mon (ADBD) server us­ing ei­ther ADB TCP/IP or Wireless Debugging. Since both the client and server are run­ning on the same de­vice, the con­nec­tion is made through the loop­back ad­dress (127.0.0.1). That’s what I call On-Device ADB.

While this is a niche use case com­pared to how ADB in­tended to be used, it has led to the cre­ation of pro­jects such as libadb-an­droid by MuntashirAkon and Shizuku by RikkaApps. These pro­jects, along with many oth­ers, have cre­ated a large open-source com­mu­nity that made a wide range of tools for de­vel­op­ers and power-users.

The pro­posed change

A new fea­ture was made on Google IssuerTracker to al­low de­vel­op­ers to choose what in­ter­face ADBD (ADB server dae­mon) would lis­ten to.

This fea­ture was pro­posed fol­low­ing a ma­jor se­cu­rity is­sue iden­ti­fied as CVE-2026 – 0073, which al­lowed the Wireless ADB au­then­ti­ca­tion process to be fully by­passed. What is pro­posed in this is­sue is ac­tu­ally a nice idea.

Right now, ADBD makes it­self avail­able on every net­work your phone is con­nected to. This fea­ture re­quest asks to let de­vel­op­ers choose which in­ter­face is cho­sen, re­duc­ing the ex­po­sure.

The prob­lem

The prob­lem lies in the re­sponse from one of ADB core main­tain­ers:

sa…@google.com:

Connection to lo­cal­host has also been the source of ex­ploit where app are us­ing that socket to adbd to es­ca­late their priv­i­leges.What about we re­strict to al­ways only bind­ing to wifi in­ter­face wlan0 ?

Connection to lo­cal­host has also been the source of ex­ploit where app are us­ing that socket to adbd to es­ca­late their priv­i­leges.

What about we re­strict to al­ways only bind­ing to wifi in­ter­face wlan0 ?

Here, we can see that the em­ployee talk about only al­low­ing wlan0, the in­ter­face of the Wifi con­nec­tion. Doing so would break many things, On-Device ADB, ADB via VPN, ADB via Ethernet, and many other unique de­vel­op­ers se­tups.

Another is­sue I see here is the stance they seems to cur­rently have on On-Device ADB. Their com­ment sug­gests that On-Device ADB is viewed pri­mar­ily as an ex­ploit bad ac­tors can use to el­e­vate priv­i­leges, yet there a lot of le­git­i­mate us­ages of on-de­vice ADB. Developers them­self uses it when they can’t ac­cess a com­puter.

While it can in­deed be used to el­e­vate priv­i­leges, a malicious” ap­pli­ca­tion can­not do so alone. It re­quires mul­ti­ples ac­tions that MUST be per­fomed by a hu­man.

Why On-Device ADB Is Not Really Used by Bad Actors

A ma­li­cious ap­pli­ca­tion could use an on-de­vice ADB con­nec­tion to per­form priv­i­lege es­ca­la­tion. However, it can­not es­tab­lish one by it­self.

To il­lus­trate this, I’ve laid out the gen­eral lim­i­ta­tions a bad ac­tor would face in a few sce­nar­ios, sim­i­lar to my com­ment on IssueTracker.

Scenario 1: General Android Users

You in­stall a ma­li­cious ap­pli­ca­tion.ADB is dis­abled. ADBD is not run­ning, and the ap­pli­ca­tion does not have the WRITE_SECURE_SETTINGS per­mis­sion, as it must be man­u­ally granted via ADB. No ex­ploita­tion at­tempts are pos­si­ble.

ADB is dis­abled. ADBD is not run­ning, and the ap­pli­ca­tion does not have the WRITE_SECURE_SETTINGS per­mis­sion, as it must be man­u­ally granted via ADB. No ex­ploita­tion at­tempts are pos­si­ble.

Scenario 2: A Developer on Android 11+ Using Wireless ADB

You in­stall a ma­li­cious ap­pli­ca­tion.

You en­able USB de­bug­ging, start­ing ADBD.

You en­able Wireless ADB. ADBD is now run­ning on your phone and lis­ten­ing on all net­work in­ter­faces.

The ap­pli­ca­tion would need to per­form the one-time pair­ing process. This re­quires the user to man­u­ally re­trieve the one-time code from Settings and pro­vide it. No ex­ploita­tion at­tempts are pos­si­ble.

Scenario 3: A Developer Using ADB over TCP/IP

You in­stall a ma­li­cious ap­pli­ca­tion.

You en­able USB de­bug­ging, start­ing ADBD.

You con­nect via USB ADB to en­able TCP/IP, then dis­con­nect the USB ca­ble.

ADBD con­tin­ues run­ning and lis­tens on all net­work in­ter­faces.

The ap­pli­ca­tion ini­ti­ates a con­nec­tion, caus­ing an au­tho­riza­tion prompt to ap­pear on the screen. If the user se­lects No, the con­nec­tion is re­jected. No silent ex­ploita­tion at­tempts are pos­si­ble.

Conclusion

In a nor­mal sce­nario, a bad ac­tor can­not gain an ADB con­nec­tion. It is only pos­si­ble while the de­vel­oper is ac­tively us­ing ADB on the de­vice, be­cause a bad ac­tor can­not start ADBD by them­selves.

However, if we re­turn to a sce­nario such as CVE-2026 – 0073, ex­ploita­tion would be­come pos­si­ble in Scenarios 2 and 3, but only af­ter the user has man­u­ally en­abled USB de­bug­ging. As for sce­nario 3, it would also re­quire the de­vel­oper to MANUALLY en­able TCP/IP. I can un­der­stand the mo­ti­va­tion for pre­vent­ing loop­back con­nec­tions by de­fault, but not to fully pre­vents it.

There is a dif­fer­ence be­tween pre­vent­ing it by de­fault and per­ma­nently pre­vent­ing it. I think this should be some­thing users can dis­able through a per­sis­tent set­ting. By this, I mean a tog­gle that sur­vives a re­boot (else it would make tools like Shizuku im­prac­ti­cals) and, ide­ally, can­not be read by third-party ap­pli­ca­tions. Otherwise, de­vel­op­ers would have to re­peat­edly dis­able it when­ever bank­ing apps or games de­tect that on-de­vice ADB is avail­abl. That said, this part could be worked around once a ap­pli­ca­tion is man­u­ally granted WRITE_SECURE_SETTINGS.

I think that jus­ti­fy­ing block­ing it be­cause a hu­man could per­form ac­tions to al­low it would be far-fetched. A hu­man could also des­ig­nate a ma­li­cious ap­pli­ca­tion as a de­vice ad­min­is­tra­tor or grant it Accessibility per­mis­sions, and yet we would not get rid of those fea­tures.

I be­lieve it should be an as­sumed risk that dis­abling such a se­cu­rity fea­ture en­ables on-de­vice de­bug­ging while also ex­pos­ing the de­vice to the rare pos­si­bil­ity of a fu­ture vul­ner­a­bil­ity. To me, the fea­ture/​risk ra­tio make sense here, as there is a real, le­git­i­mate us­age.

Although it may have not been orig­i­nally in­tended, On-Device ADB has en­abled a niche ecosys­tem of de­vel­oper and power-user tools, in­clud­ing pro­jects such as App Manager, libadb-an­droid, Canta, aShell, ShizuWall, ShizuCallRecorder and Shizuku.

To con­clude, I would like to men­tion my con­clu­sion in What Is Shizuku? How Does It Work? Security Implications?, where I said as a joke:

Here’s my clos­ing thought: I can’t wait to see how they’ll jus­tify dis­abling loop­back ADB over TCP/IP con­nec­tions on non-em­u­la­tor de­vices and start re­quir­ing a Google ac­count…

Here’s my clos­ing thought: I can’t wait to see how they’ll jus­tify dis­abling loop­back ADB over TCP/IP con­nec­tions on non-em­u­la­tor de­vices and start re­quir­ing a Google ac­count…

Well I guess they may in­deed dis­able loop­back ADB. Huh… I was al­most 100% right on that one I guess. If you are a tech­ni­cal user, I in­vite you to give your feed­back in­side the is­sue here. Please don’t for­get the early warn­ing.

Professor Hannah Fry wins Leelavati Prize

www.maths.cam.ac.uk

Congratulations to Professor Hannah Fry, who has been awarded the Leelavati Prize at the International Congress of Mathematicians for out­stand­ing con­tri­bu­tions to in­creas­ing the pub­lic aware­ness of math­e­mat­ics.

Hannah Fry is Professor of the Public Understanding of Mathematics in the Department of Applied Mathematics and Theoretical Physics (DAMTP). She joined the University of Cambridge in January 2025, be­com­ing the first per­son ever to hold the role.

As a broad­caster, au­thor, pod­caster and so­cial me­dia star she is one of the UK and world’s most recog­nis­able — and favourite — com­mu­ni­ca­tors of math­e­mat­ics and sci­ence. The ci­ta­tion for the Leelavati Prize out­lines her ex­tra­or­di­nary im­pact:

Hannah Fry is one of the fore­most global am­bas­sadors for math­e­mat­i­cal think­ing,” the prize ci­ta­tion says. She has be­come a voice for math­e­mat­ics that res­onates far be­yond the pub­lic au­di­ence nor­mally in­ter­ested in sci­ence com­mu­ni­ca­tion.

Through a wide range of me­dia — in­clud­ing books, videos, and tele­vi­sion pro­grams — she has used out­stand­ing cre­ativ­ity and orig­i­nal­ity to trans­late math­e­mat­ics into a lan­guage of won­der and rel­e­vance for the pub­lic with­out di­min­ish­ing its scope and im­por­tance.”

When you en­joy [maths] your­self, I think you have first hand ex­pe­ri­ence of just the ab­solute joy of it,” says Hannah Fry about her pas­sion for com­mu­ni­cat­ing math­e­mat­ics. I feel as though there are these won­der­ful se­crets that are com­pletely in­vis­i­ble to al­most every­body in the world who are not math­e­mati­cians, and it does­n’t make sense to me we would keep them to our­selves — I feel as though I have this re­ally good bit of gos­sip that I just want to share.”

A lan­guage of won­der

The Leelavati Prize, recog­nis­ing out­stand­ing con­tri­bu­tions to in­creas­ing the pub­lic aware­ness of math­e­mat­ics, is awarded every 4 years by the International Mathematical Union (IMU), and is an­nounced at the International Congress of Mathematicians (ICM). Bringing to­gether thou­sands of math­e­mati­cians from around the world, the ICM cel­e­brates the di­ver­sity and scope of mod­ern math­e­mat­ics. It also at­tracts sig­nif­i­cant at­ten­tion as the set­ting for the an­nounce­ment of some of the sub­jec­t’s most cel­e­brated awards, in­clud­ing the fa­mous Fields Medals.

The Leelavati Prize is the lat­est of many ho­n­ours and awards — across both acad­e­mia and the main­stream me­dia — recog­nis­ing Hannah Fry’s ex­cep­tional work in pub­lic com­mu­ni­ca­tion and en­gage­ment. As well as aca­d­e­mic recog­ni­tion in­clud­ing the Christopher Zeeman Medal in 2018 and the Royal Society’s David Attenborough Award in 2024, her ma­jor me­dia awards in­clude win­ning an Emmy in 2025 for an episode ex­plor­ing quan­tum com­put­ing in the TV se­ries The Future with Hannah Fry, and a Webby Award in 2026 for the pod­cast The Rest is Science, co-pre­sented with Michael Stevens. With over 2 mil­lion fol­low­ers on Instagram, she has also been named by Time as one of the 100 most in­flu­en­tial dig­i­tal cre­ators of 2026.

Fry shares the in­spi­ra­tion with the next gen­er­a­tion of math­e­mati­cians too. In 2019 her tele­vised Ri Christmas Lectures were filmed in front of au­di­ences of hun­dreds of school chil­dren. Even closer to home, ear­lier this term she gave the an­nual Rouse Ball lec­ture to a packed au­di­ence of Cambridge stu­dents, fol­lowed by math­e­mat­ics com­mu­ni­ca­tion work­shops for cur­rent un­der­grad­u­ates.

Mathematics qui­etly un­der­pins so many as­pects of mod­ern life and the im­por­tance of com­mu­ni­cat­ing math­e­mat­i­cal ideas to the pub­lic has never been greater. Few peo­ple have con­tributed more to this goal than Hannah Fry,” says Professor Nick Dorey, Head of the Department of Applied Mathematics and Theoretical Physics.

Mathematics is a com­pletely orig­i­nal way to see the world,” says Hannah Fry. And I think that in the same way as with any­thing in life where you re­ally en­joy it, I just want to talk to peo­ple about it.”

As Fry says, the limit to some­one’s un­der­stand­ing is never their abil­ity to un­der­stand. The limit is al­ways in their mo­ti­va­tion to care. And she sees her role as be­ing to pro­vide that mo­ti­va­tion.

I think what you need to do,” she says about the key to con­nect­ing with a wide au­di­ence, is to cre­ate a hole in peo­ple’s imag­i­na­tion. If I can cre­ate just a mo­ment where you want to know the next bit — you know ex­actly the size and shape it needs to be to ful­fil your crav­ing for that ex­act piece of in­for­ma­tion — then every­body’s in.”

Listen to this pod­cast in­ter­view with Hannah Fry about win­ning the Leelavati Prize, and dis­cover more cov­er­age of the full ICM 2026, on our Plus outreach plat­form.

Image: Professor Hannah Fry speak­ing at the Communicating Mathematical and Data Sciences event at the Isaac Newton Institute, Cambridge. Image credit: Grace Merton/INI

Stolen Buttons

anatolyzenkov.com

Every web­site I visit, I steal” a but­ton from it. Check out my stash!

About Button Stealer

wsj.com

www.wsj.com

Please en­able JS and dis­able any ad blocker

Open-weight AI is having its Kubernetes moment. Let's not ruin it.

tobi.knaup.me

Open-weight mod­els are be­com­ing the foun­da­tion for the next AI ecosys­tem. The US should com­pete in it, not wall it­self off.

I have seen a ver­sion of this story be­fore.

In 2013 I co-founded Mesosphere, an open source cloud-na­tive soft­ware com­pany. We built on Apache Mesos, which my co-founder Ben Hindman had helped cre­ate at UC Berkeley. We later built DC/OS (Data Center Operating System) around Mesos, re­leased it as open source, and com­mer­cial­ized it through an en­ter­prise dis­tri­b­u­tion with sup­port and pro­pri­etary fea­tures.

After sev­eral years of mas­sive growth, Kubernetes dis­rupted us. It was newer, fully open source, and it quickly gal­va­nized the cloud-na­tive com­mu­nity. Many of the world’s best dis­trib­uted-sys­tems and in­fra­struc­ture en­gi­neers bet their ca­reers on it, and even some of our most loyal com­mu­nity mem­bers changed horses.

Once that hap­pened, in­no­va­tion moved to Kubernetes. Whatever the plat­form was miss­ing, some­one started build­ing: net­work­ing, stor­age, ob­serv­abil­ity, de­ploy­ment tools, pol­icy en­gines. A large num­ber of star­tups were cre­ated, and legacy ven­dors joined in as well. Almost every com­po­nent re­quired to run Kubernetes in pro­duc­tion be­came avail­able as open source. Cloud providers and com­pa­nies in­clud­ing Mesosphere/D2iQ, Rancher, Red Hat and Nutanix then built busi­nesses around in­te­gra­tion, en­ter­prise fea­tures, sup­port and op­er­a­tions.

Kubernetes did not win sim­ply be­cause its repos­i­tory was pub­lic. It be­came a neu­tral sub­strate that en­gi­neers, cloud providers and en­ter­prise ven­dors could all ex­tend to fit their cus­tomers’ needs. Common in­ter­faces and ven­dor-neu­tral gov­er­nance gave every­one con­fi­dence that they could build on it.

The les­son I took away was­n’t that open source al­ways wins. It was that once an open plat­form that peo­ple can cus­tomize be­comes the in­dus­try’s cen­ter of grav­ity, no sin­gle ven­dor can match the com­bined rate of in­no­va­tion around it.

I think AI is ap­proach­ing the same point.

Open weights turn a model into a plat­form

First, a ter­mi­nol­ogy note. Most mod­els we ca­su­ally call open source” are more ac­cu­rately de­scribed as open-weight. You can down­load and mod­ify the trained pa­ra­me­ters, but the train­ing data and com­plete train­ing process usu­ally aren’t avail­able. That falls short of the Open Source Initiative’s de­f­i­n­i­tion of open source AI. The dis­tinc­tion mat­ters. It does­n’t, how­ever, pre­vent an ecosys­tem from form­ing around the ar­ti­fact peo­ple can run and mod­ify.

The Kubernetes anal­ogy is­n’t per­fect. Kubernetes con­trib­u­tors could in­spect and change the ac­tual source, and im­prove­ments could flow back into a shared up­stream pro­ject. Model fine-tunes usu­ally don’t work that way. Frontier weights may be down­load­able but still re­quire ex­pen­sive hard­ware, and there is no AI equiv­a­lent of the CNCF pro­vid­ing neu­tral gov­er­nance and com­mon in­ter­faces. Those are real dif­fer­ences. The com­mon mech­a­nism is that a suf­fi­ciently ca­pa­ble, portable sub­strate can at­tract com­ple­men­tary in­no­va­tion far be­yond what its orig­i­nal cre­ator could build alone.

The first rea­son to use open-weight mod­els was self-host­ing. Companies wanted con­trol over their data. They wanted to run mod­els in their own cloud or data cen­ter. And as us­age and in­fer­ence costs grow, they in­creas­ingly want con­trol over cost as well.

That de­mand pro­duced a healthy open source serv­ing stack: vLLM, SGLang, llama.cpp, Ollama, MLX and oth­ers.

But self-host­ing is only the be­gin­ning. Open weights turn the model it­self into some­thing de­vel­op­ers can adapt and re­dis­trib­ute. Hugging Face now hosts more than two mil­lion pub­lic mod­els. Around pop­u­lar fam­i­lies such as Qwen and Gemma, de­vel­op­ers pro­duce:

quan­tized and con­verted weights for dif­fer­ent sil­i­con ar­chi­tec­tures and scale;

fine-tunes and LoRA adapters for cod­ing, med­i­cine, law, math and agen­tic work­flows;

model merges that com­bine dif­fer­ent fine-tunes;

adap­ta­tions for run­times such as TensorRT-LLM, vLLM, MLX and oth­ers.

Until re­cently, it was easy to dis­miss this ac­tiv­ity at the fron­tier. Open mod­els were use­ful, but the base mod­els weren’t good enough for the hard­est cod­ing and agen­tic tasks. That gap is nar­row­ing quickly. Z.ai has re­leased GLM-5.2 with pub­lic weights un­der an MIT li­cense. Its own eval­u­a­tion re­ports 62.1% on SWE-bench Pro ver­sus 58.6% for GPT-5.5, al­though re­sults vary across bench­marks and agent har­nesses.

Moonshot says Kimi K3 ap­proaches the closed fron­tier on long-hori­zon cod­ing and has promised to pub­lish its weights on July 27. Artificial Analysis sup­ports the per­for­mance claim, scor­ing it along­side Opus 4.8 and GPT-5.5 in its in­de­pen­dent eval­u­a­tion.

Once the base model is good enough, the ecosys­tem can com­pound. I ex­pect new pro­jects around agent run­times, cod­ing har­nesses, sand­boxes, eval­u­a­tions, ob­serv­abil­ity and spe­cial­ized fine-tunes. Together they can be­come a pro­duc­tion-grade stack: an open-weight model run­ning on open source soft­ware, cus­tomiz­able for a team’s work­load, hard­ware and eco­nom­ics.

Will that stack beat every closed model on every bench­mark? Probably not. But I would not bet on any sin­gle ven­dor out-in­no­vat­ing the com­bined open ecosys­tem over time. Frontier tech­nol­ogy is a tal­ent war, and open ecosys­tems give tal­ented peo­ple every­where a rea­son to build on the same foun­da­tion.

Banning Chinese mod­els would be an own goal

This brings us to the cur­rent de­bate in Washington. After the re­lease of Kimi K3 and other ca­pa­ble Chinese mod­els, the Trump ad­min­is­tra­tion is re­port­edly con­sid­er­ing re­stric­tions on Chinese open-weight mod­els. The ex­act form of a po­ten­tial ban re­mains un­clear.

A broad ban on American re­searchers and com­pa­nies us­ing Chinese open-weight mod­els would do some­thing else en­tirely. It would cut the US off from an ecosys­tem that is al­ready at­tract­ing many of the world’s best AI re­searchers and en­gi­neers, in­clud­ing a large num­ber of Chinese re­searchers. The rest of the world would keep build­ing. American de­vel­op­ers would be the ones locked out.

We’ve seen this dy­namic with Qwen al­ready. Hugging Face re­ports that Chinese mod­els ac­counted for 41% of model down­loads over the past year. If the best open-weight foun­da­tion mod­els in­creas­ingly come from China, in­no­va­tion will ac­cu­mu­late around them in the same way it ac­cu­mu­lated around Kubernetes.

How the US should com­pete

The US should com­pete in that ecosys­tem, not re­treat from it.

Release fron­tier-grade American mod­els

American labs need to re­lease fron­tier-grade open-weight mod­els un­der li­censes that star­tups can ac­tu­ally build on. There has been progress. NVIDIAs Nemotron mod­els are com­mer­cially us­able un­der NVIDIAs own per­mis­sive li­cense. Thinking Machines re­leased Inkling un­der Apache 2.0, as did OpenAI with gpt-oss and Google with Gemma 4. But OpenAI’s and Google’s strongest mod­els re­main closed, as do those from most American fron­tier labs.

Use pro­cure­ment to cre­ate an open mar­ket

The gov­ern­ment should use pro­cure­ment to cre­ate de­mand for portable, in­ter­op­er­a­ble sys­tems rather than per­ma­nent de­pen­dence on one API ven­dor. The Department of Defense has done this be­fore. Platform One pro­vides open source tools and en­ter­prise prod­ucts that dif­fer­ent mil­i­tary pro­grams can build on. The same play­book can ac­cel­er­ate in­no­va­tion around open-weight mod­els.

Build the rest of the stack

American com­pa­nies need to build the rest of the stack. Startups can cus­tomize and ex­tend the mod­els, em­bed them into prod­ucts, and pro­vide the serv­ing, tool­ing, sup­port and op­er­a­tional lay­ers. Our lead­ing sil­i­con com­pa­nies will keep im­prov­ing the hard­ware. Hyperscalers and neo­clouds can serve the mod­els and their ecosys­tems.

Set stan­dards in­stead of ban­ning mod­els

Safety is the strongest ar­gu­ment for re­stric­tions, but a blan­ket ban is too blunt and would sac­ri­fice ac­cess to the en­tire ecosys­tem. A bet­ter ap­proach is in­de­pen­dent test­ing and stan­dards for fron­tier mod­els. The anal­ogy is­n’t ex­act: Kubernetes con­for­mance tests com­pat­i­bil­ity, not safety. But the gov­er­nance model is use­ful. Demis Hassabis has pro­posed a US-led in­de­pen­dent stan­dards body along those lines.

America should not re­spond to open Chinese mod­els by build­ing a wall around its own de­vel­op­ers. We should run the mod­els our­selves, tear them apart, bench­mark them, im­prove on them and build bet­ter American al­ter­na­tives. Then we should make the American stack the eas­i­est one in the world to adopt.

The United States has spent decades at­tract­ing the world’s best tech­ni­cal tal­ent and giv­ing it room to build. Turning that ad­van­tage into a walled gar­den while the rest of the world stan­dard­izes on a more open stack would be a spec­tac­u­lar own goal. We would be giv­ing up our role as the AI leader by choice.

Zero roadkill as Amazon canopy bridges secure 15,000 crossings

news.mongabay.com

Project Reconecta in­stalled eight rope bridges in a mu­nic­i­pal­ity in Brazil, and a 15-month study used cam­era traps to doc­u­ment thou­sands of ar­bo­real wildlife adapt­ing to new aer­ial cross­ings.

Safe road pas­sages en­able seed dis­per­sal and gene di­ver­sity, re­vers­ing the domino ef­fect” of bio­di­ver­sity loss that be­gins when high­ways split habi­tats.

Reconecta’s cre­ator, bi­ol­o­gist Fernanda Abra, a National Geographic Explorer and win­ner of the Whitley Award, is now ex­pand­ing these low-cost con­ser­va­tion tools to other Brazilian bio­mes and neigh­bor­ing Suriname.

Brazil’s fed­eral trans­port de­part­ment has of­fi­cially des­ig­nated the rope bridge de­sign as the rec­om­mended na­tional stan­dard for high­ways to curb the mil­lions of wildlife deaths recorded on roads an­nu­ally.

Around 7 a.m., with dense fog blan­ket­ing the land­scape, bi­ol­o­gist Gabriel Falquetto had al­ready come across sev­eral road-killed an­i­mals along ES-164 high­way in Brazil’s Espírito Santo state. He was on his way to Kaetés Private Natural Heritage Reserve (RPPN), in the Atlantic Forest, where he mon­i­tors wildlife and road­kill in the re­gion.

Suddenly, he spot­ted the life­less body of a pri­mate on the pave­ment. It was a buffy-headed mar­moset (Callithrix flav­i­ceps), a species listed as crit­i­cally en­dan­gered on the International Union for Conservation of Nature (IUCN) Red List. An es­ti­mated 2,500 in­di­vid­u­als re­main in the wild, mak­ing it one of the world’s most threat­ened pri­mates.

It was ex­tremely painful and dis­cour­ag­ing,” Falquetto told Mongabay. We travel through this re­gion every day mon­i­tor­ing wildlife, and we cel­e­brate every en­counter with groups of buffy-headed mar­mosets in the for­est.”

Finding an in­di­vid­ual in those con­di­tions brings a feel­ing of sad­ness and help­less­ness. Beyond the loss of that an­i­mal, the in­ci­dent re­minds us of the im­pacts our ac­tiv­i­ties have on bio­di­ver­sity.”

About 2,900 kilo­me­ters (1,800 miles) away, on the road that leads to Alta Floresta, a small Amazon town in the far north of Mato Grosso state, cases like the buffy-headed mar­moset’s road­kill have not been recorded since 2024. That year, eight canopy bridges were in­stalled, con­nect­ing frag­mented for­est patches. Camera trap footage re­vealed that, over 15 months, the aer­ial wildlife cross­ings en­abled 15,000 safe cross­ings by ar­bo­real an­i­mals — and not a sin­gle road­kill.

The bridges are part of a pro­gram in­volv­ing Projeto Reconecta and the mu­nic­i­pal gov­ern­ment, along with lo­cal or­ga­ni­za­tions and busi­ness own­ers who are ea­ger to con­serve the unique bio­di­ver­sity of their town and pro­mote eco­tourism, but were alarmed by the grow­ing num­ber of wildlife-ve­hi­cle col­li­sions.

Biologist Fernanda Abra, an as­so­ci­ate re­searcher at the Smithsonian National Zoo and Conservation Biology Institute in the U.S., and the founder of Reconecta, re­called that just hours be­fore in­stalling the first bridges in Alta Floresta, she found two Schneider’s mar­mosets (Mico schnei­deri) dead. The species is en­demic to the Brazilian Amazon and is threat­ened with ex­tinc­tion.

A canopy bridge serves two pur­poses,” Abra said. The first is to im­prove con­nec­tiv­ity for wildlife, al­low­ing an­i­mals to move from one side to the other in these frag­mented for­est ar­eas. As a re­sult, we also re­duce road­kill.”

All bridges have two cam­era traps, one fac­ing the cross­ing to record which an­i­mals are us­ing it and an­other fac­ing the for­est to ob­serve which an­i­mals ar­rive there but de­cide not to use it.

Among the pri­mate species recorded us­ing the bridges dur­ing the first months of the pro­gram were the black-faced black spi­der mon­key (Ateles chamek), the Purus red howler mon­key (Alouatta pu­ru­en­sis), the north­ern night mon­key (Aotus in­fu­la­tus), the tufted ca­puchin (Sapajus apella), Schneider’s mar­moset and the Alta Floresta titi mon­key (Plecturocebus grovesi).

Described only in 2019 and soon af­ter clas­si­fied as crit­i­cally en­dan­gered, the Alta Floresta titi mon­key has be­come the sym­bol of the ini­tia­tive, which is now en­ter­ing a new phase thanks to its pos­i­tive re­sults.

In August, we will in­stall eight more bridges in the city’s ur­ban area,” Abra said. The only dif­fer­ence is that the elec­tric util­ity will first need to lower the power lines and in­su­late them so that if an­i­mals jump from the bridge onto the wires, they won’t be elec­tro­cuted.”

Bridge use in­creases over time

The pro­ject un­der­way in Alta Floresta is not Reconecta’s first. In 2021, work­ing along­side the Waimiri-Atroari Indigenous peo­ple, the team in­stalled 32 canopy bridges over BR-174, the high­way that crosses both their ter­ri­tory and the Amazon be­tween the Brazilian states of Amazonas and Roraima.

The Waimiri-Atroari helped Abra iden­tify the best lo­ca­tions for the ar­ti­fi­cial bridges. Over the past five years, cam­eras mounted on the bridge poles have doc­u­mented about 1,250 pri­mate cross­ings, in­clud­ing the golden-handed tamarin (Saguinus mi­das), a species that is not strictly ar­bo­real and of­ten de­scends to the ground in search of food, mak­ing it par­tic­u­larly vul­ner­a­ble to road­kill.

The out­comes of the BR-174 pro­ject have been in­cred­i­ble. We were able to test dif­fer­ent bridge de­signs to find out which ones the an­i­mals pre­fer,” Abra said.

After years of work­ing along Brazilian high­ways, the bi­ol­o­gist had al­ways sought a so­lu­tion that was sim­ple, low-cost and durable. The cur­rent bridge fea­tures a mul­ti­layer de­sign that ac­com­mo­dates pri­mates with dif­fer­ent modes of lo­co­mo­tion — from species that rely on their pre­hen­sile tails to move through the canopy to brachi­at­ing species such as spi­der mon­keys, which swing us­ing their arms, both of which are com­mon in the Amazon, as well as species that sim­ply walk across the net­work of crossed ropes. It is worth not­ing that other small ter­res­trial mam­mals, in­clud­ing opos­sums, sloths and mouse opos­sums, have also been recorded us­ing the bridges.

Abra said it is im­por­tant to keep in mind that this is a long-term pro­ject, and re­sults are not al­ways im­me­di­ate. BR-174 was built in the 1970s, and an­i­mals take time to adapt to a new cross­ing al­ter­na­tive. Reconecta’s mon­i­tor­ing has shown that use of the struc­tures in­creases over time.

Very of­ten, our sense of ur­gency in con­ser­va­tion does­n’t take into ac­count the tim­ing of the im­pact,” she said.

In Alta Floresta, tufted ca­puchins took seven months be­fore us­ing one of the bridges for the first time, which may in­di­cate that each species has its own pace of adap­ta­tion.

Species dis­ap­pear, forests de­cline

Home to the world’s great­est di­ver­sity of pri­mates, Brazil also has the world’s fourth-largest road net­work — a deadly com­bi­na­tion for an­i­mals liv­ing along for­est edges that have been split apart to make way for high­ways.

From our hu­man per­spec­tive, roads mean con­nec­tion and de­vel­op­ment. But for wildlife, they rep­re­sent dis­con­nec­tion, bar­ri­ers and a threat to sur­vival,” Abra said.

Nearly 9 mil­lion mam­mals are killed on Brazil’s roads every year, a 2022 study found. A data com­pi­la­tion pub­lished in the jour­nal Nature in 2025 also found that the coun­try ranks among those with the high­est mor­tal­ity rates of ter­res­trial ver­te­brates killed in road­kills.

Habitat loss is one of the main dri­vers of pop­u­la­tion de­clines, es­pe­cially among threat­ened species, but the im­pact of road­kill is still greatly un­der­es­ti­mated,” pri­ma­tol­o­gist Fabiano Rodrigues de Melo, a pro­fes­sor at the Federal University of Viçosa in Minas Gerais, told Mongabay.

Beyond road­kills, high­ways bring con­fine­ment to fauna.

When pop­u­la­tions be­come iso­lated, they grow smaller and more vul­ner­a­ble to threats,” said Amely Branquinho Martins, an en­vi­ron­men­tal an­a­lyst at the ICMBio, Brazil’s fed­eral agency for con­ser­va­tion units, and co­or­di­na­tor of the Brazilian Biodiversity Genomics (GBB) pro­ject.

One of those threats is in­breed­ing, which oc­curs when closely re­lated in­di­vid­u­als re­pro­duce. Habitat loss and degra­da­tion can pre­vent an in­di­vid­ual from one pop­u­la­tion from mi­grat­ing to an­other — what we call gene flow. Without it, the species’ ge­netic di­ver­sity de­clines.”

The con­se­quences con­tinue to mul­ti­ply in a domino ef­fect, Melo said. The loss of pri­mates, es­pe­cially fruit-eat­ing species, can al­ter for­est com­po­si­tion, be­cause they play a key role in seed dis­per­sal and even con­tribute to pol­li­na­tion.

A whole net­work of eco­log­i­cal in­ter­ac­tions is ul­ti­mately lost with the dis­ap­pear­ance of these species,” Melo said.

Reconecta ex­pands

One of the hopes for re­duc­ing wildlife road­kill is the pas­sage of a bill cur­rently un­der con­sid­er­a­tion in Brazil’s Congress that would es­tab­lish the National Road Safety Plan for Wildlife, which calls, among other mea­sures, for the place­ment of wildlife warn­ing signs, speed-re­duc­tion de­vices and the con­struc­tion of over­passes, aer­ial cross­ings and un­der­passes along high­ways.

The bill has al­ready been ap­proved by the Chamber of Deputies and is now await­ing a vote in the Senate.

If ap­proved, the canopy bridge model de­vel­oped by Reconecta could be im­ple­mented na­tion­wide. In 2026, Brazil’s National Department of Transport Infrastructure des­ig­nated the de­sign as the rec­om­mended stan­dard for high­ways.

In ad­di­tion to Reconecta ex­pan­sion re­sults, Abra’s ef­forts to pro­tect pri­mates have earned in­ter­na­tional recog­ni­tion. In 2019, she re­ceived the Future For Nature Award, fol­lowed by the Whitley Award in 2024, of­ten re­ferred to as the Oscars of en­vi­ron­men­tal con­ser­va­tion. In June, she was also named one of the re­cip­i­ents of the 2026 Wayfinder Award, join­ing the se­lect group of National Geographic Explorers, who re­ceive fund­ing from the or­ga­ni­za­tion for their pro­jects.

The sup­port comes at the right time, as Abra plans to ex­pand Reconecta, in­clud­ing new chap­ters in Suriname and Lucas do Rio Verde, a mu­nic­i­pal­ity in Brazil, which will in­stall 10 canopy bridges.

Abra also hopes to bring her canopy bridges to other bio­mes, in­clud­ing the Pantanal and the Atlantic Forest, help­ing pre­vent the deaths of mon­keys such as the buffy-headed mar­moset.

Expectations are es­pe­cially high for bridges over BR-262, one of Brazil’s longest high­ways, which cuts across the Pantanal and is known as the highway of death.” The road kills ap­prox­i­mately 2,000 an­i­mals every year.

I en­vi­sion a fu­ture with Reconecta Biomes. We al­ready have Reconecta Amazon, and we’ll soon launch Reconecta Pantanal. I also see canopy bridges in the Atlantic Forest for the pri­mates that live there, in­clud­ing muriquis and howler mon­keys, which are both highly threat­ened,” she said.

She stressed that for this vi­sion to suc­ceed, the con­tin­ued en­gage­ment of gov­ern­ment agen­cies, pri­vate com­pa­nies and lo­cal com­mu­ni­ties will be es­sen­tial, just as it was in Alta Floresta and the Waimiri-Atroari Indigenous Territory. When every­one is in­volved, every­one val­ues the ini­tia­tive and works harder to make it suc­ceed.”

Banner im­age: A black-faced black spi­der mon­key (Ateles chamek) cross­ing one of the mul­ti­lay­ered bridges. Image cour­tesy of Sergio Leal.

How ef­fec­tive are canopy bridges re­ally?

How ef­fec­tive are canopy bridges re­ally?

FEEDBACK: Use this form to send a mes­sage to the au­thor of this post. If you want to post a pub­lic com­ment, you can do that at the bot­tom of the page.

Just a moment...

saffroncr.itch.io

How my images are dithered

dead.garden

I don’t know much about dither­ing. But when I visit other peo­ple’s sites and they dither their im­ages in cool ways I al­ways won­der how they do it. So in case any­one is won­der­ing, here’s my cur­rent method for dither­ing these pink im­ages.

Edit: Almost like I know my­self too well — the pic­tures now look like this in­stead:

Which is cov­ered in the post.

Welcome to all the hacker news read­ers who clicked on this post. I am thank­ful and glad that this post has come to en­ter­tain some of you. Here are some things I feel the need to add to the post since it has left my reg­u­lar au­di­ence:

There seems to be dis­cus­sion about whether this counts as dither­ing. As ev­i­denced by the very first sen­tence of the post, I am not an au­thor­ity on the sub­ject. But here is what Wikipedia seems to think: Dithering is anal­o­gous to the halftone tech­nique used in print­ing. For this rea­son, the term dither­ing is some­times used in­ter­change­ably with the term halfton­ing par­tic­u­larly in as­so­ci­a­tion with dig­i­tal print­ing. (link)In any case — I am/​was only aware of this tech­nique be­ing used for AM grid print­ing, as briefly layed out in the post. So I thought it might be fun to play pre­tend a lit­tle.

Dithering is anal­o­gous to the halftone tech­nique used in print­ing. For this rea­son, the term dither­ing is some­times used in­ter­change­ably with the term halfton­ing par­tic­u­larly in as­so­ci­a­tion with dig­i­tal print­ing. (link)

this is a very in­ef­fi­cient method of re­duc­ing the size of an im­age file — I’d even say this lit­tle ex­per­i­ment has noth­ing at all to do with de­creas­ing file size (in some un­lucky cases it will even in­crease the size of your im­age). I men­tion this a few times in the post. It’s just a bit of play­ing around with a cer­tain aes­thetic

please don’t feed im­ages of me and my friends to an LLM?? The code for achiev­ing each ef­fect is all over this page. Just make your own im­age and feed that to an LLM.

Dithering, be­side mak­ing a pic­ture look (to put it pro­fes­sion­ally) cool as fuck, can also re­duce file size (by us­ing less col­ors while main­tain­ing de­tails) and thus needed stor­age (if us­ing only the re­duced im­ages) and the weight of your web­site for the client. That’s why sites like Low Tech Magazine use it, for ex­am­ple.

The idea of pink im­ages came from a post a while back, when I tried this be­fore. The post Designing with­out color in­tro­duces the idea of the cur­rent de­sign, where I try to get a sort of black and white printed” vibe, us­ing color only for em­pha­sis. (This makes sense only when you are a light mode user like me).

The im­age back then, with the old method, looked like this:

The key dif­fer­ence here be­ing that I lim­ited the pic­ture’s palette to true mono­chrome: black and this pink. Also, the weird dithered” dots are much big­ger.

So what’s this

My goal was to im­mi­tate a printed im­age. While in­di­vid­ual pix­els on a screen may have the lux­ury of set­ting vari­able val­ues of red, green and blue — mak­ing the grid of re­peat­ing RGB lights on your screen light up with dif­fer­ent in­ten­sity — things work a lit­tle dif­fer­ently on pa­per (and other print sub­strates).

Getting the lim­ited palette of col­ors your printer is work­ing with to give the il­lu­sion of more col­ors re­quires us­ing a grid/​ma­trix of dots. You can go about this in three dif­fer­ent ways: AM, FM and hy­brid grids. The am­pli­tude here be­ing the size of the dot and the fre­quency, well … the fre­quency. Making a dark spot with AM grids means big dots, in FM grids it’s lotsa dots.

The top shows an FM print: the dots look chaotic.

The bot­tom shows AM: all dots show up in a pre­dictable pat­tern and light spots have smaller dots

The prob­lem with am­pli­tude mod­u­lated dots is that if you ap­proach this naively you will end up get­ting un­wanted pat­terns in your im­ages: a so-called Moiré.

For this rea­son, there is a rule (DIN 16547) about how ex­actly the col­ors are to be off­set in an AM print to try and avoid them get­ting in each oth­ers way. Since FM grids are ran­dom they do not suf­fer from this prob­lem.

Simulating AM pat­tern on your dig­i­tal im­age

I ac­cess my server via the com­mand line — so I use a com­mand line tool to quickly edit im­ages. The tool is called im­agemag­ick and is called us­ing the convert” com­mand.

I found the method to cre­ate this il­lu­sion on­line (can’t find the link) and adapted it a lit­tle. So I can’t claim to be the ex­pert on what each in­di­vid­ual ar­gu­ment does, but I will try to ex­plain it.

con­vert oldfile” -resize 800 -set op­tion:dis­tort:view­port %wx%h+0+0’ \ -colorspace CMYK -separate null: \ \( -size 2x2 xc: \( +clone -negate \) \ +append \( +clone -negate \) -append \) \ -virtual-pixel tile -filter gauss­ian \ \( +clone -distort SRT 2,0 \) +swap \ \( +clone -distort SRT 2,15 \) +swap \ \( +clone -distort SRT 2,45 \) +swap \ \( +clone -distort SRT 2,75 \) +swap +delete \ -compose Overlay -layers com­pos­ite -set col­or­space CMYK -combine \ newfile”

Here’s what it does gen­er­ally: re­sizes the im­age to 800px in width (who needs more?), sets the color to CMYK, ap­plies a back­ground to fill the empty space left by ro­tat­ing (and sets a gauss­ian blur to fil­ter noise), splits up into the col­ors, scales them up a bit (for big­ger dots) and dis­torts them (in this case: ro­tates them) and at the end it com­bines the 4 im­ages into one again.

The im­age we gen­er­ate by run­ning this on the orig­i­nal file looks like this:

Before com­bin­ing them, these are the in­di­vid­ual col­ors dot grids:

This sets C at 0°, M at 15° etc. But what­ever. Zooming in and out does­n’t make any weird ar­ti­facts ap­par­ent so it’s good enough.

If we in­crease the size of the dots to a ridicu­lous de­gree (8x8), you can get a bet­ter look at what is hap­pen­ing.

Edit: The per­fect route to CMYK

After sleep­ing on it and read­ing the post back, the so­lu­tion for a pic lim­ited to truly CMYK col­ors in an AM grid is ap­par­ent. For rea­sons I get into later this is NOT a good way of re­duc­ing file size (apart from the fact that lim­it­ing col­ors and re­siz­ing the im­age to 800 in width al­ways re­duces the size, every­thing else is pretty much stacked against that goal). It does, how­ever, look cool.

With the above method, the dots do not vary in size. Why should they? As we al­ready dis­cussed, a dig­i­tal im­age (unless I have a GIF or PNG-8 sit­u­a­tion some­where) can give vary­ing in­ten­sity of light for R, G and B per pixel. So when we look at the big im­age above we can cleary see some of the squares are just darker than oth­ers. For a true im­mi­ta­tion this will not do!

All we need to do is to limit each chan­nel’s col­ors to 2 be­fore com­bin­ing them again. This is very ob­vi­ous in hind­sight. Idk why the per­son I got the orig­i­nal com­mand from did­n’t do this.

con­vert oldfile” -resize 800 -set op­tion:dis­tort:view­port %wx%h+0+0’ \ -colorspace CMYK -separate null: \ \( -size 2x2 xc: \( +clone -negate \) \ +append \( +clone -negate \) -append \) \ -virtual-pixel tile -filter gauss­ian \ \( +clone -distort SRT 2,0 \) +swap \ \( +clone -distort SRT 2,15 \) +swap \ \( +clone -distort SRT 2,45 \) +swap \ \( +clone -distort SRT 2,75 \) +swap +delete \ -compose Overlay -layers com­pos­ite -colors 2 -set col­or­space CMYK -combine \ newfile”

This will pro­duce an im­age that looks like this:

In ret­ro­spect I won­der if I might try out im­ages like this in­stead of pink. If all I want is the gen­eral vibe of the grid then pink is fine. Though it does have more col­ors (shades of pink) for less col­ors (actually use­ful dis­tinct ones). Who said blog­ging about your stu­pid idea is­n’t use­ful?

Pink — old method

The script for the old way of do­ing it had the val­ues of -distort SRT set to 2 (rotation)”, mean­ing it scaled the col­ors up to 2, mak­ing big­ger dots.

After run­ning the script above, the col­or­space was once again con­verted, to Gray this time, af­ter which the col­ors were lev­eled to mono­chrome: black and this pink. The whole com­mand for those who want to try:

con­vert oldfile” -resize 800 -set op­tion:dis­tort:view­port %wx%h+0+0’ \ -colorspace CMYK -separate null: \ \( -size 2x2 xc: \( +clone -negate \) \ +append \( +clone -negate \) -append \) \ -virtual-pixel tile -filter gauss­ian \ \( +clone -distort SRT 2,0 \) +swap \ \( +clone -distort SRT 2,15 \) +swap \ \( +clone -distort SRT 2,45 \) +swap \ \( +clone -distort SRT 2,75 \) +swap +delete \ -compose Overlay -layers com­pos­ite -set col­or­space CMYK -combine \ -colorspace Gray -colors 2 +level-colors black,#A2719B \ newfile”

If we zoom in on the im­age be­fore and af­ter lev­el­ing the col­ors, we can see the dots do seem more like they vary in size. I omit­ted the -resize flag to give you a bet­ter view of the de­tails.

While not en­tirely ac­cu­rate, I think this method gets the most printy feel out of an im­age. Sadly it can swal­low a lot of de­tail, even if the dots aren’t scaled up. So I aban­doned this af­ter a while (also I got sick of look­ing at it).

Edit: now com­pare to the real deal:

Pink — new method

Monochrome is a cool idea but just has lim­ited use for the blog (and other pics on the web­site). I need some more depth. What I need is more val­ues of pink. I get these by uti­liz­ing the -remap flag.

con­vert oldfile” -resize 800 -set op­tion:dis­tort:view­port %wx%h+0+0’ \ -colorspace CMYK -separate null: \ \( -size 2x2 xc: \( +clone -negate \) \ +append \( +clone -negate \) -append \) \ -virtual-pixel tile -filter gauss­ian \ \( +clone -distort SRT 1,0 \) +swap \ \( +clone -distort SRT 1,15 \) +swap \ \( +clone -distort SRT 1,45 \) +swap \ \( +clone -distort SRT 1,75 \) +swap +delete \ -compose Overlay -layers com­pos­ite -set col­or­space CMYK -combine \ -remap $palette” -colors 32 newfile”

Problematic im­ages

For im­ages like the one I’ve been us­ing every­thing works beau­ti­fully. But with im­ages that are very over­whelm­ingly light, there can be is­sues.

Here’s an ex­am­ple:

Original im­age

After run­ning script

After man­ual edit

The edit in ques­tion: in­creas­ing bright­ness to 300%, Saturation to 200%, in­vert­ing col­ors and remap­ing them to pink

con­vert oldfile” -modulate 300,200,100 -negate -remap $palette newfile”

This is pos­si­bly be­cause my color palette is kinda bad.

Is this even dither­ing?

If all you care about is the re­sult then you could say the im­age has been dithered, es­pe­cially in the old method. Using only two col­ors we cre­ated the il­lu­sion of semi­tones (is this ap­pro­pri­ate us­age in English?)*. The same is ba­si­cally true for the new method as well.

But if you care about the method this is not dither­ing. Or at least it’s the most un­nec­es­sar­ily com­pu­ta­tion­ally ex­pen­sive form of dither­ing I’ve come across. Let’s walk through the steps one more time:

Convert RBG to CYMK, adding one chan­nel

Split the im­age into four im­ages and trans­form each one (starting with scal­ing them up and in­vert­ing them)

limit col­ors to 2 on each and then over­lay four im­ages on top of ea­chother

set col­or­space to CMYK again

limit the col­ors to 32/64/not sure yet where I want this (overlaying the 4 grids will cre­ate new col­ors)

This whole thing, on my lap­top with an 11 year old CPU, can take 10 sec­onds if the im­age is big. The file size is not ex­actly small” (though still smaller than un­scaled pics with more than 32 col­ors). I can imag­ine the pat­tern is­n’t do­ing com­pres­sion al­go­rithms a huge favour. If you value your time or care about ac­tu­ally re­duc­ing an im­age’s size do not do this.

Script

#!/bin/bash temp=“/​tmp/​im­ages” palette=“/​path/​to/​palette.png” rm $temp if [[ $1 = ” ]]; then if [ -d smol ]; then echo must run with ar­gu­ment else mkdir smol big ls -r *.webp > $temp ls -r *.png >> $temp ls -r *.jpg >> $temp ls -r *.jpeg >> $temp ls -r *.gif >> $temp fi else ls -r *$1 > $temp cp *$1 big cat $temp cp $(cat $temp) big/. fi i=$(cat $temp” | wc -l) echo $i while [[ $i -gt 0 ]] do name=“$(head -n $i $temp | tail -n +$i)” echo doing $name” con­vert $name” -set op­tion:dis­tort:view­port %wx%h+0+0’ \ -colorspace CMYK -separate null: \ \( -size 2x2 xc: \( +clone -negate \) \ +append \( +clone -negate \) -append \) \ -virtual-pixel tile -filter gauss­ian \ \( +clone -distort SRT 2,0 \) +swap \ \( +clone -distort SRT 2,15 \) +swap \ \( +clone -distort SRT 2,45 \) +swap \ \( +clone -distort SRT 2,75 \) +swap +delete \ -compose Overlay -layers com­pos­ite -colors 2 \ -set col­or­space CMYK -combine \ -colors 64 smol/$name” (( i– ))

echo $i done

To end with, here is the orig­i­nal im­age with ac­tual dither­ing (FloydSteinberg)

This file is smaller than the new (pink) method (but big­ger than the old one).

Edit: the true method will pro­duce a smaller file for this im­age :^} (though this is not a rule!)

(Edit:) RGB

You can ofc do the same thing with RGB in­stead of CMYK. That would­n’t re­ally be as ac­cu­rate for a print vibe”!! but here’s the RGB AM grid ver­sion:

📍 Posted from Erfurt, DE

Tags: meta, code

Radicle Explorer

radicle.network

Javascript is dis­abled on your browser.

Please en­able Javascript to make use of this site.

Ghosted After a Job Interview? Report the Company

didtheyghostyou.com

To add this web app to your iOS home screen tap the share button and select "Add to the Home Screen".

10HN is also available as an iOS App

If you visit 10HN only rarely, check out the the best articles from the past week.

Visit pancik.com for more.