Verification Report · jellyfin v12.1

NOT PUBLISHED   jellyfin-v12.1-20260915-001   verified_at 2026-09-15T02:11:42Z

Immutable inputs

App versionv12.1 ← release tag v12.1 · source ee91c75e777d
Image (exact tag)jellyfin/jellyfin:12.1
Image digest (linux/amd64)sha256:326be1010b16c92e492f6c7dd6fd105943db84ce723c73183279a1ab357b8f9b
Index digestsha256:78d3ea1207d1322471fcac39a614f004f2ccf7e878f95ab2977d752f07e4dd7e
Pulled asjellyfin/jellyfin:12.1@sha256:326be1010b16c92e492f6c7dd6fd105943db84ce723c73183279a1ab357b8f9b via registry-1.docker.io
Platform contractami-025d99823a4caad37 · us-east-1/x86_64 · source=public (plat-us-east-1-x86_64-20260909-001)
Config revisionsapp e0d620bc1b59 · compose cb6224fdbc5a
Release typenew_version — rule4: not semver-comparable to previous 'v12.0'

Publish gate

CheckFieldResult
Compose startedchecks.compose_startedPassed
Container healthychecks.container_healthyPassed
Health check passedchecks.health_check_passedPassed
Application testschecks.tests_passedPassed
Screenshots capturedchecks.screenshots_generatedPassed
Screenshots publishedchecks.screenshots_uploadedFailed
Report publishedchecks.report_uploadedFailed
Manifest publishedchecks.verification_manifest_uploadedFailed
Platform contract validchecks.required_platform_contract_validPassed

Evidence

Health probeHTTP 200 — ready
Version assertionTrue actual 12.1.0.0 — 匹配(prefix):kind=exec_command 取到 '12.1.0.0',期望 '12.1'
Testspytest exit=0 .. [100%] ==================================== PASSES ==================================== =========================== short test summary info ============================ PASSED apps/jellyfin/tests/test_wizard.py::test_health_ready PASSED apps/jellyfin/tests/test_wizard.py::test_wizard_renders 2 passed in 9.96s
Container staterunning
Duration44.7s(2026-09-15T02:10:57Z → 2026-09-15T02:11:41Z)

Screenshots

wizard
wizard · Startup wizard / 初始化向导

Application test output

pytest exit=0
..                                                                       [100%]
==================================== PASSES ====================================
=========================== short test summary info ============================
PASSED apps/jellyfin/tests/test_wizard.py::test_health_ready
PASSED apps/jellyfin/tests/test_wizard.py::test_wizard_renders
2 passed in 9.96s

Container logs (tail)

Implementations.Plugins.PluginManager: Loaded plugin: TMDb 12.1.0.0
jellyfin-1  | [02:11:28.581] [INF] [10] Emby.Server.Implementations.Plugins.PluginManager: Loaded plugin: Studio Images 12.1.0.0
jellyfin-1  | [02:11:28.582] [INF] [10] Emby.Server.Implementations.Plugins.PluginManager: Loaded plugin: OMDb 12.1.0.0
jellyfin-1  | [02:11:28.590] [INF] [10] Emby.Server.Implementations.Plugins.PluginManager: Loaded plugin: MusicBrainz 12.1.0.0
jellyfin-1  | [02:11:28.590] [INF] [10] Emby.Server.Implementations.Plugins.PluginManager: Loaded plugin: ListenBrainz Similarity Provider 12.1.0.0
jellyfin-1  | [02:11:28.591] [INF] [10] Emby.Server.Implementations.Plugins.PluginManager: Loaded plugin: AudioDB 12.1.0.0
jellyfin-1  | [02:11:28.619] [INF] [10] Emby.Server.Implementations.Library.Search.SearchManager: Registered 0 external search providers: . Fallback providers: Database (priority 100)
jellyfin-1  | [02:11:28.620] [INF] [10] Jellyfin.Server.Migrations.JellyfinMigrationService: There are 5 migrations for stage AppInitialisation.
jellyfin-1  | [02:11:28.621] [INF] [10] InternalCodeMigration: Perform migration 20250420090000_AddDefaultPluginRepository
jellyfin-1  | [02:11:28.622] [INF] [10] Emby.Server.Implementations.AppBase.BaseConfigurationManager: Saving system configuration
jellyfin-1  | [02:11:28.623] [INF] [10] Emby.Server.Implementations.AppBase.BaseConfigurationManager: Setting cache path: /cache
jellyfin-1  | [02:11:28.623] [INF] [10] InternalCodeMigration: Migration 20250420090000_AddDefaultPluginRepository was successfully applied
jellyfin-1  | [02:11:28.625] [INF] [10] InternalCodeMigration: Perform migration 20250420110000_ReaddDefaultPluginRepository
jellyfin-1  | [02:11:28.625] [INF] [10] InternalCodeMigration: Migration 20250420110000_ReaddDefaultPluginRepository was successfully applied
jellyfin-1  | [02:11:28.626] [INF] [10] InternalCodeMigration: Perform migration 20250420160000_AddDefaultCastReceivers
jellyfin-1  | [02:11:28.627] [INF] [10] Emby.Server.Implementations.AppBase.BaseConfigurationManager: Saving system configuration
jellyfin-1  | [02:11:28.627] [INF] [10] Emby.Server.Implementations.AppBase.BaseConfigurationManager: Setting cache path: /cache
jellyfin-1  | [02:11:28.627] [INF] [10] InternalCodeMigration: Migration 20250420160000_AddDefaultCastReceivers was successfully applied
jellyfin-1  | [02:11:28.629] [INF] [10] InternalCodeMigration: Perform migration 20250420170000_UpdateDefaultPluginRepository
jellyfin-1  | [02:11:28.629] [INF] [10] Emby.Server.Implementations.AppBase.BaseConfigurationManager: Saving system configuration
jellyfin-1  | [02:11:28.642] [INF] [10] Emby.Server.Implementations.AppBase.BaseConfigurationManager: Setting cache path: /cache
jellyfin-1  | [02:11:28.642] [INF] [10] InternalCodeMigration: Migration 20250420170000_UpdateDefaultPluginRepository was successfully applied
jellyfin-1  | [02:11:28.648] [INF] [10] InternalCodeMigration: Perform migration 20250420230000_MoveTrickplayFiles
jellyfin-1  | [02:11:28.892] [WRN] [16] Microsoft.Extensions.Diagnostics.HealthChecks.DefaultHealthCheckService: Health check StartupCheck with status Degraded completed after 0.8474ms with message 'Server is still starting up.'
jellyfin-1  | [02:11:29.031] [INF] [10] Jellyfin.Server.Migrations.Routines.MoveTrickplayFiles: Checked: 5000 - Moved: 0 - Time: 00:00:00.3824585
jellyfin-1  | [02:11:29.032] [INF] [10] Jellyfin.Server.Migrations.Routines.MoveTrickplayFiles: Moved 0 items in 00:00:00.3830123
jellyfin-1  | [02:11:29.032] [INF] [10] InternalCodeMigration: Migration 20250420230000_MoveTrickplayFiles was successfully applied
jellyfin-1  | [02:11:29.035] [INF] [10] Main: Attempt to cleanup JellyfinDb backup.
jellyfin-1  | [02:11:29.035] [INF] [10] Main: Migrations have been applied, optimizing the database... This might take a while
jellyfin-1  | [02:11:29.127] [INF] [10] Jellyfin.Database.Providers.Sqlite.SqliteDatabaseProvider: jellyfin.db optimized successfully!
jellyfin-1  | [02:11:29.152] [INF] [6] Main: Kestrel is listening on 0.0.0.0
jellyfin-1  | [02:11:29.166] [WRN] [6] Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager: No XML encryptor configured. Key {b441a5e2-6e57-4bb3-ac17-23b2370e3fbc} may be persisted to storage in unencrypted form.
jellyfin-1  | [02:11:29.507] [WRN] [6] Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware: The WebRootPath was not found: /wwwroot. Static files may be unavailable.
jellyfin-1  | [02:11:29.891] [INF] [6] Emby.Server.Implementations.ApplicationHost: Running startup tasks
jellyfin-1  | [02:11:29.935] [INF] [6] Emby.Server.Implementations.ScheduledTasks.TaskManager: Daily trigger for Generate Trickplay Images set to fire at 2026-09-15 03:00:00.000 +00:00, which is 00:48:30.0643278 from now.
jellyfin-1  | [02:11:29.938] [INF] [6] Emby.Server.Implementations.ScheduledTasks.TaskManager: Daily trigger for Extract Chapter Images set to fire at 2026-09-16 02:00:00.000 +00:00, which is 23:48:30.0619610 from now.
jellyfin-1  | [02:11:29.959] [INF] [6] MediaBrowser.MediaEncoding.Encoder.MediaEncoder: Found ffmpeg version 8.1.2
jellyfin-1  | [02:11:29.989] [INF] [6] MediaBrowser.MediaEncoding.Encoder.MediaEncoder: Available decoders: ["libdav1d", "av1", "av1_cuvid", "av1_qsv", "h264", "h264_qsv", "h264_cuvid", "hevc", "hevc_qsv", "hevc_cuvid", "mpeg2video", "mpeg2_qsv", "mpeg2_cuvid", "mpeg4", "mpeg4_cuvid", "msmpeg4", "vc1_qsv", "vc1_cuvid", "vp8", "libvpx", "vp8_cuvid", "vp8_qsv", "vp9", "libvpx-vp9", "vp9_cuvid", "vp9_qsv", "aac", "ac3", "ac4", "dca", "flac", "mp3", "truehd"]
jellyfin-1  | [02:11:30.003] [INF] [6] MediaBrowser.MediaEncoding.Encoder.MediaEncoder: Available encoders: ["libsvtav1", "av1_nvenc", "av1_qsv", "av1_amf", "av1_vaapi", "libx264", "h264_amf", "h264_nvenc", "h264_qsv", "h264_v4l2m2m", "h264_vaapi", "libx265", "hevc_amf", "hevc_nvenc", "hevc_qsv", "hevc_vaapi", "mjpeg_qsv", "mjpeg_vaapi", "aac", "libfdk_aac", "ac3", "alac", "dca", "flac", "libmp3lame", "libopus", "truehd", "libvorbis", "srt"]
jellyfin-1  | [02:11:30.017] [INF] [6] MediaBrowser.MediaEncoding.Encoder.MediaEncoder: Available filters: ["bwdif_cuda", "bwdif_opencl", "deinterlace_qsv", "deinterlace_vaapi", "flip_vulkan", "hwupload_cuda", "hwupload_vaapi", "libplacebo", "overlay_opencl", "overlay_qsv", "overlay_vaapi", "overlay_vulkan", "overlay_cuda", "procamp_vaapi", "scale_cuda", "scale_opencl", "scale_qsv", "scale_vaapi", "scale_vulkan", "tonemapx", "tonemap_cuda", "tonemap_opencl", "tonemap_vaapi", "transpose_cuda", "transpose_opencl", "transpose_vaapi", "transpose_vulkan", "vpp_qsv", "yadif_cuda", "yadif_opencl", "zscale", "alphasrc"]
jellyfin-1  | [02:11:30.181] [INF] [6] MediaBrowser.MediaEncoding.Encoder.MediaEncoder: Available hwaccel types: ["cuda", "vaapi", "qsv", "drm", "opencl", "vulkan", "amf"]
jellyfin-1  | [02:11:31.760] [INF] [6] MediaBrowser.MediaEncoding.Encoder.MediaEncoder: FFmpeg: /usr/lib/jellyfin-ffmpeg/ffmpeg
jellyfin-1  | [02:11:31.761] [INF] [6] Emby.Server.Implementations.ApplicationHost: ServerId: cb46a62b1f3e424cb74ce347f5186e32
jellyfin-1  | [02:11:31.761] [INF] [6] Emby.Server.Implementations.ApplicationHost: Core startup complete
jellyfin-1  | [02:11:31.762] [INF] [6] Main: Startup complete 0:00:05.9236783
jellyfin-1  | [02:11:32.947] [INF] [16] Emby.Server.Implementations.ScheduledTasks.TaskManager: Clean Transcode Directory Completed after 0 minute(s) and 0 seconds
jellyfin-1  | [02:11:33.528] [INF] [10] Emby.Server.Implementations.ScheduledTasks.TaskManager: Update Plugins Completed after 0 minute(s) and 0 seconds
jellyfin-1  | [02:11:38.812] [ERR] [4] Jellyfin.Api.Middleware.ExceptionMiddleware: Error processing request: Token is required. URL GET /socket.
jellyfin-1  | [02:11:40.488] [ERR] [4] Jellyfin.Api.Middleware.ExceptionMiddleware: Error processing request: Token is required. URL GET /socket.
jellyfin-1  | [02:11:41.492] [ERR] [23] Jellyfin.Api.Middleware.ExceptionMiddleware: Error processing request: Token is required. URL GET /socket.

Raw manifest

{
  "schema_version": "1.0",
  "verification_id": "jellyfin-v12.1-20260915-001",
  "app": "jellyfin",
  "app_version": "v12.1",
  "release": {
    "source_repo": "jellyfin/jellyfin",
    "source_revision": "ee91c75e777da41a9c4f4855e70adc604fbf2ef8",
    "release_tag": "v12.1",
    "upstream_tag": "v12.1",
    "image_reference": "jellyfin/jellyfin:12.1"
  },
  "container": {
    "image": "jellyfin/jellyfin:12.1",
    "digest": "sha256:326be1010b16c92e492f6c7dd6fd105943db84ce723c73183279a1ab357b8f9b",
    "manifest_digest": "sha256:78d3ea1207d1322471fcac39a614f004f2ccf7e878f95ab2977d752f07e4dd7e",
    "platform": "linux/amd64"
  },
  "platform": {
    "platform_verification_id": "plat-us-east-1-x86_64-20260909-001",
    "ami_id": "ami-025d99823a4caad37",
    "base_ami_source": "public",
    "source_ami_name": "ubuntu/images/hvm-ssd-gp3/ubuntu-noble-24.04-amd64-server-*",
    "region": "us-east-1",
    "architecture": "x86_64"
  },
  "config": {
    "app_config_revision": "e0d620bc1b593b880fa9b35662644c29afb325c6",
    "compose_revision": "cb6224fdbc5a2500a809a1ae10bfe2a62689e2dd",
    "tests_revision": "4136a9fc8de221b57a8878a17ae7ecd5de3f5cb1"
  },
  "verification": {
    "application": "passed",
    "platform": "referenced",
    "tests": "passed"
  },
  "checks": {
    "compose_started": true,
    "container_healthy": true,
    "health_check_passed": true,
    "tests_passed": true,
    "screenshots_generated": true,
    "screenshots_uploaded": false,
    "report_uploaded": false,
    "verification_manifest_uploaded": false,
    "required_platform_contract_valid": true
  },
  "artifacts": {
    "screenshots": [
      {
        "scenario": "wizard",
        "file": "wizard.png",
        "url": "https://pub-7abe6acc470447c0a101cc20ce10ceee.r2.dev/screenshots/jellyfin/v12.1/wizard.png",
        "caption": {
          "en": "Startup wizard",
          "zh": "初始化向导"
        }
      }
    ],
    "report_url": "",
    "workflow_run_url": "https://github.com/CoreNovaLabs/CoreNovaLaunchVerify/actions/runs/34920147114"
  },
  "website": {
    "app": "jellyfin",
    "app_version": "v12.1",
    "verification_id": "jellyfin-v12.1-20260915-001",
    "verification_run_id": "34920147114",
    "platform_verification_id": "plat-us-east-1-x86_64-20260909-001",
    "ami_id": "ami-025d99823a4caad37",
    "architecture": "x86_64",
    "region": "us-east-1",
    "display_name": {
      "en": "Jellyfin",
      "zh": "Jellyfin 媒体中心"
    },
    "description": {
      "en": "Free software media system: stream movies, shows and music to any device",
      "zh": "免费开源的流媒体服务,把影音库串流到任何设备"
    },
    "category": "media",
    "icon": "/icons/jellyfin.svg",
    "featured": true,
    "tags": [
      "media",
      "streaming",
      "plex-alternative"
    ],
    "features": [
      {
        "en": "Stream to browsers, TVs and mobile apps (Jellyfin clients)",
        "zh": "串流到浏览器、电视与移动客户端"
      },
      {
        "en": "Movies, shows, music and books with metadata and subtitles",
        "zh": "电影、剧集、音乐与书籍,含元数据与字幕"
      },
      {
        "en": "No accounts or tracking required; fully self-hosted",
        "zh": "无需账号与追踪,完全自托管"
      }
    ],
    "health": "passed",
    "status": "pending",
    "verified_at": "2026-09-15T02:11:42Z",
    "report_url": "",
    "workflow_run_url": "https://github.com/CoreNovaLabs/CoreNovaLaunchVerify/actions/runs/34920147114",
    "screenshots_order": [
      "wizard"
    ],
    "deploy": {
      "documentation_url": "https://jellyfin.org/docs",
      "regions": [
        "us-east-1"
      ],
      "instance_type": "t3.medium",
      "data_volume_gb": 60,
      "container_port": 8096,
      "health_check_path": "/health",
      "docker_image": "jellyfin/jellyfin:12.1",
      "extra_environment": [],
      "post_deploy": {
        "admin_path": "/",
        "admin_setup": {
          "en": "First visit opens the startup wizard: set language, user account and library folders in the form. There are no preset credentials.",
          "zh": "首次访问进入初始化向导:在表单中设置语言、用户账户与媒体库目录;没有预置账号密码。"
        },
        "notes": [
          {
            "en": "Media files should be mounted/uploaded to the media volume (/media); empty installs ship no content.",
            "zh": "媒体文件需挂载/上传到媒体卷(/media);空装实例不含任何内容。"
          },
          {
            "en": "Jellyfin benefits from ~1 GB+ RAM; the CFN 'medium' profile (t3.medium) is recommended for transcoding.",
            "zh": "Jellyfin 建议 ~1GB 以上内存;如需转码推荐 CFN 'medium' 档(t3.medium)。"
          },
          {
            "en": "Config and cache live on a retained volume (/config). It keeps billing after stack deletion; snapshot it, then delete the volume when no longer needed.",
            "zh": "配置与缓存保存在保留数据卷(/config)中。删除栈后该卷仍会计费;请先创建快照,不再需要时再删除卷。"
          }
        ]
      },
      "cost_estimate": {
        "monthly_usd": 39,
        "note": {
          "en": "Verified default in us-east-1: ~$30.4 t3.medium + ~$2 for the 30 GB root and data gp3 volumes + $3.65 public IPv4 per month. Transcoding CPU/network usage is extra.",
          "zh": "us-east-1 已验证默认配置:t3.medium 约 $30.4/月 + 30GB 系统盘与数据盘 gp3 约 $2/月 + 公网 IPv4 约 $3.65/月;转码产生的 CPU/流量另计。"
        }
      },
      "data_path": "/config"
    },
    "release": {
      "type": "new_version",
      "previous_version": "v12.0",
      "type_evidence": "rule4: not semver-comparable to previous 'v12.0'"
    },
    "screenshots": [
      {
        "scenario": "wizard",
        "file": "wizard.png",
        "url": "https://pub-7abe6acc470447c0a101cc20ce10ceee.r2.dev/screenshots/jellyfin/v12.1/wizard.png",
        "caption": {
          "en": "Startup wizard",
          "zh": "初始化向导"
        }
      }
    ]
  },
  "verification_run_id": "34920147114",
  "verified_at": "2026-09-15T02:11:42Z"
}