I finally plugged GPT-3 into @pastelapp to generate color palettes from text prompts, and it just does exactly what I hoped it might do. How I wish I could do this with an on-device Siri API call; I don't intend to ship with a dependency on OpenAI, so for now this is a 'maybe someday’ feature
Was presented with some neat generated palettes while testing this UI. I think I'm going to keep building a UI around it in case the API situation changes in the future. It's just such a cool side feature to have
If you're curious about what's happening behind the scenes, this is the setup prompt I'm passing to #GPT. I’m defining a JSON data structure, and redefining what a palette is in the process (as GPT sees the word 'palette' and tries to output 5 colors every time if I don’t). I tell it to be fun and creative in its palette generation and naming, and to follow related topics for keywords. The results speak for themselves, though it does still have a habit of duplicating palettes under diff names
Prompts are taken as-is, so "a gallery of sample palettes to include in an art app” turns into all of these with no other code. Names provided by the generator
While I don’t intend to ship GPT-3 as a user-facing feature in Pastel, I can certainly use it on the development side to build collections of palettes to populate a gallery feature I was toying with. It will make it very easy to pre-fill with content based on themes
Today's task in @pastelapp is to rewrite the color wheel to move it off third-party ObjC code and bring it in-house in Swift. Almost done — it’s so much smoother to interact with now, even if there are still a couple bugs to work out. Pastel is still a ways off being Swift-only, about 6,000 lines to go, but it’s nice to be able to get major improvements as I do-over each class
Next up for visionOS: @pastelapp. A few dozen build errors to start with…
…well that's certainly a look 😂 Time to dive in
Better, but I can see I'm going to have plenty of elements to rewrite ahead of me
Some of this UI does look fun, but it's gonna be one hell of an OS to window-manage
I think the color picker makes sense as an ornament, but it is pretty hard to gauge some of this stuff from a simulator
Going in another direction for @pastelapp. I will have to rewrite the sidebar as a collection view (it’s still UITableView, of all things), and I'm glad I spent time this week working on a new color picker tab bar because I'm gonna need it. Overall I think it's going to require a lot more effort than Broadcasts, but it's mostly stuff I needed/wanted to do anyway
Starting to make preparations to branch @pastelapp to v3.0, so I can work on some larger changes coming down the pipe. I think that will include bumping the minimum OS version, which is currently macOS 11 & iOS 15. I will be dropping support for macOS 11 in this release, for certain, and maybe push even higher depending on timing and how development plays out. This is probably a 2024 update rather than for the iPhone launch this year

This is the time post-WWDC where I try to get all my projects building to a shippable state again with the new Xcode after working on experimental tangents and rabbit holes for months 😅 I think everything in my dev version of @pastelapp works again now, but I can't remember what I broke.

I'm doing a pass at a bunch of little things, shuffling some bits around, updating iconography etc

There is no ‘iOS 17 update' for Pastel, as the new system features don't really touch upon anything in the app. Kinda gives me some space to think up new features to build as I work towards v3.0. The app is in a great place, I think, so I don't feel like there's any pressing need to dig in right now. Some of my other projects need the attention a lot more
Making progress on @pastelapp today. I've walked back some of the more-complex changes I was making for visionOS, and taken a pass at rounding out all the sharp edges. There is still a lot to do, but I think it's turned a corner now

An awful lot of bringup for an existing iOS view controller on visionOS involves three things:

• Change your background color
• Round out your shapes/set your button configurations to the system rounded style
• Add roundrect hover styles

Here's a before/after on my wallpaper generator; just a handful of one-line changes

TL;DR much of this stuff looks incredibly daunting when you first run your iOS app on visionOS, where everything has the wrong color and style, and feels like a mountain of work ahead of you. But actually, it's not as bad as it seems
Here’s @pastelapp with a few more passes around the app. Honestly? I could probably publish this build without changing a whole lot else

I built this palette-generation feature two years ago for @pastelapp, hoping that Apple would ship LLM APIs I could use instead of GPT-3. Womp womp.

Here's hoping tomorrow brings some change here…

https://mastodon.social/@stroughtonsmith/110194490041668965

Finally trying Apple's Foundation Models for palette generation, side by side with what I generated with ChatGPT.

The first image is the prompt "Planets of the Solar System" with Apple's on-device LLM, the second image is the same prompt using GPT-3.5 as of 2 years ago.

It can certainly do what I need it to do; whether the results are any good is an open question. I think it's inoffensive, and harmless, at the very least, so maybe I can move forward with it

As a proof of concept, it confirms that the Foundation Models can indeed be applied to any kind of silly little task, and it’s so easy to get structured, deterministic output from it using the new @-Generable macro. No JSON, no parsing, just perfectly formed structs as output
Even though the concept works, the performance is a little worrying. It takes an M1 iPad Air about 30 seconds to generate a handful of color palettes — which are just some hex codes with a name, nothing complex. Streaming the results in one by one becomes a necessity with those kinds of processing times

Enabling streaming, you can see that the Foundation Models API is slow — I would say alarmingly slow — on M1 hardware. I'm not even sure what kind of optimization I might be able to do to speed this up, as it's seemingly purely on the token generation side 🤔

It's going to take more than a little care and attention before you start sprinkling this all over your apps, that's for sure. Good to know

#wwdc25

Initial bringup on macOS 26 for Pastel. There are some significant system-level performance regressions that I'm going to have to debug my way through — I've lost my 60fps window resizing, that's for sure 😐 Other than that, it was a modern app with a forward-thinking design language, and it fits Liquid Glass on iOS and macOS without much trouble
Slowly iterating on the design language for Pastel and fixing all the weird little bugs the new SDK introduced. Only now is it functional again
Not making a whole lot of forward progress with my apps right now, so I'm gonna get some lateral progress done. Pastel still has about 5,500 lines of Objective-C code remaining that is all ripe for translating to Swift via Xcode's new ChatGPT feature. It'll give me a chance to sanity-check some of my legacy code in the process
Slightly reorganizing my copy menu while I'm at it, and scratching my chin at the menu glass effect 🤔

Still a long way to go, but here's a before/after on Pastel on macOS 26 as of the current build.

During development, you spend so much time looking at the new design that you kinda forget how it used to look

Pastel on iPad is going to look effectively indistinguishable from the Mac version by the time I'm finished updating it for Liquid Glass

With today's work out of the way, I think Pastel's iOS 26 update is done for Mac and for iPhone. The iPad build is blocked by my earlier radar, and I haven't figured out a mitigation strategy yet, but we're nearly there

https://mastodon.social/@stroughtonsmith/115095006424999494

I've started the TestFlight process for Pastel for iOS and macOS 26. There are some known issues on iOS, including a severe hang, but most things are in place now, and there are still slots available 😄

https://testflight.apple.com/join/xkUYBZPb

Today's build of @pastelapp fixes the last of my major issues, and achieves all the goals I set out for this iOS 26 update 😄 All in all, the update touched about 6000 lines of code, with zero new features, just to adopt the new UI
I think @pastelapp for iOS and macOS 26 is now 'visually complete' ahead of the September event, which means I have to start thinking about marketing screenshots. I'm very happy with how this turned out, even if it took a while to get there
I don’t think I’ll ever get used to how good iPadOS 26 looks on an external display. If you have an M1 iPad or higher, I implore you to give it a try
@stroughtonsmith @pastelapp Congratulations, turned out great! It is still astonishing how much the polishing phase of the 26-cycle feels like a “kill your darlings” scenario for custom controls…
@stroughtonsmith @pastelapp Generally liking it very much!

I feel the inspector panel can use some love regarding alignment:
- vertically center the color mode icons with the plus button and search toolbar items
- adjust the margins of the color cell to the slider and color wheel

@jncn the bar under the color wheel is shared across all the tabs, so isn't intended to align with the wheel directly. I do agree about the tabs at the top, though, but ran into complications due to how it's structured so shelved it for now.

The color wheel itself can't expand to the same spacing as the bar underneath because it has to share the space with the brightness slider, and having the slider match the wheel looks best with that in mind

@stroughtonsmith Its siblings UIContentUnavailableConfiguration.search and .loading are also nice and save a lot of time.
@stroughtonsmith I dream of a world where all of the energy that went into SwiftUI instead went into UIKit content configurations and content views.
@stroughtonsmith It can't be installed on macOS
@ahnafm the macOS build is still waiting for review
@stroughtonsmith I use Pastel constantly on both Mac and iPhone. Such a fantastic app, and truly indispensable for me. Excited to try out the 26 update.
@stroughtonsmith new design is really pretty!
@stroughtonsmith tbh, I still like the „before“ better 😅🫣 This round of updates really is going to make all my computing devices illegible and ugly as sin, isn‘t it…? 😭

@jpsachse @stroughtonsmith Never having used the app (it is quite obvious, what it does):

The search bar overlapping the sidebar makes no sense to me.
The commands that affect only the content should be above (in) the content area.
Without a toolbar (background), it looks like the search bar is part of the sidebar (just a bit too wide to fit inside).

(I know that is as Apple designed it to be but as I said: *To me*, this makes no sense.)

@teilweise @jpsachse here is a similar configuration from Finder

@stroughtonsmith @jpsachse Sorry if I didn’t make it more clear: I do not blame you. Not at all.

IMO the idea of removing the toolbar background, and therefor the toolbar, is not working. Unless you also move the controls that were in the toolbar. But that is (often) not possible due to space constraints. All of this is 100% Apple’s fault.

@teilweise @stroughtonsmith 💯 this

I think you executed well on what Apple has been doing, but to me it also looks like a rendering error with the search bar overlapping the side bar border.

I also don’t understand why the left side bar is a floating container and the right one is not.

Liquid glass seems like „designed to be beautiful in one specific case and didn’t think about any edge cases at all“ to the extreme. Pretty in the optimal case, a failure as design system. 🥲

@jpsachse @teilweise @stroughtonsmith The set of horizontal controls, with marked shadows in light mode, implicitly indicate a toolbar for the whole window. I guess it’s something we’ll get used to.

It might look better with a slightly wider Search box, since there’s enough space to the left, unlike in Finder

@stroughtonsmith how does it look in dark mode? I'm keen to see it because I'm expecting a stronger reflection of the palettes on the sidebar glass
@simsaens it looks great when scrolling, as both sidebars pick up reflections
@stroughtonsmith the search field overlapping the right panel is bugging me… the content seems recessed compared thanks to top controls shadows and left bar shadow…
@stroughtonsmith despite the potential downsides, it does make the old design feel very dated
@stroughtonsmith I really feel for you devs right now. You shouldn’t be going through all this shit, doing your best while knowing that you’re at the mercy of Apple coming to its senses at some point.
@stroughtonsmith Lol at the dinosaur icon for objective-c

@stroughtonsmith That really does give the illusion that there is some kind of physical glass object there, but it's super hard to infer what shape it is. Some kind of rectangle with rounded edges, I guess

It's neat! It's kind of weird! I wonder what it'll be like in practice.

@stroughtonsmith This is very much like an example in one of the WWDC videos where they recommend using an icon next to only the first “Copy …” menu item when several “Copy …” menu items appear in sequence. I’m not sure *why* this is preferred, but apparently it is what Apple recommends.
@siracusa I experimented with that and didn't like the results, but I might come back to it later
@siracusa @stroughtonsmith i think it makes sense because the purpose of the glyphs is to make it easy to mentally segment functions when scanning a list, and having a bunch of items with a duplicated icon makes those similar options feel closer to *identical* than just *similar*
@andybb @siracusa @stroughtonsmith yes, I just wish there were a good way to indicate that all of the items with that list are grouped, not just missing an icon.
@stroughtonsmith solid use of AI. Another good one: "increase code coverage of my tests"
@stroughtonsmith is the secondary sidebar/color picker use inspector? Or is it all custom?
@nehayward it's always been custom, and glass is broken in beta 2 so I can't make it look like an inspector just yet
@stroughtonsmith In your experience, how difficult is it to keep supporting older OSes while compiling against the new SDK?
@stroughtonsmith I really am bummed out by this lack of clear legibility here
@stroughtonsmith is there anything special that i need to do to make the sidebar full height via catalyst?
@Joekw oh you might need an NSToolbar? Maybe? Or scene titleVisibility hidden
@stroughtonsmith looks like the NSToolbar is indeed necessary. shame i get a double height navigation bar now.

@Joekw try:

titleVisibility = .init(rawValue: 10) ?? .hidden // UITitlebarTitleVisibilityTransparent

@stroughtonsmith have you seen the foundation models code along session? they talk about how to make some easy optimizations. it won’t fix all your issues but i think it may help some!
@manolo I'll check it out
@stroughtonsmith @manolo Oh and btw, there’s a known issue that the “includeSchemaInPrompt” is not respected.
@stroughtonsmith this looks kind of charming actually? I remember watching the defrag program run, it was chill watching the computer work so hard
@stroughtonsmith That is really fun to watch though 😆
@stroughtonsmith could you file a FB with that example please?
@stroughtonsmith If you can specify a smaller context window size as an option, it'll go faster (at least with traditional LLMs). See how many tokens you are generating and go from there?
@stroughtonsmith on the other hand, I kinda like the slow filling in bits. Almost reminds me of progressive jpegs over 14.4 modems!
@stroughtonsmith seems ripe for a bunch marking app to be published!