Skip to content

v1.18.0

Choose a tag to compare

@ravirajsinh45 ravirajsinh45 released this 16 Oct 09:46
· 62 commits to main since this release
bbef753

Profile pictures, a choice of original or transcode on download, Projects page view options, larger upload parts with a Finalizing state and upload speed, and selection shortcuts. On NVIDIA GPUs, portrait phone videos now come out upright and very tall or wide videos no longer fail to transcode.

Upgrade notes

  • Three migrations add instance_settings.upload_part_size_bytes (default 0, automatic sizing; #483), users.avatar_color (everyone starts with no color, which looks the same as before; #487), and instance_settings.allow_original_downloads (default off) with share_link_activity.rendition (#493). (#483, #487, #493 by @jdanna)
  • Portrait phone videos already transcoded on an NVIDIA or Intel GPU stay sideways. The fix applies to new transcodes; upload an affected video again to get upright renditions. (#500)
  • Downloads can now be the original upload, not just the transcode, and that changes who can pull camera masters. Project members can pick Original from any Download menu. Everyone else (share-link visitors, including folder, project, multi-item, password and secure links; non-members of a public project; people an asset is shared with directly) still gets only the transcode, exactly as before, until an admin sets Admin Dashboard → Instance settings → Downloads to Original or transcode. With it off, ?rendition=original is refused for them with a 403. A video with no MP4 transcode still downloads its master, as it always has. Bulk downloads follow the same setting for everyone, members included: downloading a selection on the project page, or Download All on a share link, fetches every asset's original when the setting is on and the transcode when it is off. Turning it on can raise storage egress considerably. (#493 by @jdanna)

Added

  • The uploads panel shows each upload's speed and time left, right-aligned on the line with its percentage. Speed is smoothed over the last few seconds and drops toward zero if the transfer stalls. (#483 by @jdanna)
  • Upload part size in Instance Settings. In Admin Dashboard → Instance settings, admins can keep Automatic sizing or cut every upload into a fixed part size from 5 to 512 MB. With a fixed size, a file that would need more than 10,000 parts is refused before anything is uploaded, with a message naming the largest file that size allows. (#483 by @jdanna)
  • Selection shortcuts on the project page. ⌘-A (Ctrl-A on Windows and Linux) selects every asset and folder shown. Shift-click selects every folder and asset between the last one you clicked and this one, and ⌘-click (Ctrl-click) adds a folder or asset to the selection or takes it out. Both add to what's already selected, and neither opens a folder or changes which asset the side panel shows. Shift-click on a checkbox selects a range too. Esc deselects everything, including the asset in the side panel. In a text field, dialog or menu, ⌘-A and Esc keep their usual meaning. (#488, #497 by @jdanna)
  • Choose what a download is: the original file or the transcode. The Download button on the project page, in share links and in the asset menus now opens a list with Original, the file exactly as uploaded, and the transcode where one exists: a video's MP4 (labelled with its resolution, such as 1080p), an audio file's MP3 or an image's WebP. Each entry shows its format and size. Only files that already exist are listed, and nothing new is transcoded. Project members always get both choices; for everyone else Original is listed only when an admin allows it in Admin Dashboard → Instance settings → Downloads (off by default). Bulk downloads (a selection on the project page, Download All on a share link) get originals when that setting is on and transcodes when it is off. An MP4 upload's MP4 transcode downloads with its resolution in the name (Portrait (720p).mp4) so the two don't collide, and share-link activity records which file each download was. The API adds GET /assets/{id}/downloads and GET /share/{token}/downloads/{asset_id} (rate-limited like opening a link), and rendition and prefer_original parameters on both stream endpoints. (#493 by @jdanna)
  • Press ? for a list of keyboard shortcuts. The panel existed but was never shown, and it listed several shortcuts that did nothing (⌘/, M, F, C and the N/G sequences). It now opens from any signed-in page and lists only shortcuts that work. (#488 by @jdanna)
  • Appearance and sort menus on the Projects page. Choose grid or list, and in grid a small, medium or large card size and whether cards show their info row. Sort projects by date created or by name, as you can inside a project. Your choices are saved to your account, so the page opens the way you left it on any device; it used to reset to the grid every visit. (#485 by @jdanna)
  • Profile pictures. Upload, replace or remove one under Settings → Profile. The picture is cropped to a square and scaled down to 256px in the browser before it's uploaded, so a phone photo doesn't become a multi-megabyte download on every comment. It shows wherever you appear: comments and replies (including on share links), timeline comment markers, the compare view, assignees, project members, the sidebar, Admin → Users, and the top bar of a folder share link you open while signed in. Deleting a user removes their picture. A refetch no longer makes pictures flash back to initials. Comments and markers used to show initials only, even for someone who had a picture. (#487 by @jdanna)
  • A circle color for people without a picture. It's set under Settings → Profile, next to the picture, and replaces the default color behind your initials everywhere they're shown. Reset goes back to the default. (#487 by @jdanna)

Changed

  • Large uploads are cut into fewer, larger parts. Every upload used to go up in 10 MB parts, so a 50 GB file was 5,000 of them, and completing an upload makes the storage backend read back and assemble every part. Files up to about 5 GB still use 10 MB parts; bigger files now get parts sized to hold about 500, up to 256 MB each. The largest file an upload can hold rises from about 97.7 GB to about 2.4 TB. Uploads already in progress keep the size they started with. (#483 by @jdanna)
  • The share dialog stays open after you create a link. It used to close at once, so you had to find the new link in the Share Links table. Now Create turns into a Copy button in the same spot, so you can click Create and then Copy without moving the mouse. Copy confirms with "Copied!". The link, Copy and Close (in place of Back) sit on one line, and the settings lock because they've already been applied. The dialog doesn't change size, so nothing shifts. (#494 by @jdanna)
  • The project's Share Links list is newest first. It had no defined order before. The /projects/{id}/share-links response now includes each link's created_at. (#494 by @jdanna)

Fixed

  • An upload that has sent every byte says "Finalizing" instead of sitting at "Uploading 95%". The storage backend can take minutes to assemble a large upload, which read as a hung upload. Cancel is hidden for that stretch, since there is nothing left for it to stop, and comes back if a part fails and has to be sent again. The API also logs any completion that takes 5 seconds or more, split into listing, assembling and finishing time. (#483 by @jdanna)
  • Prev/next in the asset viewer stays in the asset's folder and follows your sort order. It used to step through every asset in the project, in whatever order the server returned them, so from inside a folder it jumped out into other folders. It now walks the same list the project view shows for that folder (or the project's top level), in the view's current sort, and the "2 of 7" count matches it. (#495 by @jdanna)
  • Anamorphic videos get correctly proportioned thumbnails. The poster frame was saved at the source's storage size, and JPEG keeps no pixel aspect a browser honours, so a 1440x1080 HDV clip or a 2x-squeezed scope master came out squeezed. Thumbnails are now scaled to square pixels and fit within 1280x1280, keeping the clip's own shape, so a 4K source no longer makes a 4K JPEG. Existing thumbnails change only when the asset is transcoded again. (#478, #480 by @jdanna)
  • Projects without a poster show their colour gradient instead of a plain grey card. The gradient classes live in lib/, which Tailwind did not scan, so seven of the eight presets were never generated. (#480 by @jdanna)
  • Videos you open after watching another start in Auto at the quality your connection carried. Before its first segment loads, the player guesses your bandwidth from the top rendition, capped at 5 Mbps. Whenever a rung peaks above that, playback began below it and climbed only after a few seconds, even on a link that could carry it. It now starts from the bandwidth this browser measured on a playback in the last day, capped at 20 Mbps. The first video in a browser starts as before. (#486 by @jdanna)
  • Sorting by date says Newest or Oldest instead of Z-A or A-Z. The sort menu inside a project labelled the date direction as if it were alphabetical. (#485 by @jdanna)
  • Picking a sort inside a project starts it in a sensible direction. Date starts newest first and everything else A-Z; switching from Date to Name used to carry the direction over and list names Z-A. (#485 by @jdanna)
  • Sorting by name orders numbers by value. "Shot 2" now comes before "Shot 10". (#485 by @jdanna)
  • The share links list shows each link's own title. Asset and folder links were listed under the name of the asset or folder they share, so a link you had named "Client cut" on a folder called "F" showed up as "F", and searching for it by its name found the right row under the wrong label. Project links were not affected. (#498)
  • A share link set to expire on a date lasts to the end of that day, in your time zone. The picked date was read as midnight UTC, so west of UTC a link expired the evening before (picking 20 October in New York ended it at 8:00 PM on the 19th for a single item, 11:59 PM on the 19th for several), and east of UTC a single-item link expired in the early morning of the day itself. Every place you set an expiry now uses the same rule, and the date field shows the day you picked rather than the UTC one. Links saved before this keep the moment they were stored with, so one may now show the day before the date you picked. (#498)
  • Copying a share link over plain HTTP copies the link. On an instance served without HTTPS (a LAN address, for example) the browser has no clipboard API, and the fallback copied whatever was selected. Inside the share dialog the dialog took focus back before the copy ran, so the button said "Copied!" while the clipboard got nothing. The fallback now hands the browser the text directly, and says "Failed" when the copy did not happen. (#498)
  • A new share link for an asset, a folder or the whole project is created with its settings in one step. The dialog created the link first and applied its passphrase, expiry, visibility and permissions in a second request, so if that request failed the link was already live without them, for example open to anyone with the URL and no passphrase. Multi-item links already worked this way. (#498)
  • Tall portrait and very wide videos transcode on NVIDIA GPUs. On an NVENC host, a video narrower than about 0.4:1 (720x1920, or a 904x2316 phone cover-screen recording) or wider than about 13:1 (8000x480) failed to transcode, though a CPU-only host handled it. Its 360p rendition came out smaller than the GPU's H.264 encoder accepts (146x50), and that error did not fall back to software. Such a rendition is now made just big enough for the encoder, in the video's own shape, so the job stays on the GPU: a 720x1920 video's 360p rendition is 146x390 instead of 136x360. Any rendition NVENC still refuses, such as one smaller than that in a tiny source or wider than 4096 pixels, is now encoded in software instead of failing the asset. HEVC output (TRANSCODER_OUTPUT=h265_10) failed the same way below about 0.36:1 and is fixed the same way. (#477, #499)
  • Portrait phone videos come out upright on NVIDIA and Intel GPUs. A phone records portrait video as landscape frames plus an instruction to turn them, and ffmpeg only turns frames that are in system memory. On an NVENC or VAAPI host the GPU decoder kept its frames on the GPU, so a portrait clip got landscape renditions lying on their side (upside down for a clip shot the other way up), and its download came out the same, next to an upright thumbnail. On NVIDIA such a video is still decoded on the GPU, but its frames now pass through system memory to be turned before the GPU scales and encodes them, which costs a little CPU. On Intel, which we could not test, it is decoded on the CPU and still scaled and encoded on the GPU. Videos without a rotation, and CPU-only hosts, are unchanged. Videos transcoded before this fix keep their sideways renditions until they are uploaded again. (#500)

Contributors

Thank you to @jdanna for the pull requests in this release and for reporting #478, and to @Paracid for the request in #462 that the original-download option answers.