1- import { memo , useState , useRef , useEffect , useCallback } from "react" ;
1+ import { memo , useState , useRef , useEffect } from "react" ;
22import { RenderQueueItem } from "./RenderQueueItem" ;
33import type { RenderJob , ResolutionPreset } from "./useRenderQueue" ;
4-
5- const RENDER_SETTINGS_KEY = "hf-studio-render-settings" ;
6-
7- interface PersistedRenderSettings {
8- format : "mp4" | "webm" | "mov" ;
9- quality : "draft" | "standard" | "high" ;
10- fps : 24 | 30 | 60 ;
11- }
12-
13- export function getPersistedRenderSettings ( ) : PersistedRenderSettings {
14- try {
15- const raw = localStorage . getItem ( RENDER_SETTINGS_KEY ) ;
16- if ( raw ) {
17- const parsed = JSON . parse ( raw ) ;
18- return {
19- format : [ "mp4" , "webm" , "mov" ] . includes ( parsed . format ) ? parsed . format : "mp4" ,
20- quality : [ "draft" , "standard" , "high" ] . includes ( parsed . quality )
21- ? parsed . quality
22- : "standard" ,
23- fps : [ 24 , 30 , 60 ] . includes ( parsed . fps ) ? parsed . fps : 30 ,
24- } ;
25- }
26- } catch {
27- /* ignore */
28- }
29- return { format : "mp4" , quality : "standard" , fps : 30 } ;
30- }
4+ import { getPersistedRenderSettings , persistRenderSettings } from "./renderSettings" ;
315
326export interface CompositionDimensions {
337 width : number ;
@@ -231,14 +205,6 @@ function FormatExportButton({
231205 const [ resolution , setResolution ] = useState < ResolutionPreset | "auto" > ( "auto" ) ;
232206 const [ fps , setFps ] = useState < 24 | 30 | 60 > ( persisted . fps ) ;
233207
234- const persistSettings = useCallback ( ( f : typeof format , q : typeof quality , fp : typeof fps ) => {
235- try {
236- localStorage . setItem ( RENDER_SETTINGS_KEY , JSON . stringify ( { format : f , quality : q , fps : fp } ) ) ;
237- } catch {
238- /* ignore */
239- }
240- } , [ ] ) ;
241-
242208 // MOV (ProRes) is a fixed-quality codec — quality selector has no effect.
243209 const showQuality = format !== "mov" ;
244210
@@ -267,7 +233,7 @@ function FormatExportButton({
267233 onChange = { ( e ) => {
268234 const v = e . target . value as "draft" | "standard" | "high" ;
269235 setQuality ( v ) ;
270- persistSettings ( format , v , fps ) ;
236+ persistRenderSettings ( format , v , fps ) ;
271237 } }
272238 disabled = { isRendering }
273239 title = { QUALITY_OPTIONS . find ( ( q ) => q . value === quality ) ?. title }
@@ -285,7 +251,7 @@ function FormatExportButton({
285251 onChange = { ( e ) => {
286252 const v = Number ( e . target . value ) as 24 | 30 | 60 ;
287253 setFps ( v ) ;
288- persistSettings ( format , quality , v ) ;
254+ persistRenderSettings ( format , quality , v ) ;
289255 } }
290256 disabled = { isRendering }
291257 title = "Frames per second"
@@ -300,7 +266,7 @@ function FormatExportButton({
300266 onChange = { ( e ) => {
301267 const v = e . target . value as "mp4" | "webm" | "mov" ;
302268 setFormat ( v ) ;
303- persistSettings ( v , quality , fps ) ;
269+ persistRenderSettings ( v , quality , fps ) ;
304270 } }
305271 disabled = { isRendering }
306272 className = "h-5 px-1 text-[10px] bg-neutral-800 border border-neutral-700 text-neutral-300 outline-none disabled:opacity-50"
0 commit comments