feat: gif support for profile picture#1366
Conversation
There was a problem hiding this comment.
Pull request overview
Adds animated GIF support for profile pictures (~/.face) by introducing a format-detecting ProfileImage component that switches between animated and static rendering.
Changes:
- Add
gifto supported image types/extensions for the file picker. - Introduce
CUtils::imageFormat()(QImageReader-based) for extension-independent format detection. - Replace
CachingImageusage withProfileImagein dashboard and lock screen profile-picture views.
Reviewed changes
Copilot reviewed 6 out of 6 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| utils/Images.qml | Extends allowed image extensions/types to include GIF. |
| plugin/src/Caelestia/cutils.hpp | Exposes new QML-invokable imageFormat() helper. |
| plugin/src/Caelestia/cutils.cpp | Implements format detection via QImageReader::imageFormat(). |
| modules/lock/Center.qml | Switches lock-screen avatar rendering to ProfileImage. |
| modules/dashboard/dash/User.qml | Switches dashboard avatar to ProfileImage and triggers reload after picker accept. |
| components/images/ProfileImage.qml | New loader-based component selecting AnimatedImage vs CachingImage. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
CI failures are pre-existing and unrelated to this PR:
|
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 6 out of 6 changed files in this pull request and generated 4 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 6 out of 6 changed files in this pull request and generated 1 comment.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 6 out of 6 changed files in this pull request and generated 1 comment.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
63b6188 to
93d8368
Compare
13d7d2b to
0148a73
Compare
|
Quick update: I rebased the PR on top of the latest upstream changes after the new image cache provider merge. I tested an additional follow-up that moved image format detection into The current branch keeps the stable behavior:
I’ll keep the PR focused on the working GIF support first, and can revisit deeper integration with the new image utils/cache provider separately if needed. |
|
Updated this PR after the upstream image cache provider changes. The current version keeps GIF profile pictures on Follow-up polish included:
I intentionally avoided changing global Tested on my NixOS setup by rebuilding Caelestia Shell and selecting/replacing GIF profile pictures. Everything works as expected. |
|
Rebased/merged onto the latest 2.0 changes, resolved conflicts, and re-tested GIF profile images. Also fixed the flake recording_20260607_23-39-35.mp4 |
|
Im closing this PR, opening a new one with the same feat, and finally without this copilot |
Summary
~/.face)ProfileImagecomponent that detects image format via magic bytes (QImageReader) and switches betweenAnimatedImage(GIF) andCachingImage(static).giffiles directlyChanges
CUtils::imageFormat()— new C++ method for format detection without file extensioncomponents/images/ProfileImage.qml— Loader-based component switching between animated/static renderingUser.qml(dashboard) andCenter.qml(lock screen) to useProfileImagegifto valid image types inImages.qmlgif.mp4