Acknowledgment
Is this related to TrueNAS?
No
TrueNAS forum post link
No response
Describe the bug
Cropping videos through Fireshare’s UI intermittently results in a playback error:
MEDIA_ELEMENT_ERROR: Format error
Screenshot attached. Refreshing the page allows the cropped video to play as expected.
The issue seems more likely to occur when cropping a freshly uploaded video, although I haven’t established a consistent trigger.
During failed attempts, the server logs show FFmpeg successfully creating the cropped MP4 and generating its poster, followed immediately by nginx reporting “No such file or directory” when serving the crop.
I observed failures with 10-bit AV1 videos at both 1080p and 1440p. An H.264 crop worked during the same session, but I haven’t established whether the issue depends on codec.
To Reproduce
- Upload a video and open it in Fireshare.
- Shortly after uploading, apply a crop through the UI.
- Attempt to play the cropped video.
- Occasionally, the player displays a format error and playback fails.
- Refresh the page—the cropped video then plays as expected.
Expected behavior
The cropped video should play once processing completes without requiring a page refresh.
Screenshots
Fireshare version
Fireshare v1.8.4-lite
Browser
Brave
Additional context
Environment
- Fireshare v1.8.4-lite
- Kubernetes: one StatefulSet replica, one container
- ARM64
- FFmpeg 5.1.9 (Debian)
- Persistent LINSTOR block-storage PVC mounted at
/processed
- Traefik reverse proxy
ENABLE_TRANSCODING=false
Logs excerpt
First attempt: 1080p, 10-bit AV1 with Opus audio
[2026-09-29 11:31:24,125] DEBUG in util: $ ffmpeg -y -ss 11.28 -i /processed/video_links/3b36deb002104f709fa67f6270bc3db6.mp4 -c copy -movflags +faststart /processed/derived/3b36deb002104f709fa67f6270bc3db6/3b36deb002104f709fa67f6270bc3db6-cropped.mp4
[libdav1d @ 0xc2ac573e5e10] libdav1d 1.0.0
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/processed/video_links/3b36deb002104f709fa67f6270bc3db6.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso6av01iso2mp41
encoder : Lavf63.1.100
Duration: 00:00:54.44, start: 0.000000, bitrate: 15070 kb/s
Stream #0:0[0x1](und): Video: av1 (Main) (av01 / 0x31307661), yuv420p10le(tv, bt709), 1920x1080, 14956 kb/s, 60 fps, 60 tbr, 1000k tbn (default)
Stream #0:1[0x2](und): Audio: opus (Opus / 0x7375704F), 48000 Hz, stereo, fltp, 119 kb/s (default)
[mp4 @ 0xc2ac574b7bd0] track 1: codec frame size is not set
Output #0, mp4, to '/processed/derived/3b36deb002104f709fa67f6270bc3db6/3b36deb002104f709fa67f6270bc3db6-cropped.mp4':
Stream #0:0(und): Video: av1 (Main) (av01 / 0x31307661), yuv420p10le(tv, bt709), 1920x1080, q=2-31, 14956 kb/s, 60 fps, 60 tbr, 1000k tbn (default)
Stream #0:1(und): Audio: opus (Opus / 0x7375704F), 48000 Hz, stereo, fltp, 119 kb/s (default)
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
[mp4 @ 0xc2ac574b7bd0] Starting second pass: moving the moov atom to the beginning of the file
frame= 2662 fps=0.0 q=-1.0 Lsize= 82028kB time=00:00:43.14 bitrate=15576.6kbits/s speed= 347x
video:81316kB audio:645kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.081810%
2026-09-29 11:31:24,396 INFO util.create_video_crop:401 | Created crop /processed/derived/3b36deb002104f709fa67f6270bc3db6/3b36deb002104f709fa67f6270bc3db6-cropped.mp4 (start=11.28, end=None)
[2026-09-29 11:31:24,415] DEBUG in util: $ ffmpeg -v quiet -y -ss 0 -i /processed/derived/3b36deb002104f709fa67f6270bc3db6/3b36deb002104f709fa67f6270bc3db6-cropped.mp4 -vframes 1 -vf scale=iw:ih:force_original_aspect_ratio=decrease /processed/derived/3b36deb002104f709fa67f6270bc3db6/poster.jpg
[2026-09-29 11:31:25,393] DEBUG in util: Generated poster /processed/derived/3b36deb002104f709fa67f6270bc3db6/poster.jpg in 0.9779472351074219s (success=True)
2026/09/29 11:31:26 [error] 43#43: *8621 open() "/processed/derived/3b36deb002104f709fa67f6270bc3db6/3b36deb002104f709fa67f6270bc3db6-cropped.mp4" failed (2: No such file or directory) while sending to client, client: 10.200.2.92, server: _, request: "GET /_content/derived/3b36deb002104f709fa67f6270bc3db6/3b36deb002104f709fa67f6270bc3db6-cropped.mp4 HTTP/1.1", host: "clips.shednet.dev", referrer: "https://clips.shednet.dev/home"
2026/09/29 11:31:33 [error] 46#46: *8625 open() "/processed/derived/3b36deb002104f709fa67f6270bc3db6/3b36deb002104f709fa67f6270bc3db6-cropped.mp4" failed (2: No such file or directory) while sending to client, client: 10.200.2.92, server: _, request: "GET /_content/derived/3b36deb002104f709fa67f6270bc3db6/3b36deb002104f709fa67f6270bc3db6-cropped.mp4 HTTP/1.1", host: "clips.shednet.dev", referrer: "https://clips.shednet.dev/home"
2026/09/29 11:32:04 [alert] 43#43: *8648 sendfile() reported that "/processed/derived/3b36deb002104f709fa67f6270bc3db6/poster.jpg" was truncated at 136103 while sending response to client, client: 10.200.2.92, server: _, request: "GET /_content/derived/3b36deb002104f709fa67f6270bc3db6/poster.jpg HTTP/1.1", host: "clips.shednet.dev"
Second attempt: 1440p, 10-bit AV1 with Opus audio
[2026-09-29 11:42:00,854] DEBUG in util: $ ffmpeg -y -ss 35.47 -i /processed/video_links/40995b8bcfcfa2425282067f789a7298.mp4 -c copy -movflags +faststart /processed/derived/40995b8bcfcfa2425282067f789a7298/40995b8bcfcfa2425282067f789a7298-cropped.mp4
[libdav1d @ 0xb980a9fade10] libdav1d 1.0.0
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/processed/video_links/40995b8bcfcfa2425282067f789a7298.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso6av01iso2mp41
encoder : Lavf63.1.100
Duration: 00:01:01.57, start: 0.000000, bitrate: 14126 kb/s
Stream #0:0[0x1](und): Video: av1 (Main) (av01 / 0x31307661), yuv420p10le(tv, bt709), 2560x1440, 13992 kb/s, 60 fps, 60 tbr, 1000k tbn (default)
Stream #0:1[0x2](und): Audio: opus (Opus / 0x7375704F), 48000 Hz, stereo, fltp, 119 kb/s (default)
[mp4 @ 0xb980a9fb0980] track 1: codec frame size is not set
Output #0, mp4, to '/processed/derived/40995b8bcfcfa2425282067f789a7298/40995b8bcfcfa2425282067f789a7298-cropped.mp4':
Stream #0:0(und): Video: av1 (Main) (av01 / 0x31307661), yuv420p10le(tv, bt709), 2560x1440, q=2-31, 13992 kb/s, 60 fps, 60 tbr, 1000k tbn (default)
Stream #0:1(und): Audio: opus (Opus / 0x7375704F), 48000 Hz, stereo, fltp, 119 kb/s (default)
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
[mp4 @ 0xb980a9fb0980] Starting second pass: moving the moov atom to the beginning of the file
frame= 1654 fps=0.0 q=-1.0 Lsize= 50166kB time=00:00:26.08 bitrate=15757.5kbits/s speed= 381x
video:49710kB audio:414kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.083955%
[2026-09-29 11:42:01,070] INFO in util: Created crop /processed/derived/40995b8bcfcfa2425282067f789a7298/40995b8bcfcfa2425282067f789a7298-cropped.mp4 (start=35.47, end=None)
[2026-09-29 11:42:01,089] DEBUG in util: $ ffmpeg -v quiet -y -ss 0 -i /processed/derived/40995b8bcfcfa2425282067f789a7298/40995b8bcfcfa2425282067f789a7298-cropped.mp4 -vframes 1 -vf scale=iw:ih:force_original_aspect_ratio=decrease /processed/derived/40995b8bcfcfa2425282067f789a7298/poster.jpg
[2026-09-29 11:42:02,460] DEBUG in util: Generated poster /processed/derived/40995b8bcfcfa2425282067f789a7298/poster.jpg in 1.3708710670471191s (success=True)
2026/09/29 11:42:02 [error] 44#44: *8922 open() "/processed/derived/40995b8bcfcfa2425282067f789a7298/40995b8bcfcfa2425282067f789a7298-cropped.mp4" failed (2: No such file or directory) while sending to client, client: 10.200.2.92, server: _, request: "GET /_content/derived/40995b8bcfcfa2425282067f789a7298/40995b8bcfcfa2425282067f789a7298-cropped.mp4 HTTP/1.1", host: "clips.shednet.dev", referrer: "https://clips.shednet.dev/home"
Workaround tested
I changed this directive in the running container’s nginx configuration:
open_file_cache max=10000 inactive=60s;
to:
Then ran nginx -t and nginx -s reload. Cropping and playback appear to work afterward.
Possible explanation
The bundled configuration also contains:
open_file_cache_valid 120s;
open_file_cache_errors on;
The video route checks for a cropped file using try_files before falling back to the original. Could nginx cache a missing-file lookup before the crop is created and continue using it afterward?
I haven’t confirmed nginx’s cache state during the failures or checked the file directly while nginx was reporting it missing. I also don’t know why the H.264 attempt worked while the AV1 attempts failed.
Acknowledgment
Is this related to TrueNAS?
No
TrueNAS forum post link
No response
Describe the bug
Cropping videos through Fireshare’s UI intermittently results in a playback error:
Screenshot attached. Refreshing the page allows the cropped video to play as expected.
The issue seems more likely to occur when cropping a freshly uploaded video, although I haven’t established a consistent trigger.
During failed attempts, the server logs show FFmpeg successfully creating the cropped MP4 and generating its poster, followed immediately by nginx reporting “No such file or directory” when serving the crop.
I observed failures with 10-bit AV1 videos at both 1080p and 1440p. An H.264 crop worked during the same session, but I haven’t established whether the issue depends on codec.
To Reproduce
Expected behavior
The cropped video should play once processing completes without requiring a page refresh.
Screenshots
Fireshare version
Fireshare v1.8.4-lite
Browser
Brave
Additional context
Environment
/processedENABLE_TRANSCODING=falseLogs excerpt
First attempt: 1080p, 10-bit AV1 with Opus audio
Second attempt: 1440p, 10-bit AV1 with Opus audio
Workaround tested
I changed this directive in the running container’s nginx configuration:
to:
Then ran
nginx -tandnginx -s reload. Cropping and playback appear to work afterward.Possible explanation
The bundled configuration also contains:
The video route checks for a cropped file using
try_filesbefore falling back to the original. Could nginx cache a missing-file lookup before the crop is created and continue using it afterward?I haven’t confirmed nginx’s cache state during the failures or checked the file directly while nginx was reporting it missing. I also don’t know why the H.264 attempt worked while the AV1 attempts failed.