Skip to content

release: v0.32.0 - BeReal memories import support#1254

Open
Kurisudes wants to merge 5 commits intosimulot:mainfrom
Kurisudes:feature/from-bereal
Open

release: v0.32.0 - BeReal memories import support#1254
Kurisudes wants to merge 5 commits intosimulot:mainfrom
Kurisudes:feature/from-bereal

Conversation

@Kurisudes
Copy link
Copy Markdown

Release v0.32.0: BeReal Memories Import Support

This PR merges the complete BeReal import feature to main for release.

What's New

New Feature: BeReal Memories Import (from-bereal)

  • Automatically handles dual-camera captures (front + back)
  • Separates images into distinct assets with smart stacking
  • Applies intelligent tags and preserves metadata
  • Optional per-memory album organization

🏗️ Architecture

  • New GroupByDualCamera grouping type for flexible import sources
  • Enhanced metadata handling

🧪 Testing

  • Comprehensive E2E tests validate all features
  • All tests passing (unit, lint, e2e)

📖 Documentation

  • Updated architecture docs
  • README documentation with usage examples for BeReal
  • Release notes with full feature list

Changes Summary

  • adapters/bereal/ - Complete BeReal adapter implementation
  • internal/assets/group.go - New GroupByDualCamera type
  • internal/e2e/ - E2E tests for BeReal import
  • docs/ - Updated architecture and README
  • docs/releases/release-notes-v0.32.0.md - Release notes

Quality Assurance

  • ✅ All unit tests passing
  • ✅ All E2E tests passing (including new Test_FromBeReal)
  • ✅ Linting clean (0 issues)
  • ✅ Documentation complete and consistent
  • ✅ No experimental code remaining
  • ✅ Cross-platform compatibility verified

Related Issue

Closes #1248

Implement a new adapter to import BeReal memories with:
- Automatic separation into main (front) and selfie (back) assets with proper tags
- Optional per-memory album grouping via --bereal-album flag
- Robust path resolution for various BeReal export formats
- Proper stacking of front/back image pairs via GroupByRawJpg
- Location metadata support from BeReal memory JSON

Features:
- CLI command: `upload from-bereal <path>`
- Tags applied: BeReal_Main (front), BeReal_Selfie (back)
- Album support: single album 'BeReal' or per-memory 'BeReal/YYYY-MM-DD'
- Handle path variants (leading slash, user-id segments) in JSON
- Comprehensive unit tests for path resolution and pairing

Includes:
- New adapter at adapters/bereal/ with Browse, load, and asset creation
- Updated upload command registration
- Test fixtures with sample memories.json and images
- Tests for path resolution and front/back pairing
Update docs/architecture.md to reflect BeReal as a standard, implemented
feature rather than a future extension:

- Add bereal to adapter layer diagram
- Add BeReal description to adapter section (tagging, stacking, albums)
- Replace "Extension Points: Adding BeReal Support" with generic
  "Adding New Import Sources" pattern for any new adapters
- Replace "Next Steps for BeReal Feature" with practical "Running Tests" section
- Streamline documentation to essentials only

This normalizes BeReal as a core part of the project architecture.
- Add BeReal command description to 'How immich-go Works' section
  describing tags, stacking, and per-memory album support
- Add link to Architecture documentation in main docs table
- Update tests to use bundled fixture data from adapters/bereal/DATA/
Major Features:
- Add from-bereal command for importing BeReal memories (simulot#1248)
- Automatic separation of front and back camera images
- Smart stacking with front camera as cover
- Intelligent tagging (BeReal_Main, BeReal_Selfie)
- Per-memory album organization support
- Metadata preservation (location, captions, dates)

Architecture:
- Introduce GroupByDualCamera grouping type
- Support for dual-camera import sources

Infrastructure:
- Add comprehensive E2E tests for BeReal import
- Update documentation with BeReal as standard adapter
- Improve cross-platform shell script compatibility

Improvements:
- Remove unused code
- Enhance metadata handling

This release makes immich-go the first open-source tool with
native support for importing BeReal memories while preserving
the essence of the dual-camera capture.

Closes simulot#1248
@Kurisudes Kurisudes requested a review from simulot as a code owner December 16, 2025 08:10
@Kurisudes Kurisudes marked this pull request as draft December 16, 2025 12:48
- Correct camera terminology: BackImage=Main (rear), FrontImage=Selfie (front)
- Fix album naming documentation: single 'BeReal' album, not per-date
- Update all references in release notes and architecture docs
- Clarify flag descriptions and known limitations
@Kurisudes Kurisudes marked this pull request as ready for review December 17, 2025 06:28
@Kurisudes
Copy link
Copy Markdown
Author

@simulot Do you have some feedback to the pull request?

@niedon
Copy link
Copy Markdown

niedon commented Feb 4, 2026

@Kurisudes Hi, thank you for the work on this PR — it looks nice! I’m particularly interested in the BeReal import functionality for Immich. I opened a feature request last year regarding BeReal support in Immich itself, but it didn’t gain much traction, so I was glad to see this implementation.

I have a few questions about the current approach, if you don’t mind:

  • In some cases, BeReal moments consist of three media files (a photo from one camera, plus a “cover” photo and a BTS video, like Apple’s Live Photos). From the Immich user’s perspective, are these handled as a photo + live photo, or simply as a stack of three independent assets?

  • Are the uploaded assets stored in Immich with any kind of BeReal-specific flag or metadata that would allow them to be identified as BeReal content in the future (e.g. if Immich later adds native BeReal-related features)?

  • Regarding the floating miniature similar to BeReal’s UI: I assume this would only be achievable via changes in the Immich frontend/backend itself, rather than through immich-go, am I wrong?

  • Finally, a more novice question: is it currently possible in immich-go to control or customize the destination folder where assets are uploaded? For example, keeping all BeReal content under a dedicated folder in the library.

Thanks again for your work, and for any clarification you can provide.

@Kurisudes
Copy link
Copy Markdown
Author

Kurisudes commented Feb 5, 2026

Thanks for your interest in my pull request. Happy to see that there are people interested in it.

  • In some cases, BeReal moments consist of three media files (a photo from one camera, plus a “cover” photo and a BTS video, like Apple’s Live Photos). From the Immich user’s perspective, are these handled as a photo + live photo, or simply as a stack of three independent assets?

I did not see any of those in my data. It was always two pictures or two videos. These are added in stack to with front/main camera as the cover.
If you would provide such a data set to me, then I could test it or you add it yourself.

  • Are the uploaded assets stored in Immich with any kind of BeReal-specific flag or metadata that would allow them to be identified as BeReal content in the future (e.g. if Immich later adds native BeReal-related features)?

They are added with a BeReal Tag and they can be automatically added to an Album by parameter to the command.

  • Regarding the floating miniature similar to BeReal’s UI: I assume this would only be achievable via changes in the Immich frontend/backend itself, rather than through immich-go, am I wrong?

Correct, I did not want to merge the picture somehow and tinker with the original assets. I wanted to add a kind of BeReal view in Immich. But I did not have motivation for it yet.

  • Finally, a more novice question: is it currently possible in immich-go to control or customize the destination folder where assets are uploaded? For example, keeping all BeReal content under a dedicated folder in the library.

I think, no that is not possible. This would be the more towards the handling of external libraries in Immich but I am no expert on this.

@niedon
Copy link
Copy Markdown

niedon commented Feb 7, 2026

Thank you for answering! As soon as this branch is merged I will make it a try, I really want to see my BeReal history added to all my other photos.

About the third media, it comes in this format:

memories.json:
{
	"frontImage": {...}
	"backImage": {...}
	"btsMedia": {
		"bucket": "storage.bere.al",
		"height": 2000,
		"width": 1500,
		"path": "/Photos/XXXXXXXX/post/YYYYYYYYY.mp4",
		"mediaType": "video",
		"mimeType": "video/mp4"
	}
}

It's just some seconds of a video taken before the backImage, pretty similar to Live Photos. BeReal seems to act a bit weird with that feature sometimes, but it's a nice to-have in the app. It can be activated with the "BTS On" when taking a BeReal. I can give you some test data if you tell me how.

WhatsApp Image 2026-02-07 at 10 24 21

@simulot
Copy link
Copy Markdown
Owner

simulot commented Feb 7, 2026

Thank you for your contribution to immich-go.

I’ve just had a look through the BeReal adapter you've implemented. It looks like a solid addition to our supported platforms. I particularly appreciate the inclusion of end-to-end tests.

To move forward with the review process, could you please rebase your PR onto the develop branch?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature Request] Add support for BeReal import (handling front/back photos & metadata)

3 participants