feat: user upload heatmap (#28593)

* Feat - Heatmap

* Implemented Comments to prettify and code cleanup

* fixing code to pass cases.

* fixing errors for OpenAPI Clients

* Improving the code.

* Fix code

* Rerun generated client check

* Rerun generated client

* feat: command for user pages (#28554)

* fix(web): timeline stuttering with many assets in 1 day (#28509)

* fix(web): timeline stuttering with many assets in 1 day

* cache isInOrNearViewport per day

* skip inOrNearViewport check on first run

* chore(ml): allow insightface 1.x (#28595)

* chore(ml): allow insightface 1.x

The new insightface 1.0 release appears to have no breaking code changes nor relevant license changes ([before](2a78baec42/README.md), [after](70f3269ea6/README.md), c.f. fd7ddfef54/machine-learning/README.md), and it works on my machine.

* Update uv.lock

* please excuse my incompetence

* Triggering the actions.

* bad merge

* Fix code

* Code clear

* Resolve conflict

* Resolve conflict

* Resolve conflict

* Resolve errors

* Resolve errors

* Resolve errors more

* chore: clean up

---------

Co-authored-by: Alex <alex.tran1502@gmail.com>
Co-authored-by: Ben Beckford <ben@benjaminbeckford.com>
Co-authored-by: Aaron Liu <aaronliu0130@gmail.com>
Co-authored-by: Jason Rasmussen <jason@rasm.me>
This commit is contained in:
Abhijeet Sanjiv Bonde 2026-06-04 15:36:09 -04:00 committed by GitHub
parent 58528cad08
commit b3d49045de
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
31 changed files with 1159 additions and 8 deletions

View file

@ -1264,6 +1264,96 @@
"x-immich-state": "Stable"
}
},
"/admin/users/{id}/calendar-heatmap": {
"get": {
"description": "Retrieve activity counts for a specified period, in a calendar heatmap format.",
"operationId": "getUserCalendarHeatmapAdmin",
"parameters": [
{
"name": "from",
"required": false,
"in": "query",
"description": "Start date in UTC",
"schema": {
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
"example": "2024-01-01",
"type": "string"
}
},
{
"name": "id",
"required": true,
"in": "path",
"schema": {
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$",
"type": "string"
}
},
{
"name": "to",
"required": false,
"in": "query",
"description": "End date in UTC",
"schema": {
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
"example": "2024-01-01",
"type": "string"
}
},
{
"name": "type",
"required": false,
"in": "query",
"schema": {
"default": "Upload",
"$ref": "#/components/schemas/CalendarHeatmapType"
}
}
],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CalendarHeatmapResponseDto"
}
}
},
"description": ""
}
},
"security": [
{
"bearer": []
},
{
"cookie": []
},
{
"api_key": []
}
],
"summary": "Retrieve calendar heatmap activity",
"tags": [
"Users (admin)"
],
"x-immich-history": [
{
"version": "v3",
"state": "Added"
},
{
"version": "v3",
"state": "Stable"
}
],
"x-immich-permission": "user.read",
"x-immich-state": "Stable"
}
},
"/admin/users/{id}/preferences": {
"get": {
"description": "Retrieve the preferences of a specific user.",
@ -14485,6 +14575,86 @@
"x-immich-state": "Stable"
}
},
"/users/me/calendar-heatmap": {
"get": {
"description": "Retrieve activity counts for a specified period, in a calendar heatmap format.",
"operationId": "getMyCalendarHeatmap",
"parameters": [
{
"name": "from",
"required": false,
"in": "query",
"description": "Start date in UTC",
"schema": {
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
"example": "2024-01-01",
"type": "string"
}
},
{
"name": "to",
"required": false,
"in": "query",
"description": "End date in UTC",
"schema": {
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
"example": "2024-01-01",
"type": "string"
}
},
{
"name": "type",
"required": false,
"in": "query",
"schema": {
"default": "Upload",
"$ref": "#/components/schemas/CalendarHeatmapType"
}
}
],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CalendarHeatmapResponseDto"
}
}
},
"description": ""
}
},
"security": [
{
"bearer": []
},
{
"cookie": []
},
{
"api_key": []
}
],
"summary": "Retrieve calendar heatmap activity",
"tags": [
"Users"
],
"x-immich-history": [
{
"version": "v3",
"state": "Added"
},
{
"version": "v3",
"state": "Stable"
}
],
"x-immich-permission": "user.read",
"x-immich-state": "Stable"
}
},
"/users/me/license": {
"delete": {
"description": "Delete the registered product key for the current user.",
@ -17645,6 +17815,64 @@
],
"type": "string"
},
"CalendarHeatmapResponseDto": {
"properties": {
"from": {
"description": "Start date in UTC",
"example": "2024-01-01",
"type": "string"
},
"series": {
"items": {
"properties": {
"count": {
"description": "Activity count",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"date": {
"description": "Date in UTC",
"example": "2024-01-01",
"type": "string"
}
},
"required": [
"date",
"count"
],
"type": "object"
},
"type": "array"
},
"to": {
"description": "End date in UTC",
"example": "2024-12-31",
"type": "string"
},
"totalCount": {
"description": "Total activity count over the period",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
}
},
"required": [
"from",
"series",
"to",
"totalCount"
],
"type": "object"
},
"CalendarHeatmapType": {
"description": "Type of calendar heatmap",
"enum": [
"Upload",
"Taken"
],
"type": "string"
},
"CastResponse": {
"properties": {
"gCastEnabled": {