moerdowo/fal-mac

GitHub: moerdowo/fal-mac

一个为fal.ai设计的原生macOS客户端,用于浏览AI模型并简化内容生成流程。

Stars: 0 | Forks: 0

FalMac icon

FalMac

适用于 fal.ai 的原生 macOS SwiftUI 应用。粘贴您的 API 密钥,浏览完整的模型目录,填写一个根据每个模型的 OpenAPI 模式自动生成的表单,并查看/保存生成的图像、视频、音频或文本。

macOS 26+ Liquid Glass single file build

FalMac main window — Nano Banana 2 generating a Balinese barong painting, with the parallel run queue on the right and the favorites filter open in the sidebar

## 功能 - **液态玻璃 UI** — 全面使用 macOS 26 的 `glassEffect()` / `GlassEffectContainer` API:队列中状态着色的玻璃卡片、`.glassProminent` 运行按钮、用于余额芯片的玻璃胶囊、交互式玻璃缩略图。 - **并行运行队列** — 每次点击运行都会启动自己的后台轮询任务,并在右侧的堆栈中添加一张卡片。无需等待,想启动多少个都可以。 - **钥匙串中的 API 密钥** — 在设置中粘贴一次即可(⌘,)。永远不会以明文形式写入磁盘。 - **实时模型目录** — 从 `https://api.fal.ai/v1/models` 拉取,支持搜索、分类过滤和游标分页。 - **每个模型的动态表单** — 根据模型的 OpenAPI 模式生成(`https://fal.ai/api/openapi/queue/openapi.json?endpoint_id=...`)。支持字符串、整数/数字(存在 `minimum`/`maximum` 时使用滑块)、布尔值、枚举、数组、嵌套对象和 `oneOf`/`anyOf`。 - **文件上传** — 任何 URL 形状的输入(例如 `image_url`、`audio_url`)都会显示一个“上传文件...”按钮,可上传到 fal CDN 并将生成的 URL 粘贴到字段中。 - **带轮询的队列 API** — 提交到 `https://queue.fal.run/`,轮询状态,获取响应,并显示日志。 - **自动媒体查看器** — 扫描响应 JSON 中的图像/视频/音频 URL(通过扩展名和键名启发式),并在正确的内联查看器(图像、`AVKit` 视频、音频拖动条)中进行渲染。 - **一键下载** — 保存到您选择的默认文件夹(无需逐文件选择器),自动去重文件名,然后在访达中显示。原始 JSON 响应始终可复制。 - 通过 `PUT …/cancel` **取消**正在运行的请求。 ## 安装(预构建的 `.dmg`) 1. **下载** [发布页](https://github.com/moerdowo/fal-mac/releases) 上最新的 `FalMac-*.dmg`。 2. 打开 DMG,将 **FalMac.app** 拖到 **应用程序** 文件夹。 3. 首次启动绕过门禁 — 选择**一种**方式: - **最简单 — 移除隔离属性**(一个终端命令): `xattr -dr com.apple.quarantine /Applications/FalMac.app` 然后正常双击即可。 - **GUI 方式**:在应用程序中右键单击 **FalMac.app** → **打开** → 在警告对话框中点击 **打开**。之后即可正常启动。 - **系统设置**:尝试打开应用,被阻止时前往 **系统设置 → 隐私与安全性**,滚动到底部,点击 FalMac 条目旁边的 **仍然打开**。 4. 打开应用中的 **设置 (⌘,)** 并粘贴您的 fal.ai API 密钥。 此应用**仅支持 Apple 芯片**(Swift 6 / macOS 26+)。不提供 Intel 版本。 ## 从源码构建 ### 选项 A — `swift run`(最快,开发模式) ``` cd fal-mac swift run ``` 会打开一个窗口。使用 **设置 (⌘,)** 粘贴您的 fal.ai 密钥,然后点击保存。侧边栏将填充内容。 ### 选项 B — 在 Xcode 中打开(推荐用于开发) ``` open Package.swift ``` Xcode 将打开 Swift 包。选择 **FalMac** scheme 和 **我的 Mac** 作为目标,然后按 ⌘R。 ### 选项 C — 构建自己的 DMG ``` scripts/build_dmg.sh # 或者,带有明确版本: VERSION=1.2.3 scripts/build_dmg.sh ``` 将生成 `build/FalMac-.dmg`。该脚本执行 release 构建,手动创建 `.app` 包(Info.plist、AppIcon.icns,复制 SPM 资源包),对其进行 ad-hoc 签名以便门禁允许其启动,并将其包装在带有 `/Applications` 符号链接的 UDZO 压缩 DMG 中。 ## 获取 API 密钥 在 登录并创建一个密钥。将其粘贴到应用的设置中。 ## 架构 ``` Sources/FalMac/ ├── FalMacApp.swift # @main App + Settings scene ├── AppState.swift # ObservableObject: catalog, selection, form values, run state ├── FalAPI.swift # listModels / openAPI / submit / status / result / upload ├── JSONValue.swift # Codable union for arbitrary JSON ├── JSONSchema.swift # $ref/oneOf-aware OpenAPI → SchemaNode flattener ├── Keychain.swift # SecItem wrapper ├── Downloader.swift # URLSession download + unique-name save └── Views/ ├── ContentView.swift # NavigationSplitView shell ├── SettingsView.swift # API key + default download folder ├── ModelListView.swift # sidebar with search/category/pagination ├── ModelFormView.swift # dynamic form generator └── OutputView.swift # status, logs, media viewers, raw JSON ``` ### 线路格式参考 | 操作 | 方法 | URL | | ----------------- | ------ | -------------------------------------------------------------------- | | 列出模型 | GET | `https://api.fal.ai/v1/models?q=&category=&cursor=` | | 每个模型的模式 | GET | `https://fal.ai/api/openapi/queue/openapi.json?endpoint_id=` | | 提交 | POST | `https://queue.fal.run/` | | 状态 | GET | `https://queue.fal.run//requests//status?logs=1` | | 结果 | GET | `https://queue.fal.run//requests//response` | | 取消 | PUT | `https://queue.fal.run//requests//cancel` | | 上传(令牌) | POST | `https://rest.alpha.fal.ai/storage/auth/token?storage_type=fal-cdn-v3` | | 上传(字节) | POST | `{base_url}/files/upload`,附带 `Authorization: Bearer ` | 认证:在所有 fal 托管端点上使用 `Authorization: Key `。 ## 注意事项与限制 - 动态表单从 `oneOf`/`anyOf` 中选择单个分支(优先选择非空分支)。对于不寻常的结构,您可以通过数组/对象字段渲染器直接编辑 JSON。 - 复杂对象数组会渲染为 JSON 文本区域 — 直接粘贴/编辑 JSON。fal 模型的常见用例是简单的标量数组(例如 `loras`)。 - 应用每 1.5 秒轮询一次。长时间运行的任务没问题;如果需要,可以在 `AppState.run()` 中更改轮询频率。 - `swift run` 构建的是未打包的可执行文件。要获得带有自定义图标、通知中心权限或公证功能的正式签名 `.app`,请使用 Xcode。 ## 许可证 MIT。
标签:AI模型, Apex, API客户端, fal.ai, Keychain安全, Liquid Glass UI, macOS应用, macOS开发, OpenAPI, SwiftUI, 人工智能, 动态表单, 图像查看器, 媒体查看, 并行队列, 文件下载, 机器学习, 模型浏览, 用户模式Hook绕过, 表单生成, 视频查看器, 音频查看器