Skip to content
CAI
Software that uses CAICheck a score

gee1k/uPic

45.6

Weak · 30 September 2026

12.5k

lines of production code

Swift

with C

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

uPic is a macOS utility application designed for uploading images and files to a wide variety of cloud storage providers and image hosting services. It supports native integration through a status bar menu, a system share extension, and a command-line interface, allowing users to upload content from diverse sources. The system manages upload history locally and provides extensive configuration options for customizing output formats, storage hosts, and application behavior.

How it got here

2019 — multi-cloud upload infrastructure

22 changes.

The project was initialized and structured to support a macOS image hosting application with a focus on multi-provider integration. Core development established a flexible architecture for uploading to numerous cloud services, including major providers like AWS S3, Aliyun, and Tencent, alongside custom and social media hosts. The period also saw the implementation of essential UI components, such as a history viewer and status menu, along with foundational utilities for file handling and system integration.

2020–2025 — extensive feature expansion and infrastructure modernization

17 changes.

This period focused on significantly expanding uPic's capabilities by introducing a command-line interface, a macOS share extension, and a comprehensive database history manager. The project also modernized its underlying infrastructure by refactoring the S3 backend for broader cloud compatibility, restructuring the preferences system, and migrating localization to modern string catalogs.

Features

Add GitHub as a supported image hosting provider

Users can now configure and upload images to a GitHub repository. This change introduces the configuration model (requiring owner, repo, branch, token, and optional custom domain) and the uploader logic that commits files to the specified repository via the GitHub API, returning the resulting image URL.

uPic/Models/Github · high confidence

Add Tencent Cloud COS image hosting support

Users can now upload images to Tencent Cloud Object Storage (COS). This change introduces the configuration model (TencentHostConfig), region definitions (TencentRegion), and the upload logic (TencentUploader) required to authenticate and send files to Tencent COS buckets, including support for custom domains and URL suffixes.

uPic/Models/Tencent · high confidence

Add new welcome screen for first-time setup

A new Welcome storyboard has been added to the application, introducing a dedicated onboarding window for first-time users. This screen features the uPic branding, a brief description of the tool, and navigation controls (Previous/Next buttons) to guide users through the initial setup process.

uPic/Views/WelcomeView/Base.lproj · high confidence

Add support for Alibaba Cloud OSS as a storage provider

Users can now upload images to Alibaba Cloud Object Storage Service (OSS). This change introduces the configuration model (AliyunHostConfig) for managing bucket, region, and access credentials, a region registry (AliyunRegion) covering global data centers, and the upload logic (AliyunUploader) that handles signed multipart uploads and URL generation.

uPic/Models/Aliyun · high confidence

Add support for Baidu Cloud BOS as a new upload host

Users can now upload images to Baidu Cloud BOS. This change introduces the Baidu host configuration model (including region, bucket, access/secret keys, and domain settings), a region definition list for selecting data centers, and the uploader implementation that handles authentication, policy signing, and multipart uploads to the Baidu endpoint.

uPic/Models/Baidu · high confidence

Add support for Gitee and Imgur image hosting

Users can now upload images to Gitee and Imgur repositories. This change introduces the necessary configuration models (GiteeHostConfig, ImgurHostConfig) and uploader implementations (GiteeUploader, ImgurUploader) to handle authentication, file transmission, and URL retrieval for these two new providers.

uPic/Models/Gitee · high confidence

Add support for Qiniu Cloud as a storage provider

Users can now configure and upload images to Qiniu Cloud (Qiniu/Kodo) storage. This change introduces the necessary model classes to manage Qiniu-specific settings (such as region, bucket, access keys, and custom domains) and implements the upload logic, including authentication token generation and multipart form data handling, allowing Qiniu to be used as a target for image uploads.

uPic/Models/Qiniu · high confidence

Add support for Sina Weibo as an image host

Users can now upload images to Sina Weibo. This change introduces the Weibo upload provider, including configuration options for username/password or cookie-based authentication, image quality selection (thumbnail, mw690, large), and domain settings, along with the necessary utilities to handle the Weibo upload API and response parsing.

uPic/Models/Weibo · high confidence

Add support for UpYun (又拍云) as a host provider

Users can now configure and upload images to UpYun. This change introduces the UpYunHostConfig model for managing bucket, operator, and domain settings, along with the UpYunUploader implementation that handles the specific authentication (HMAC signature) and multipart upload protocol required by the UpYun API.

uPic/Models/UpYun · high confidence

Added screenshot permission help tutorial with multi-language support

Users now see a dedicated help window when screenshot permissions are required, featuring step-by-step instructions and screenshots to guide them to the macOS Security & Privacy settings. The window includes a direct button to open the relevant system preferences and supports localization in ten languages (including English, Chinese, German, French, Spanish, Italian, Japanese, Korean, and Russian) via a new string catalog.

uPic/Views/ScreenshotAuthorizationHelpWindow · high confidence

Initial app configuration and entitlements setup

The uPic application is initialized with its core configuration files, including Info.plist and entitlements. The Info.plist defines the app as a background utility (LSUIElement) with AppleScript support and a custom URL scheme for external integration. The entitlements file configures the app sandbox, enabling necessary permissions for network access, user-selected file read/write, and shared application groups, which are required for the app's file management and sharing capabilities.

uPic/Supporting Files · high confidence

Initial workspace configuration for uPic v0.1

The uPic Xcode workspace has been initialized with standard configuration files, including the workspace data file referencing the project and the IDE workspace checks plist to manage build settings. This establishes the foundational structure for the uPic v0.1 release.

uPic.xcodeproj/project.xcworkspace · high confidence

Introduces AppleScript support and foundational utility libraries

This update adds the ability to control uPic via AppleScript, allowing users to open files directly into the app through a new \AppleScriptCommand\ and associated \UPic.sdef\ dictionary. It also introduces a suite of basic utility extensions to the codebase, including a custom \Regex\ wrapper for pattern matching, \String\ extensions for cryptographic operations (MD5, SHA, HMAC) using CryptoSwift, and UI helpers like \FlippedView\ and vertically centered text fields, laying the groundwork for the upcoming multi-cloud storage refactoring.

uPic/Basic · high confidence

Introduction of a new Preferences window interface

The application now features a dedicated Preferences window with a tabbed interface, including General and Advanced sections. The General tab allows users to configure whether uPic launches at login and provides a direct link to download the iOS version from the App Store. The Advanced tab introduces a Shortcuts section for configuring keyboard shortcuts.

uPic/Views/PreferencesWindow/Base.lproj · high confidence

Introduction of a new onboarding welcome flow

A new welcome view has been added to guide users through an initial setup process. This multi-page interface allows users to navigate through several informational screens using previous and next buttons. Upon completing the final step, the application automatically requests full disk access permissions for the user's home directory before closing the window.

uPic/Views/WelcomeView · high confidence

New Database management interface

A new Database window has been added to the application, providing a dedicated interface for managing stored items. The view includes a toolbar with Refresh, Copy, and Delete All actions, and displays a table listing database entries with columns for index, name, host, and size.

uPic/Views/DatabaseWindow/Base.lproj · high confidence

New and updated configuration views for cloud storage providers

The Preferences window now includes dedicated configuration views for Aliyun OSS, Baidu BOS, Tencent COS, Qiniu Kodo, UpYun, S3, Imgur, GitHub, Gitee, SM.MS (migrated to s.ee), and Custom endpoints. These views allow users to configure region, bucket, credentials, and access controls (including S3 ACLs and custom HTTP methods). Secure text fields for tokens and keys now feature reveal toggles for easier input.

uPic/Views/PreferencesWindow/ConfigView/Views · high confidence

New command-line interface for uploading files

A new CLI tool is now available in the uPic/Cli module, allowing users to upload files or URLs directly from the terminal. The interface supports specifying input paths via the --upload flag, customizing the output format (such as URL, Markdown, HTML, or UBB) via the --output flag, and suppressing error messages with the --silent flag. Uploaded results are printed to the console, enabling easy integration into scripts and automated workflows.

uPic/Cli · high confidence

New custom image host configuration interface

The Preferences window now includes a dedicated configuration view for custom image hosts. Users can define custom upload endpoints and configure specific HTTP headers and request body parameters through a new sheet interface, allowing for flexible integration with non-standard storage providers.

uPic/Views/PreferencesWindow/ConfigView · high confidence

New database history window for managing upload records

A new Database window has been added to uPic, allowing users to view and manage their image upload history. The interface displays a table of uploaded items with columns for name, host, size, time, and URL, supporting sorting by any of these fields. Users can select multiple entries to copy their URLs to the clipboard via a context menu or toolbar button, and can clear the entire upload history using the delete button, which requires confirmation to prevent accidental data loss.

uPic/Views/DatabaseWindow · high confidence

New macOS Share Extension for uploading files via system share sheet

A new Share Extension has been added to uPic, allowing users to upload files directly from the macOS share sheet. The extension supports up to 9 attachments (images, files, movies) and text, processing them and passing the file paths to the main app via the 'uPic://' URL scheme. It includes a localized UI (English, German, Spanish, French, Italian, Japanese, Korean, Russian, Simplified/Traditional Chinese) and requires sandbox entitlements for file access and network communication.

uPicShareExtension · high confidence

New manager classes for configuration, database, and disk permissions

The uPic/Managers directory now includes several new manager classes: ConfigManager handles user defaults and host configuration; DBManager manages local storage using WCDBSwift for upload history and output formats; DiskPermissionManager implements logic for requesting and managing macOS full disk access permissions, including workarounds for macOS 26.0; and WindowManager provides utilities for instantiating and displaying storyboard-based windows.

uPic/Managers · high confidence

New utility extensions and URL scheme handling infrastructure

This change introduces a suite of new Swift extension files in the uPic/Extensions directory to support core application functionality. It adds helper methods for data manipulation (MD5, SHA, Base64, image conversion), date formatting, and file system checks. It also implements keyboard shortcut name definitions, NSButton action handling, and NSImage resizing. Crucially, it adds URL scheme handling (URLSchemeExt) to allow external apps or command-line tools to trigger uploads via file paths, URLs, or clipboard content, and introduces a NotificationExt class to manage system notifications for upload status and configuration events.

uPic/Extensions · high confidence

New waterfall-style upload history view with hover previews

The History Record view now uses a custom waterfall (masonry) layout to display upload thumbnails in multiple columns, replacing the previous layout. Hovering over a thumbnail opens a popover showing a larger preview image, and long filenames scroll automatically. The view includes a button to clear the entire upload history and supports configurable column counts, spacing, and padding via user defaults.

uPic/Views/HistoryRecord · high confidence

Support for custom API upload hosts

Users can now configure and upload images to arbitrary custom hosts by defining API endpoints, HTTP methods (POST/PUT), request headers, body parameters, and URL parsing rules. This new capability allows integration with any image hosting service that provides a compatible API, extending uPic beyond its built-in providers.

uPic/Models/Custom · high confidence

uPic app launch and core UI infrastructure

The uPic application now initializes with a status bar menu that supports right-click cancellation of uploads, a welcome screen for first-time disk access authorization, and URL scheme handling for external uploads. The app includes a new logging system with export functionality, MIME type detection for file validation, and a localized string catalog supporting multiple languages.

uPic · high confidence

Behavioural changes

Added Xcode schemes for Simplified Chinese, Traditional Chinese, and Share Extension targets

New Xcode scheme files have been added to support building and launching the app in Simplified Chinese (zh-Hans) and Traditional Chinese (zh-Hant) locales, as well as a dedicated scheme for the uPicShareExtension target. This enables developers to easily test and run the application in these specific language configurations and debug the new share extension independently.

uPic.xcodeproj/xcshareddata · high confidence

Introduce third-party screenshot app support and refactor disk access permissions

Users can now select Longshot as an alternative to the system screenshot tool, with the app handling the necessary screen-capture permissions. Additionally, the logic for requesting Full Disk Access has been reworked to use bookmarks, addressing issues on macOS 26 and allowing the app to request access to the user's home directory instead of the entire root.

uPic/Utils · high confidence

Introduces a typed notification system for app state changes

The uPic/Notifier module now provides a structured, type-safe wrapper around NSNotificationCenter. By defining specific Notifier classes (AppNotifier, ConfigNotifier, PreferencesNotifier) with distinct notification enums, the application can now broadcast and observe events such as upload status changes, host configuration updates, and history list modifications with greater reliability and clarity than raw string-based notifications.

uPic/Notifier · high confidence

Introduces multi-host upload architecture with PNG compression and customizable save paths

The uPic/Models directory has been refactored to support a multi-host architecture, introducing a \BaseUploader\ that routes uploads to specific providers (SM.MS, Custom, UpYun, Qiniu, Aliyun OSS, Tencent COS, GitHub, Gitee, Weibo, S3, Imgur, and Baidu BOS) via a new \HostType\ enum. This change adds automatic PNG compression for uploaded images using \libminipng\, implements a variable-based save path system (supporting \{filename}\, \{mimetype}\, \{year}\, \{month}\, etc.), and introduces \OutputFormatModel\ to allow users to customize the final output format (URL, HTML, Markdown, UBB) after upload.

uPic/Models · high confidence

Migrate interface strings to modern string catalogs

The application has replaced legacy localized string files with modern \.xcstrings\ catalogs for the Database, Preferences, Welcome, and Main interfaces. This migration updates the underlying localization infrastructure, ensuring that UI text in the database window, preferences pane, welcome screen, and main menu is managed through the current Apple string catalog format, which supports richer metadata and improved translation workflows.

(repo-wide) · high confidence

Preferences window restructured with new configuration panels

The Preferences window has been reorganized into distinct tabs including General, Advanced, Host, and About. Users can now manage disk access permissions directly from the Advanced tab, configure custom output formats for uploads, and adjust history record display settings. The About tab provides direct links to the project's GitHub page, homepage, and contact email, along with a button to show the welcome page.

uPic/Views/PreferencesWindow · high confidence

Project structure updated for macOS 26 and new upload features

The Xcode project configuration has been updated to support the new host configuration system, including custom hosts and S3-compatible services (Amazon S3, Tencent COS, Aliyun OSS, Baidu BOS, Qiniu, UpYun, Sm.MS, Imgur, Weibo, GitHub, Gitee). The project now includes a Share Extension for file sharing uploads, a Welcome screen, and a database feature for upload history. Dependencies have been updated to include SotoS3, WCDBSwiftDynamic, CocoaLumberjack, and others, and the minimum deployment target is set to macOS 13.

uPic.xcodeproj · medium confidence

S3 storage backend refactored to support custom endpoints and ACLs

The S3 integration has been rewritten to support third-party S3-compatible services (such as Cloudflare R2 and Alibaba Cloud) by allowing custom endpoints and regions. Users can now configure private bucket access via Access Control Lists (ACLs), which are exposed in the configuration UI. The update also includes a comprehensive list of supported AWS and partner regions, with localized display names for Chinese users, and improves upload reliability by using streaming for standard AWS S3 and byte-buffer uploads for custom endpoints.

uPic/Models/S3 · high confidence

SM.MS integration migrated to s.ee API with mandatory token authentication

The SM.MS image hosting support has been updated to use the s.ee service API endpoint (https://s.ee/api/v1/file/upload) instead of the previous sm.ms domain. This change enforces mandatory token authentication for uploads, rejecting requests if no valid token is provided in the host configuration. The uploader now handles the s.ee API response format, where a success code of 200 indicates a successful upload, and extracts the resulting image URL from the response data.

uPic/Models/Smms · high confidence

Status menu gains output format and encoding options

The status bar menu now includes an 'Output format' submenu allowing users to choose between URL, HTML, Markdown, UBB, and Custom formats, along with an 'Output format encode' toggle to enable or disable URL encoding for the generated links.

uPic/Base.lproj · high confidence

Updated libminipng framework to version 1.4.9

The libminipng framework has been updated to version 1.4.9, incorporating performance optimizations for legacy code. This release includes the compiled Swift module and headers for macOS (arm64 and x86\_64), maintaining the existing API for PNG compression via data or file paths.

libs/libminipng.framework, libs/libminipng.framework/Versions/A/Modules/libminipng.swiftmodule · high confidence

Dependencies

Updated Swift Package Manager dependencies and added libminipng podspec

This update refreshes the project's Swift Package Manager dependencies to their latest versions, including Alamofire 5.10.2, Kingfisher 8.5.0, Soto 6.8.0, CryptoSwift 1.9.0, and SnapKit 5.7.1, among others. Additionally, a new podspec for libminipng version 0.5.6 has been added, defining the Swift library for PNG compression with support for macOS 10.10 and iOS 10.0.

(dependencies) · high confidence

Housekeeping

Project initialization with documentation, CI, and license change

This commit establishes the repository structure by adding the initial README (English and Chinese), a CONTRIBUTING guide, and a release tutorial. It introduces a Travis CI build configuration for Swift and updates the .gitignore to track Pods and ignore IDE files. Additionally, the project license is changed from MIT to Apache License 2.0, and contributor metadata is added via .all-contributorsrc.

(repo-wide) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 49 → 46 (-2.9)
  • Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.

Lenses

  • Code Health 90 → 90 (+0.0)
  • Architecture 91 → 93 (+2.1)
  • Maturity 51 → 33 (-18.0)
  • Readiness 21 → 27 (+6.0)
  • Security 95 → 95 (+0.0)

Resolved (4)

  • Change coupling: AppDelegate.swift ↔ PreferenceKey.swift (uPic/AppDelegate.swift)
  • Documentation: no contributor guidance (README.md)
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)

New (24)

  • Low cohesion: Data (LCOM4 9) (uPic/Extensions/Data+Extension.swift)
  • Low cohesion: String (LCOM4 19) (uPic/Basic/String+Crypto.swift)
  • Outdated: alamofire
  • Outdated: async-http-client
  • Outdated: cocoalumberjack
  • Outdated: cryptoswift
  • Outdated: kingfisher
  • Outdated: sqlcipher
  • Outdated: swift-asn1
  • Outdated: swift-async-algorithms
  • Outdated: swift-atomics
  • Outdated: swift-certificates
  • Outdated: swift-collections
  • Outdated: swift-http-structured-headers
  • Outdated: swift-http-types
  • Outdated: swift-log
  • Outdated: swift-metrics
  • Outdated: swift-nio
  • Outdated: swift-nio-extras
  • Outdated: swift-nio-http2
  • …and 4 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

gee1k/uPic was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 30 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 5d6b01949823223255acbec4bde94ec53a2669ed — the exact code this score is about.
  • Scored under rubric-2026.09.18 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-cb25ca4feafa.