gee1k/uPic
45.6
Weak · 30 September 2026
12.5k
lines of production code
Swift
with C
2
measurements over time
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.