aboutsummaryrefslogtreecommitdiff
path: root/Jellyfin.Api/Controllers/ImageController.cs
diff options
context:
space:
mode:
authorJPVenson <github@jpb.email>2025-07-27 21:15:18 +0000
committerJPVenson <github@jpb.email>2025-07-27 21:15:18 +0000
commit96a05276a627607e246fbc85e19f841ef8d24bf5 (patch)
tree85d7db3f66e436854c333ec3c86669f08a0371e4 /Jellyfin.Api/Controllers/ImageController.cs
parent0b6f4b2bd9d162ee5d415425ab07bd9520b1487f (diff)
Removed all server side processing options from public endpoints for image gen
Diffstat (limited to 'Jellyfin.Api/Controllers/ImageController.cs')
-rw-r--r--Jellyfin.Api/Controllers/ImageController.cs159
1 files changed, 41 insertions, 118 deletions
diff --git a/Jellyfin.Api/Controllers/ImageController.cs b/Jellyfin.Api/Controllers/ImageController.cs
index abda053d3..c175ce8b1 100644
--- a/Jellyfin.Api/Controllers/ImageController.cs
+++ b/Jellyfin.Api/Controllers/ImageController.cs
@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Collections.Immutable;
using System.ComponentModel.DataAnnotations;
using System.Diagnostics.CodeAnalysis;
+using System.Drawing;
using System.Globalization;
using System.IO;
using System.Linq;
@@ -32,6 +33,15 @@ using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Microsoft.Net.Http.Headers;
+using ImageArgument = (
+ int? Width,
+ int? Height,
+ int? FillWidth,
+ int? FillHeight,
+ int? Blur,
+ string? BackgroundColor,
+ string? ForegroundLayer,
+ int Quality);
namespace Jellyfin.Api.Controllers;
@@ -1457,20 +1467,6 @@ public class ImageController : BaseJellyfinApiController
/// </summary>
/// <param name="userId">User id.</param>
/// <param name="tag">Optional. Supply the cache tag from the item object to receive strong caching headers.</param>
- /// <param name="format">Determines the output format of the image - original,gif,jpg,png.</param>
- /// <param name="maxWidth">The maximum image width to return.</param>
- /// <param name="maxHeight">The maximum image height to return.</param>
- /// <param name="percentPlayed">Optional. Percent to render for the percent played overlay.</param>
- /// <param name="unplayedCount">Optional. Unplayed count overlay to render.</param>
- /// <param name="width">The fixed image width to return.</param>
- /// <param name="height">The fixed image height to return.</param>
- /// <param name="quality">Optional. Quality setting, from 0-100. Defaults to 90 and should suffice in most cases.</param>
- /// <param name="fillWidth">Width of box to fill.</param>
- /// <param name="fillHeight">Height of box to fill.</param>
- /// <param name="blur">Optional. Blur image.</param>
- /// <param name="backgroundColor">Optional. Apply a background color for transparent images.</param>
- /// <param name="foregroundLayer">Optional. Apply a foreground layer on top of the image.</param>
- /// <param name="imageIndex">Image index.</param>
/// <response code="200">Image stream returned.</response>
/// <response code="400">User id not provided.</response>
/// <response code="404">Item not found.</response>
@@ -1486,21 +1482,7 @@ public class ImageController : BaseJellyfinApiController
[ProducesImageFile]
public async Task<ActionResult> GetUserImage(
[FromQuery] Guid? userId,
- [FromQuery] string? tag,
- [FromQuery] ImageFormat? format,
- [FromQuery] int? maxWidth,
- [FromQuery] int? maxHeight,
- [FromQuery] double? percentPlayed,
- [FromQuery] int? unplayedCount,
- [FromQuery] int? width,
- [FromQuery] int? height,
- [FromQuery] int? quality,
- [FromQuery] int? fillWidth,
- [FromQuery] int? fillHeight,
- [FromQuery] int? blur,
- [FromQuery] string? backgroundColor,
- [FromQuery] string? foregroundLayer,
- [FromQuery] int? imageIndex)
+ [FromQuery] string? tag)
{
var requestUserId = userId ?? User.GetUserId();
if (requestUserId.IsEmpty())
@@ -1521,34 +1503,24 @@ public class ImageController : BaseJellyfinApiController
DateModified = user.ProfileImage.LastModified
};
- if (width.HasValue)
- {
- info.Width = width.Value;
- }
-
- if (height.HasValue)
- {
- info.Height = height.Value;
- }
-
return await GetImageInternal(
user.Id,
ImageType.Profile,
- imageIndex,
+ null,
tag,
- format,
- maxWidth,
- maxHeight,
- percentPlayed,
- unplayedCount,
- width,
- height,
- quality,
- fillWidth,
- fillHeight,
- blur,
- backgroundColor,
- foregroundLayer,
+ ImageFormat.Jpg,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ 90,
+ null,
+ null,
+ null,
+ null,
+ null,
null,
info)
.ConfigureAwait(false);
@@ -1607,21 +1579,7 @@ public class ImageController : BaseJellyfinApiController
[FromQuery] int? imageIndex)
=> GetUserImage(
userId,
- tag,
- format,
- maxWidth,
- maxHeight,
- percentPlayed,
- unplayedCount,
- width,
- height,
- quality,
- fillWidth,
- fillHeight,
- blur,
- backgroundColor,
- foregroundLayer,
- imageIndex);
+ tag);
/// <summary>
/// Get user profile image.
@@ -1676,55 +1634,19 @@ public class ImageController : BaseJellyfinApiController
[FromQuery] string? foregroundLayer)
=> GetUserImage(
userId,
- tag,
- format,
- maxWidth,
- maxHeight,
- percentPlayed,
- unplayedCount,
- width,
- height,
- quality,
- fillWidth,
- fillHeight,
- blur,
- backgroundColor,
- foregroundLayer,
- imageIndex);
+ tag);
/// <summary>
/// Generates or gets the splashscreen.
/// </summary>
/// <param name="tag">Supply the cache tag from the item object to receive strong caching headers.</param>
- /// <param name="format">Determines the output format of the image - original,gif,jpg,png.</param>
- /// <param name="maxWidth">The maximum image width to return.</param>
- /// <param name="maxHeight">The maximum image height to return.</param>
- /// <param name="width">The fixed image width to return.</param>
- /// <param name="height">The fixed image height to return.</param>
- /// <param name="fillWidth">Width of box to fill.</param>
- /// <param name="fillHeight">Height of box to fill.</param>
- /// <param name="blur">Blur image.</param>
- /// <param name="backgroundColor">Apply a background color for transparent images.</param>
- /// <param name="foregroundLayer">Apply a foreground layer on top of the image.</param>
- /// <param name="quality">Quality setting, from 0-100.</param>
/// <response code="200">Splashscreen returned successfully.</response>
/// <returns>The splashscreen.</returns>
[HttpGet("Branding/Splashscreen")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesImageFile]
public async Task<ActionResult> GetSplashscreen(
- [FromQuery] string? tag,
- [FromQuery] ImageFormat? format,
- [FromQuery] int? maxWidth,
- [FromQuery] int? maxHeight,
- [FromQuery] int? width,
- [FromQuery] int? height,
- [FromQuery] int? fillWidth,
- [FromQuery] int? fillHeight,
- [FromQuery] int? blur,
- [FromQuery] string? backgroundColor,
- [FromQuery] string? foregroundLayer,
- [FromQuery, Range(0, 100)] int quality = 90)
+ [FromQuery] string? tag)
{
var brandingOptions = _serverConfigurationManager.GetConfiguration<BrandingOptions>("branding");
var isAdmin = User.IsInRole(Constants.UserRoles.Administrator);
@@ -1749,7 +1671,7 @@ public class ImageController : BaseJellyfinApiController
}
}
- var outputFormats = GetOutputFormats(format);
+ var outputFormats = GetOutputFormats(ImageFormat.Jpg);
TimeSpan? cacheDuration = null;
if (!string.IsNullOrEmpty(tag))
@@ -1763,16 +1685,16 @@ public class ImageController : BaseJellyfinApiController
{
Path = splashscreenPath
},
- Height = height,
- MaxHeight = maxHeight,
- MaxWidth = maxWidth,
- FillHeight = fillHeight,
- FillWidth = fillWidth,
- Quality = quality,
- Width = width,
- Blur = blur,
- BackgroundColor = backgroundColor,
- ForegroundLayer = foregroundLayer,
+ Height = null,
+ MaxHeight = null,
+ MaxWidth = null,
+ FillHeight = null,
+ FillWidth = null,
+ Quality = 90,
+ Width = null,
+ Blur = null,
+ BackgroundColor = null,
+ ForegroundLayer = null,
SupportedOutputFormats = outputFormats
};
@@ -1988,7 +1910,8 @@ public class ImageController : BaseJellyfinApiController
Blur = blur,
BackgroundColor = backgroundColor,
ForegroundLayer = foregroundLayer,
- SupportedOutputFormats = outputFormats
+ SupportedOutputFormats = outputFormats,
+ StrictCacheHandling = true
};
return await GetImageResult(