Top AI Repos — open-source AI, indexed and scored
Top AI Repos tracks AI repositories on GitHub and answers two different questions about each one: is it moving right now, and would you bet a product on it.
Top AI Repos tracks AI repositories on GitHub and answers two different questions about each one: is it moving right now, and would you bet a product on it.
41 hand-curated drop-in SwiftUI Metal shader effects — holographic foil, kaleidoscope, magnetic fields, glitch, neon edges and more. Typed View modifiers, agent-friendly docs.
| Date | Stars |
|---|---|
| 2026-07-31 | 281 |
| 2026-08-06 | 281 |
Today
— stars today
This week
— stars this week
This month
— stars this month
Momentum
0.0
growth rate 0.00%/day
# SwiftUIShaders
41 SwiftUI Metal shaders. Holographic foil, kaleidoscope mandalas, magnetic fields, glitch, neon edges, and a pile more. Each one is a `[[ stitchable ]]` Metal function with a typed SwiftUI `View` modifier wrapped around it, so dropping one onto a view is a single line.
<p align="center">
<img src="Docs/demo.gif" width="280" alt="SwiftUIShaders running live in the shader lab" />
</p>
These started as a hidden shader lab inside Epilogue, my reading app. I built way more than I ever shipped, so I pulled the good ones out to share. Every shader here got rendered on a real book cover and kept only if it actually looked good. The duds, the washed-out ones, and the ones that only work on a blank gradient got cut. What's left is the set I'd reach for myself.
Drop them into your own project and mess around. They're also built to hand straight to a coding agent like Claude Code or Codex. If one sparks an idea, point your agent at [AGENTS.md](AGENTS.md) and let it riff.
Want to dial them in by eye? Hand the repo to your agent and ask it to build a slider-based tuning tool. Everything it needs is in [`Docs/parameters.json`](Docs/parameters.json), and the recipe is in [AGENTS.md](AGENTS.md). Tune against your own content, copy the line it spits out, paste it into your code.
> The `bcs_` prefix is just the shader namespace. Nothing here is wired to Epilogue's actual app code.
## Requirements
- iOS 17+ / macOS 14+ / tvOS 17+ / visionOS 1+
- Xcode 15+ (the Metal toolchain compiles the shaders into the package's `default.metallib`)
> One gotcha: build with Xcode or `xcodebuild`, not bare `swift build`. SwiftPM's command-line driver on macOS doesn't run the Metal toolchain, so `Bundle.module` and `default.metallib` never get produced. In Xcode it just works.
## Install
Swift Package Manager. In Xcode, go to **File ▸ Add Package Dependencies** and point it at this repo's URL. Or add it in `Package.swift`:
```swift
.package(url: "https://github.com/krispuckett/SwiftUIShaders.git", from: "1.0.0")
```
Then add `SwiftUIShaders` to your target's dependencies.
## Quick start
```swift
import SwiftUI
import SwiftUIShaders
struct ContentView: View {
var body: some View {
Image("book-cover")
.resizable()
.scaledToFit()
.bcsHolographic(intensity: 0.6, scale: 12, speed: 1.2) // animated, self-driving
}
}
```
Every shader is a `View` modifier. The animated ones run themselves with `TimelineView(.animation)`, so there's no timer for you to babysit. Every parameter has a sensible default, so `.bcsKaleidoscope()` works on its own.
```swift
Text("Chapter One")
.font(.largeTitle)
.bcsChromaticSplit(spread: 8, angle: .pi / 4)
bookCover
.bcsAurora() // ambient animated glow
myView
.bcsEmboss(strength: 3) // static relief
```
One heads up: these want real content. Photos, book covers, illustrations, text. Drop one on a flat single-color fill and the displacement and edge effects have nothing to grab onto.
## How it works (conventions)
Each wrapper applies one Metal `layerEffect`. The mapping is uniform:
| Shader argument | Supplied by the wrapper |
|---|---|
| `position`, `layer` | SwiftUI (automatic) |
| `size` | The view's pixel size, from `GeometryProxy` |
| `time` | Elapsed seconds, from `TimelineView(.animation)` (animated shaders only) |
| interaction point (e.g. `touchPos`) | A `UnitPoint` (0...1) you pass, converted to pixels |
| everything else | Typed `Float` parameters with defaults |
Every method also takes `maxSampleOffset:` (default `64×64`). Raise it if a heavy displacement effect looks clipped at the edges. Lower it for a small perf win on cheap effects.
## The shaders
37 animate. 4 are static (`bcsEmboss`, `bcsFrosted`, and the two interaction-driven ripples). Ranges in parentheses are the sweet spots. The defaults are tuned values that look good out of the box, so you can call any of these with no arguments and get somethExcerpt of 10,599 characters
Read on GitHubWould you bet a product on this? Bounded 0–100 and slow moving.
Not classified yet. Classification runs as part of npm run ingest.