Files
oak-editor/assets/i18n/en-US.yaml
T
Mike-Solar 29204d1f63 node: virtual graph endpoints and the Kahn-order BFS sweep (M0b core)
Per docs/zh/plans/render-pipeline-threads.md §3.8:

- oak-node/nodes/graphendpoints.rs: the GraphInput/GraphOutput
  virtual node pair — factory-registered but hidden from every create
  menu, duplicate refused, real value() semantics (the input forwards
  its feed_in row, the output publishes its tex_in as the frame).
  The input endpoint also declares a connectable feed_in port
  (documented deviation: footage/generator sources have no connectable
  inputs, so the walk needs a feeder anchor).
- graph.rs: ensure_endpoints/endpoints/is_endpoint — idempotent,
  identified by type id, default input->output edge only while the
  output's tex_in is free; remove_node refuses endpoints.
- project.rs + serializer.rs: every project graph carries the pair;
  a legacy file without endpoints migrates on load (roundtrip and
  legacy-migration tests, re-save is idempotent).
- traverser.rs: eval_graph_bfs — the endpoint-to-endpoint Kahn
  sweep. Live set = (input's forward cone U its feeder cone) INTERSECT
  (output's backward cone); multi-input nodes dequeue at zero
  in-degree over the live subgraph; deterministic ascending-id ready
  order (Graph::edges is a BTreeSet, so insertion order is
  unrecoverable — documented); time-shifted upstreams pull through
  the shared DFS memo (walk_dfs, factored out of evaluate);
  un-orderable remainder reports a named cycle; missing endpoints /
  unreachable output are errors. Eight BFS tests cover the plan's
  acceptance bullets.
- oak-render: bfs_endpoint_sweep_renders_footage_through_position —
  real clip through a real Position node via the sweep, shifted
  pixels asserted against a reference decode.
- Endpoint names localized in all eight i18n packs; storage/structure
  tests updated for the two extra nodes.
2026-09-11 15:13:53 +08:00

903 lines
38 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Oak Video Editor UI strings — English (en-US)
# Format: "i18n.key": "Translated text". Add new languages as new files named <lang>.yaml.
"language.name": "English"
"menu.file": "File(F)"
"menu.edit": "Edit(E)"
"menu.view": "View(V)"
"menu.playback": "Playback(P)"
"menu.sequence": "Sequence(S)"
"menu.window": "Window(W)"
"menu.tools": "Tools(T)"
"menu.help": "Help(H)"
"menu.file.new": "New"
"menu.file.new_project": "New Project…"
"menu.file.new_sequence": "New Sequence…"
"menu.file.new_folder": "New Folder"
"menu.file.open_project": "Open Project File…"
"menu.file.open_library": "Open from Library…"
"menu.file.open_recent": "Open Recent"
"menu.file.clear_recent": "Clear Recent List"
"menu.file.project_manager": "Project Manager…"
"menu.file.import_footage": "Import Footage…"
"menu.file.export_project": "Export Project File…"
"menu.file.save_as": "Save As…"
"menu.file.revert": "Revert"
"menu.file.export_media": "Export Sequence…"
"menu.file.project_properties": "Project Properties…"
"menu.file.close": "Close Project"
"menu.file.quit": "Quit"
"menu.edit.undo": "Undo"
"menu.edit.redo": "Redo"
"menu.edit.cut": "Cut"
"menu.edit.copy": "Copy"
"menu.edit.paste": "Paste"
"menu.edit.paste_insert": "Paste Insert"
"menu.edit.duplicate": "Duplicate"
"menu.edit.rename": "Rename"
"menu.edit.delete": "Delete"
"menu.edit.ripple_delete": "Ripple Delete"
"menu.edit.split": "Split at Playhead"
"menu.edit.speed_duration": "Speed/Duration…"
"menu.edit.default_transition": "Set as Default Transition"
"menu.edit.link_unlink": "Link/Unlink"
"menu.edit.enable_disable": "Enable/Disable"
"menu.edit.nest": "Nest"
"menu.edit.select_all": "Select All"
"menu.edit.deselect_all": "Deselect All"
"menu.edit.insert": "Insert"
"menu.edit.overwrite": "Overwrite"
"menu.edit.ripple_to_in": "Ripple to In"
"menu.edit.ripple_to_out": "Ripple to Out"
"menu.edit.edit_to_in": "Edit to In"
"menu.edit.edit_to_out": "Edit to Out"
"menu.edit.nudge_left": "Nudge Left"
"menu.edit.nudge_right": "Nudge Right"
"menu.edit.move_in_to_playhead": "Move In Point to Playhead"
"menu.edit.move_out_to_playhead": "Move Out Point to Playhead"
"menu.edit.set_in_point": "Set In Point"
"menu.edit.set_out_point": "Set Out Point"
"menu.edit.reset_in": "Reset In Point"
"menu.edit.reset_out": "Reset Out Point"
"menu.edit.clear_in_out": "Clear In/Out"
"menu.edit.delete_in_out": "Delete In to Out"
"menu.edit.ripple_delete_in_out": "Ripple Delete In to Out"
"menu.edit.marker": "Add Marker"
"menu.view.theme": "Theme"
"menu.view.theme.dark": "Olive Dark"
"menu.view.theme.light": "Olive Light"
"menu.view.language": "Language"
"menu.view.zoom_in": "Zoom In"
"menu.view.zoom_out": "Zoom Out"
"menu.view.increase_track_height": "Increase Track Height"
"menu.view.decrease_track_height": "Decrease Track Height"
"menu.view.show_all": "Show All Tracks"
"menu.view.full_screen": "Full Screen"
"menu.view.full_screen_viewer": "Full Screen Viewer"
"menu.view.preferences": "Preferences…"
"menu.playback.play_pause": "Play/Pause"
"menu.playback.play_in_to_out": "Play In to Out"
"menu.playback.loop": "Loop"
"menu.playback.shuttle_left": "Shuttle Left"
"menu.playback.shuttle_stop": "Shuttle Stop"
"menu.playback.shuttle_right": "Shuttle Right"
"menu.playback.prev_frame": "Previous Frame"
"menu.playback.next_frame": "Next Frame"
"menu.playback.to_start": "Jump to Sequence Start"
"menu.playback.go_to_end": "Jump to Sequence End"
"menu.playback.prev_cut": "Go to Previous Cut"
"menu.playback.next_cut": "Go to Next Cut"
"menu.playback.go_to_in": "Go to In Point"
"menu.playback.go_to_out": "Go to Out Point"
"menu.sequence.add_video_track": "Add Video Track"
"menu.sequence.add_audio_track": "Add Audio Track"
"menu.sequence.remove_track": "Remove Selected Track"
"menu.sequence.remove_marker": "Remove Marker"
"menu.sequence.set_workarea": "Set Work Area"
"menu.sequence.clear_workarea": "Clear Work Area"
"menu.sequence.cache": "Render Cache"
"menu.sequence.cache_in_out": "Render Cache In to Out"
"menu.sequence.cache_clear": "Clear Render Cache"
"menu.sequence.settings": "Sequence Settings…"
"menu.window.project": "Project"
"menu.window.source_viewer": "Source Viewer"
"menu.window.program_viewer": "Program Viewer"
"menu.window.node_editor": "Node Editor"
"menu.window.inspector": "Inspector"
"menu.window.history": "History"
"menu.window.timeline": "Timeline"
"menu.window.effect_library": "Effect Library"
"menu.window.multicam": "Multi-Cam"
"menu.window.maximize_panel": "Maximize Panel"
"menu.window.reset_layout": "Reset Layout"
"menu.tools.pointer": "Pointer"
"menu.tools.track_select": "Track Select"
"menu.tools.edit": "Edit"
"menu.tools.ripple": "Ripple"
"menu.tools.rolling": "Rolling"
"menu.tools.razor_tool": "Blade"
"menu.tools.slip": "Slip"
"menu.tools.slide": "Slide"
"menu.tools.hand": "Hand"
"menu.tools.zoom_tool": "Zoom"
"menu.tools.transition": "Transition"
"menu.tools.add": "Add"
"menu.tools.record": "Record"
"menu.tools.addable.empty": "Empty Clip"
"menu.tools.addable.bars": "Color Bars"
"menu.tools.addable.shape": "Shape"
"menu.tools.addable.solid": "Solid"
"menu.tools.addable.title": "Title"
"menu.tools.addable.tone": "Test Tone"
"menu.tools.addable.subtitle": "Subtitle"
"menu.tools.snapping": "Snapping"
"menu.tools.use_proxy": "Use Proxy Media"
"menu.tools.proxy_settings": "Proxy Settings…"
"menu.help.action_search": "Search Actions…"
"menu.help.feedback": "Send Feedback…"
"menu.help.about": "About Oak…"
"shortcut.space": "Space"
"panel.project": "Project"
"panel.source_viewer": "Source Viewer"
"panel.program_viewer": "Program Viewer"
"panel.node_editor": "Node Editor"
"panel.inspector": "Inspector"
"panel.history": "History"
"panel.timeline": "Timeline"
"panel.effect_library": "Effect Library"
"panel.multicam": "Multi-Cam"
"menu.sequence.multicam_wizard": "Multi-Cam Wizard"
"multicam.wizard.title": "Multi-Cam Wizard"
"multicam.wizard.default_name": "Multi-Cam"
"multicam.wizard.name": "Sequence Name"
"multicam.wizard.sync": "Sync Method"
"multicam.sync.audio": "Audio Waveform"
"multicam.sync.timecode": "Source Timecode"
"multicam.sync.none": "None (No Alignment)"
"multicam.wizard.angles_label": "Angles (select at least two):"
"multicam.wizard.no_footage": "No footage in the project to create a multicam from."
"multicam.wizard.need_two": "Select at least two angles."
"multicam.wizard.create": "Create"
"multicam.no_multicam": "No multi-camera clip detected"
"multicam.switch_1": "Switch to Camera 1"
"multicam.switch_2": "Switch to Camera 2"
"multicam.switch_3": "Switch to Camera 3"
"multicam.switch_4": "Switch to Camera 4"
"multicam.switch_5": "Switch to Camera 5"
"multicam.switch_6": "Switch to Camera 6"
"multicam.switch_7": "Switch to Camera 7"
"multicam.switch_8": "Switch to Camera 8"
"multicam.switch_9": "Switch to Camera 9"
"effect_library.hint": "Double-click to add to the selected clip"
"effect_library.group.builtin": "Built-in"
"effect_library.group.color": "Color"
"effect_library.group.filter": "Filter"
"effect_library.group.distort": "Distort"
"effect_library.group.keying": "Keying"
"effect_library.group.generator": "Generator"
"effect_library.group.math": "Math"
"effect_library.group.time": "Time"
"effect_library.group.channel": "Channel"
"effect_library.group.transition": "Transition"
"effect_library.group.general": "General"
# Built-in effect (node) and effect-parameter (input) names. The effect
# library and the inspector build these keys at runtime as
# `node.<type-id suffix>.name` and `node.<type-id suffix>.input.<input id>`.
"node.polygon.name": "Polygon"
"node.polygon.input.base_in": "Base"
"node.polygon.input.points_in": "Points"
"node.polygon.input.color_in": "Color"
"node.ortho.name": "Orthographic Matrix"
"node.ortho.input.pos_in": "Position"
"node.ortho.input.rot_in": "Rotation"
"node.ortho.input.scale_in": "Scale"
"node.ortho.input.uniform_scale_in": "Uniform Scale"
"node.ortho.input.anchor_in": "Anchor Point"
"node.transform.name": "Transform"
"node.transform.input.tex_in": "Texture"
"node.transform.input.parent_in": "Parent"
"node.transform.input.autoscale_in": "Auto-Scale"
"node.transform.input.interpolation_in": "Interpolation"
"node.transform.input.pos_in": "Position"
"node.transform.input.rot_in": "Rotation"
"node.transform.input.scale_in": "Scale"
"node.transform.input.uniform_scale_in": "Uniform Scale"
"node.transform.input.anchor_in": "Anchor Point"
"node.volume.name": "Volume"
"node.volume.input.samples_in": "Samples"
"node.volume.input.volume_in": "Volume"
"node.pan.name": "Pan"
"node.pan.input.samples_in": "Samples"
"node.pan.input.panning_in": "Pan"
"node.math.name": "Math"
"node.math.input.method_in": "Method"
"node.math.input.param_a_in": "Value"
"node.math.input.param_b_in": "Value"
"node.time.name": "Time"
"node.time.input.enabled_in": "Enabled"
"node.trigonometry.name": "Trigonometry"
"node.trigonometry.input.method_in": "Method"
"node.trigonometry.input.x_in": "Value"
"node.blur.name": "Blur"
"node.blur.input.tex_in": "Input"
"node.blur.input.method_in": "Method"
"node.blur.input.radius_in": "Radius"
"node.blur.input.horiz_in": "Horizontal"
"node.blur.input.vert_in": "Vertical"
"node.blur.input.directional_degrees_in": "Direction"
"node.blur.input.radial_center_in": "Center"
"node.blur.input.repeat_edge_pixels_in": "Repeat Edge Pixels"
"node.solidgenerator.name": "Solid"
"node.solidgenerator.input.color_in": "Color"
"node.merge.name": "Merge"
"node.merge.input.base_in": "Base"
"node.merge.input.blend_in": "Blend"
"node.stroke.name": "Stroke"
"node.stroke.input.tex_in": "Input"
"node.stroke.input.color_in": "Color"
"node.stroke.input.radius_in": "Radius"
"node.stroke.input.opacity_in": "Opacity"
"node.stroke.input.inner_in": "Inner"
"node.textgenerator.name": "Text (Legacy)"
"node.textgenerator.input.text_in": "Text"
"node.textgenerator.input.html_in": "Enable HTML"
"node.textgenerator.input.color_in": "Color"
"node.textgenerator.input.valign_in": "Vertical Align"
"node.textgenerator.input.font_in": "Font"
"node.textgenerator.input.font_size_in": "Font Size"
"node.text2.name": "Text (Legacy)"
"node.text2.input.base_in": "Base"
"node.text2.input.pos_in": "Position"
"node.text2.input.size_in": "Size"
"node.text2.input.color_in": "Color"
"node.text2.input.text_in": "Text"
"node.text2.input.html_in": "Enable HTML"
"node.text2.input.valign_in": "Vertical Align"
"node.text2.input.font_in": "Font"
"node.text2.input.font_size_in": "Font Size"
"node.text3.name": "Text"
"node.text3.input.base_in": "Base"
"node.text3.input.pos_in": "Position"
"node.text3.input.size_in": "Size"
"node.text3.input.plain_text_in": "Text"
"node.text3.input.text_in": "Text"
"node.text3.input.font_family_in": "Font Family"
"node.text3.input.font_size_in": "Font Size"
"node.text3.input.outline_enabled_in": "Outline"
"node.text3.input.outline_color_in": "Outline Color"
"node.text3.input.outline_width_in": "Outline Width"
"node.text3.input.glow_enabled_in": "Glow"
"node.text3.input.glow_color_in": "Glow Color"
"node.text3.input.glow_radius_in": "Glow Radius"
"node.text3.input.color_in": "Color"
"node.text3.input.valign_in": "Vertical Alignment"
"node.text3.input.args_in": "Arguments"
"node.mosaicfilter.name": "Mosaic"
"node.mosaicfilter.input.tex_in": "Texture"
"node.mosaicfilter.input.horiz_in": "Horizontal"
"node.mosaicfilter.input.vert_in": "Vertical"
"node.crop.name": "Crop"
"node.crop.input.tex_in": "Texture"
"node.crop.input.left_in": "Left"
"node.crop.input.top_in": "Top"
"node.crop.input.right_in": "Right"
"node.crop.input.bottom_in": "Bottom"
"node.crop.input.feather_in": "Feather"
"node.value.name": "Value"
"node.value.input.type_in": "Type"
"node.value.input.value_in": "Value"
"node.timeremap.name": "Time Remap"
"node.timeremap.input.time_in": "Time"
"node.timeremap.input.input_in": "Input"
"node.shape.name": "Shape"
"node.shape.input.type_in": "Type"
"node.shape.input.base_in": "Base"
"node.shape.input.pos_in": "Position"
"node.shape.input.size_in": "Size"
"node.shape.input.color_in": "Color"
"node.shape.input.radius_in": "Radius"
"node.colordifferencekey.name": "Color Difference Key"
"node.colordifferencekey.input.tex_in": "Input"
"node.colordifferencekey.input.garbage_in": "Garbage Matte"
"node.colordifferencekey.input.core_in": "Core Matte"
"node.colordifferencekey.input.color_in": "Key Color"
"node.colordifferencekey.input.highlights_in": "Highlights"
"node.colordifferencekey.input.shadows_in": "Shadows"
"node.colordifferencekey.input.mask_only_in": "Show Mask Only"
"node.despill.name": "Despill"
"node.despill.input.tex_in": "Input"
"node.despill.input.color_in": "Key Color"
"node.despill.input.method_in": "Method"
"node.despill.input.preserve_luminance_input": "Preserve Luminance"
"node.group.name": "Group"
"node.opacity.name": "Opacity"
"node.opacity.input.tex_in": "Texture"
"node.opacity.input.opacity_in": "Opacity"
"node.flip.name": "Flip"
"node.flip.input.tex_in": "Input"
"node.flip.input.horiz_in": "Horizontal"
"node.flip.input.vert_in": "Vertical"
"node.noise.name": "Noise"
"node.noise.input.base_in": "Base"
"node.noise.input.strength_in": "Strength"
"node.noise.input.color_in": "Color"
"node.timeoffset.name": "Time Offset"
"node.timeoffset.input.time_in": "Time"
"node.timeoffset.input.input_in": "Input"
"node.transition.name": "Transition"
"node.transition.input.tex_in": "From"
"node.transition.input.blend_in": "To"
"node.transition.input.progress_in": "Progress"
"node.transition.input.type_in": "Type"
"node.transitionfx.name": "Transition FX"
"node.transitionfx.input.tex_in": "From"
"node.transitionfx.input.blend_in": "To"
"node.transitionfx.input.progress_in": "Progress"
"node.transitionfx.input.color_in": "Color"
"node.transitionfx.input.direction_in": "Direction"
"node.transitionfx.input.type_in": "Type"
"node.cornerpin.name": "Corner Pin"
"node.cornerpin.input.tex_in": "Texture"
"node.cornerpin.input.perspective_in": "Perspective"
"node.cornerpin.input.top_left_in": "Top Left"
"node.cornerpin.input.top_right_in": "Top Right"
"node.cornerpin.input.bottom_right_in": "Bottom Right"
"node.cornerpin.input.bottom_left_in": "Bottom Left"
"node.displaytransform.name": "Display Transform"
"node.displaytransform.input.tex_in": "Input"
"node.displaytransform.input.display_in": "Display"
"node.displaytransform.input.view_in": "View"
"node.displaytransform.input.dir_in": "Direction"
"node.ociogradingtransformlinear.name": "OCIO Color Grading (Linear)"
"node.ociogradingtransformlinear.input.tex_in": "Input"
"node.ociogradingtransformlinear.input.ocio_grading_primary_contrast": "Contrast"
"node.ociogradingtransformlinear.input.ocio_grading_primary_offset": "Offset"
"node.ociogradingtransformlinear.input.ocio_grading_primary_exposure": "Exposure"
"node.ociogradingtransformlinear.input.ocio_grading_primary_saturation": "Saturation"
"node.ociogradingtransformlinear.input.ocio_grading_primary_pivot": "Pivot"
"node.ociogradingtransformlinear.input.clamp_black_enable_in": "Enable Black Clamp"
"node.ociogradingtransformlinear.input.ocio_grading_primary_clampBlack": "Black Clamp"
"node.ociogradingtransformlinear.input.clamp_white_enable_in": "Enable White Clamp"
"node.ociogradingtransformlinear.input.ocio_grading_primary_clampWhite": "White Clamp"
"node.OCIO_NAMESPACEgradingtransformlog.name": "OCIO Color Grading (Log)"
"node.OCIO_NAMESPACEgradingtransformlog.input.tex_in": "Input"
"node.OCIO_NAMESPACEgradingtransformlog.input.OCIO_NAMESPACE_grading_primary_brightness": "Lift"
"node.OCIO_NAMESPACEgradingtransformlog.input.OCIO_NAMESPACE_grading_primary_contrast": "Gain"
"node.OCIO_NAMESPACEgradingtransformlog.input.OCIO_NAMESPACE_grading_primary_gamma": "Gamma"
"node.OCIO_NAMESPACEgradingtransformlog.input.OCIO_NAMESPACE_grading_primary_saturation": "Saturation"
"node.OCIO_NAMESPACEgradingtransformlog.input.OCIO_NAMESPACE_grading_primary_pivot": "Pivot"
"node.OCIO_NAMESPACEgradingtransformlog.input.clamp_black_enable_in": "Enable Black Clamp"
"node.OCIO_NAMESPACEgradingtransformlog.input.OCIO_NAMESPACE_grading_primary_clampBlack": "Black Clamp"
"node.OCIO_NAMESPACEgradingtransformlog.input.clamp_white_enable_in": "Enable White Clamp"
"node.OCIO_NAMESPACEgradingtransformlog.input.OCIO_NAMESPACE_grading_primary_clampWhite": "White Clamp"
"node.whitebalance.name": "White Balance"
"node.whitebalance.input.tex_in": "Input"
"node.whitebalance.input.temperature_in": "Temperature (K)"
"node.whitebalance.input.tint_in": "Tint"
"node.ociolut.name": "OCIO LUT"
"node.ociolut.input.tex_in": "Input"
"node.ociolut.input.lut_file_in": "LUT File"
"node.ociolut.input.lut_dir_in": "Direction"
"node.threewaycolor.name": "Three-Way Color"
"node.threewaycolor.input.tex_in": "Input"
"node.threewaycolor.input.shadows_color_in": "Shadows"
"node.threewaycolor.input.midtones_color_in": "Midtones"
"node.threewaycolor.input.highlights_color_in": "Highlights"
"node.threewaycolor.input.shadows_amount_in": "Shadows Amount"
"node.threewaycolor.input.midtones_amount_in": "Midtones Amount"
"node.threewaycolor.input.highlights_amount_in": "Highlights Amount"
"node.chromakey.name": "Chroma Key"
"node.chromakey.input.tex_in": "Input"
"node.chromakey.input.color_key": "Key Color"
"node.chromakey.input.lower_tolerance_in": "Lower Tolerance"
"node.chromakey.input.upper_tolerance_in": "Upper Tolerance"
"node.chromakey.input.garbage_in": "Garbage Matte"
"node.chromakey.input.core_in": "Core Matte"
"node.chromakey.input.highlights_in": "Highlights"
"node.chromakey.input.shadows_in": "Shadows"
"node.chromakey.input.invert_in": "Invert Mask"
"node.chromakey.input.mask_only_in": "Show Mask Only"
"node.mask.name": "Mask"
"node.mask.input.base_in": "Texture"
"node.mask.input.points_in": "Points"
"node.mask.input.color_in": "Color"
"node.mask.input.invert_in": "Invert"
"node.mask.input.feather_in": "Feather"
"node.dropshadow.name": "Drop Shadow"
"node.dropshadow.input.tex_in": "Texture"
"node.dropshadow.input.color_in": "Color"
"node.dropshadow.input.distance_in": "Distance"
"node.dropshadow.input.angle_in": "Angle"
"node.dropshadow.input.radius_in": "Softness"
"node.dropshadow.input.opacity_in": "Opacity"
"node.dropshadow.input.fast_in": "Faster (Lower Quality)"
"node.timeformat.name": "Time Format"
"node.timeformat.input.time_in": "Time"
"node.timeformat.input.format_in": "Format"
"node.timeformat.input.localtime_in": "Interpret time as local time"
"node.wave.name": "Wave"
"node.wave.input.tex_in": "Input"
"node.wave.input.frequency_in": "Frequency"
"node.wave.input.intensity_in": "Intensity"
"node.wave.input.evolution_in": "Evolution"
"node.wave.input.vertical_in": "Direction"
"node.tile.name": "Tile"
"node.tile.input.tex_in": "Input"
"node.tile.input.scale_in": "Scale"
"node.tile.input.position_in": "Position"
"node.tile.input.anchor_in": "Anchor"
"node.tile.input.mirrorx_in": "Mirror Horizontally"
"node.tile.input.mirrory_in": "Mirror Vertically"
"node.swirl.name": "Swirl"
"node.swirl.input.tex_in": "Input"
"node.swirl.input.radius_in": "Radius"
"node.swirl.input.angle_in": "Angle"
"node.swirl.input.pos_in": "Position"
"node.ripple.name": "Ripple"
"node.ripple.input.tex_in": "Input"
"node.ripple.input.evolution_in": "Evolution"
"node.ripple.input.intensity_in": "Intensity"
"node.ripple.input.frequency_in": "Frequency"
"node.ripple.input.position_in": "Position"
"node.ripple.input.stretch_in": "Stretch"
"node.colormatrix.name": "Color Matrix"
"node.colormatrix.input.tex_in": "Input"
"node.colormatrix.input.m0": "R <- R"
"node.colormatrix.input.m1": "R <- G"
"node.colormatrix.input.m2": "R <- B"
"node.colormatrix.input.m3": "R <- A"
"node.colormatrix.input.m4": "G <- R"
"node.colormatrix.input.m5": "G <- G"
"node.colormatrix.input.m6": "G <- B"
"node.colormatrix.input.m7": "G <- A"
"node.colormatrix.input.m8": "B <- R"
"node.colormatrix.input.m9": "B <- G"
"node.colormatrix.input.m10": "B <- B"
"node.colormatrix.input.m11": "B <- A"
"node.colormatrix.input.m12": "A <- R"
"node.colormatrix.input.m13": "A <- G"
"node.colormatrix.input.m14": "A <- B"
"node.colormatrix.input.m15": "A <- A"
"node.dilate.name": "Dilate"
"node.dilate.input.tex_in": "Input"
"node.dilate.input.radius_in": "Radius"
"node.edgedetect.name": "Edge Detect"
"node.edgedetect.input.tex_in": "Input"
"node.edgedetect.input.threshold_in": "Threshold"
"node.erode.name": "Erode"
"node.erode.input.tex_in": "Input"
"node.erode.input.radius_in": "Radius"
"node.colorcorrect.name": "Color Correct"
"node.colorcorrect.input.tex_in": "Input"
"node.colorcorrect.input.saturation_in": "Saturation"
"node.colorcorrect.input.contrast_in": "Contrast"
"node.colorcorrect.input.gamma_in": "Gamma"
"node.colorcorrect.input.gain_in": "Gain"
"node.colorcorrect.input.offset_in": "Offset"
"node.gamma.name": "Gamma"
"node.gamma.input.tex_in": "Input"
"node.gamma.input.gamma_in": "Gamma"
"node.saturation.name": "Saturation"
"node.saturation.input.tex_in": "Input"
"node.saturation.input.saturation_in": "Saturation"
"node.invert.name": "Invert"
"node.invert.input.tex_in": "Input"
"node.invert.input.invert_r_in": "Invert Red"
"node.invert.input.invert_g_in": "Invert Green"
"node.invert.input.invert_b_in": "Invert Blue"
"node.invert.input.invert_a_in": "Invert Alpha"
"node.clamp.name": "Clamp"
"node.clamp.input.tex_in": "Input"
"node.clamp.input.min_in": "Min"
"node.clamp.input.max_in": "Max"
"node.grade.name": "Grade"
"node.grade.input.tex_in": "Input"
"node.grade.input.blackpoint_in": "Black Point"
"node.grade.input.whitepoint_in": "White Point"
"node.grade.input.black_in": "Black Output"
"node.grade.input.white_in": "White Output"
"node.grade.input.gamma_in": "Gamma"
"node.dirblur.name": "Directional Blur"
"node.dirblur.input.tex_in": "Input"
"node.dirblur.input.amount_in": "Amount"
"node.dirblur.input.angle_in": "Angle"
"node.sharpen.name": "Sharpen"
"node.sharpen.input.tex_in": "Input"
"node.sharpen.input.amount_in": "Amount"
"node.dissolve.name": "Dissolve"
"node.dissolve.input.tex_in": "Input"
"node.dissolve.input.blend_in": "Blend"
"node.dissolve.input.mix_in": "Mix"
"node.keymix.name": "KeyMix"
"node.keymix.input.tex_in": "Input"
"node.keymix.input.blend_in": "Blend"
"node.keymix.input.mask_in": "Mask"
"node.premult.name": "Premultiply"
"node.premult.input.tex_in": "Input"
"node.premult.input.premult_channel_in": "Channel"
"node.unpremult.name": "Unpremultiply"
"node.unpremult.input.tex_in": "Input"
"node.unpremult.input.unpremult_channel_in": "Channel"
"node.position.name": "Position"
"node.position.input.tex_in": "Input"
"node.position.input.offset_in": "Translate"
"node.mirror.name": "Mirror"
"node.mirror.input.tex_in": "Input"
"node.mirror.input.horizontal_in": "Horizontal (flop)"
"node.mirror.input.vertical_in": "Vertical (flip)"
"node.checkerboard.name": "Checkerboard"
"node.checkerboard.input.base_in": "Base"
"node.checkerboard.input.size_in": "Box Size"
"node.checkerboard.input.color1_in": "Color 1"
"node.checkerboard.input.color2_in": "Color 2"
"node.colorbars.name": "Color Bars"
"node.colorbars.input.base_in": "Base"
"node.colorbars.input.standard_in": "Standard"
"node.ramp.name": "Ramp"
"node.ramp.input.base_in": "Base"
"node.ramp.input.point0_in": "Point 0"
"node.ramp.input.point1_in": "Point 1"
"node.ramp.input.color0_in": "Color 0"
"node.ramp.input.color1_in": "Color 1"
"node.multicam.name": "Multi-Cam"
"node.multicam.input.current_in": "Current"
"node.multicam.input.sources_in": "Sources"
"node.multicam.input.sequence_in": "Sequence"
"node.multicam.input.sequence_type_in": "Sequence Type"
"node.graphinput.name": "Graph Input"
"node.graphinput.input.feed_in": "Feed"
"node.graphoutput.name": "Graph Output"
"node.graphoutput.input.tex_in": "Texture"
"status.ready": "Ready"
"status.cache": "Cache: Enabled"
"status.proxy.on": "Proxy: On"
"status.proxy.off": "Proxy: Off"
"status.storage.written": "Library: written"
"status.storage.unbound": "Library: off"
"status.storage.error": "Library: write failed"
"status.untitled": "Untitled Project"
"status.backend": "Engine:"
"manager.title": "Project Manager"
"manager.new": "New Project"
"manager.new.default_name": "Untitled Project"
"manager.new.project_name": "Project Name"
"manager.open": "Open"
"manager.rename": "Rename…"
"manager.rename.title": "Rename Project"
"manager.rename.label": "New name"
"manager.duplicate": "Duplicate"
"manager.delete": "Delete"
"manager.delete.title": "Delete Project"
"manager.delete.confirm": "Delete project \"{name}\" from the library? This cannot be undone."
"manager.import": "Import…"
"manager.import.title": "Import Project"
"manager.export": "Export…"
"manager.export.title": "Export Project"
"manager.col.name": "Name"
"manager.col.modified": "Modified"
"manager.col.duration": "Duration"
"manager.col.tracks": "Tracks"
"manager.col.clips": "Clips"
"manager.col.footage": "Footage"
"manager.empty": "No projects in the library yet."
"timeline.tool.select": "Select"
"timeline.tool.razor": "Blade"
"timeline.tool.ripple": "Ripple"
"timeline.tool.slip": "Slip"
"timeline.tool.roll": "Roll"
"timeline.tool.zoom": "Zoom"
"timeline.tool.slide": "Slide"
"timeline.tool.track_select": "Track Select"
"timeline.zoom": "Zoom"
"timeline.zoom_in": "Zoom In"
"timeline.zoom_out": "Zoom Out"
"timeline.track_height": "Track Height"
"timeline.snap": "Snap"
"timeline.add_video_track": "Add Video Track"
"timeline.add_audio_track": "Add Audio Track"
"bin.footage": "Footage"
"bin.music": "Music"
"history.command": "Command"
"history.empty": "No History"
"history.jump_here": "Jump to This Step"
"node.fit": "Fit"
"viewer.picture": "Picture"
"viewer.scopes": "Scopes"
"scope.histogram": "Histogram"
"scope.waveform": "Waveform"
"scope.vectorscope": "Vectorscope"
"viewer.in_point": "Set In Point"
"viewer.step_back": "Previous Frame"
"viewer.play": "Play"
"viewer.pause": "Pause"
"viewer.step_forward": "Next Frame"
"viewer.out_point": "Set Out Point"
"viewer.clear_range": "Clear In/Out Range"
"explorer.tree": "Tree"
"explorer.icons": "Icons"
"viewer.safe_frames": "Safe Frames"
"viewer.zoom": "Zoom"
"viewer.no_frame_source": "No frame source"
"effect_stack.empty": "No selection"
"effect_stack.add": "+ Add Effect"
"inspector.params": "No editable parameters"
"inspector.add_effect": "Add Effect"
"inspector.badge.openfx": "OpenFX"
"ofx.progress.title": "OpenFX Plugin Progress"
"ofx.color.hex": "Hex"
"ofx.color.ok": "OK"
"ofx.color.cancel": "Cancel"
"ofx.color.invalid": "Invalid hex color"
"ofx.color.pick_viewer": "Pick from viewer"
"ofx.color.mode_rgb": "RGB"
"ofx.color.mode_hsv": "HSV"
"dialog.cancel": "Cancel"
"dialog.close": "Close"
"dialog.ok": "OK"
"projprops.title": "Project Properties"
"projprops.name": "Project Name"
"projprops.ocio_config": "OpenColorIO Configuration"
"projprops.browse": "Browse…"
"projprops.cache.location": "Disk Cache Location"
"projprops.cache.default": "Use Default Location"
"projprops.cache.alongside": "Store Alongside Project"
"projprops.cache.custom": "Use Custom Location:"
"projprops.color.working": "Working Color Space"
"projprops.color.working.acescg": "ACEScg (scene-linear, recommended)"
"projprops.color.working.srgb": "sRGB (legacy pass-through)"
"projprops.color.gamut": "Output Gamut"
"projprops.color.gamut.srgb": "sRGB / Rec.709"
"projprops.color.gamut.p3": "Display P3"
"projprops.color.gamut.bt2020": "Rec.2020"
"projprops.color.transfer": "Output Transfer"
"projprops.color.transfer.srgb": "sRGB"
"projprops.color.transfer.gamma22": "Gamma 2.2"
"projprops.color.transfer.pq": "PQ (ST 2084)"
"projprops.color.transfer.hlg": "HLG"
"seqprops.new.title": "New Sequence"
"seqprops.title": "Sequence Properties"
"seqprops.default_name": "Sequence 1"
"seqprops.name": "Sequence Name"
"seqprops.preset": "Preset"
"seqprops.preset.custom": "Custom"
"seqprops.preset.pal": "PAL (720×576, 25 fps)"
"seqprops.preset.ntsc": "NTSC (720×480, 29.97 fps)"
"seqprops.preset.hd_1080_25": "HD 1080p25 (1920×1080, 25 fps)"
"seqprops.preset.hd_1080_30": "HD 1080p30 (1920×1080, 30 fps)"
"seqprops.preset.uhd_4k": "4K UHD (3840×2160, 25 fps)"
"seqprops.preset.dci_4k": "4K DCI (4096×2160, 24 fps)"
"seqprops.drop.title": "New Sequence for Footage"
"seqprops.drop.caption": "The timeline has no sequence open. The dropped footage needs a sequence; its parameters were probed from the media:"
"seqprops.drop.use_footage": "Use Footage Parameters"
"seqprops.drop.manual": "Specify Manually"
"seqprops.drop.no_video": "The footage has no video stream; the default sequence format will be used."
"seqprops.width": "Width"
"seqprops.height": "Height"
"seqprops.frame_rate": "Frame Rate"
"seqprops.interlaced": "Interlaced"
"seqprops.error.no_project": "No project is open."
"seqprops.error.no_sequence": "The sequence no longer exists."
"about.title": "About Oak"
"about.description": "Oak Video Editor is a free open source non-linear video editor. This software is licensed under the GNU GPL Version 3."
"about.thanks": "Special thanks to Enzo GD, our Community Promoter, for his generous support in spreading the word about this project in its early days."
"about.fork_notice": "This project is a fork of Olive Video Editor."
"file.open.title": "Open Project (.ove / .otio / .fcpxml)"
"file.import_footage.title": "Import Footage"
"preferences.title": "Preferences"
"preferences.section.general": "General"
"preferences.section.render": "Rendering"
"preferences.section.cache": "Cache"
"preferences.section.proxy": "Proxy"
"preferences.section.color": "Color"
"preferences.color.enable": "Display color management (display ICC)"
"preferences.color.custom": "Custom ICC profile"
"preferences.color.browse": "Browse…"
"preferences.color.restart_hint": "A mode change takes effect after a restart."
"preferences.section.project": "Project"
"preferences.section.audio": "Audio"
"preferences.backend": "Renderer backend"
"preferences.hwdecode.enable": "Hardware-accelerated video decoding (VideoToolbox / VA-API / NVDEC / D3D11VA)"
"preferences.backend.placeholder": "Select a backend…"
"preferences.bit_depth.label": "Display bit depth"
"preferences.bit_depth.10bit": "10-bit"
"preferences.bit_depth.8bit": "8-bit"
"preferences.bit_depth.restart_hint": "A change takes effect after a restart."
"preferences.language": "Language"
"preferences.language.placeholder": "Select a language…"
"preferences.theme": "Theme"
"preferences.theme.dark": "Olive Dark"
"preferences.theme.light": "Olive Light"
"preferences.cache.dir": "Disk cache directory"
"preferences.cache.browse": "Browse…"
"preferences.cache.ahead": "Cache ahead (frames)"
"preferences.section.storage": "Storage"
"preferences.storage.backend": "Library storage backend"
"preferences.storage.pg_url": "PostgreSQL connection string"
"preferences.storage.restart_hint": "Storage backend changes apply to projects opened afterwards (a restart is recommended)."
"preferences.proxy.enable": "Use proxy media"
"preferences.proxy.resolution": "Proxy resolution"
"preferences.proxy.full": "Full resolution"
"preferences.snapshot.interval": "Auto-save (snapshot) interval, seconds"
"preferences.transition.default": "Default transition length, seconds"
"preferences.audio.output": "Audio output device"
"preferences.audio.output.placeholder": "Select an output device…"
"preferences.audio.input": "Audio input device"
"preferences.audio.input.placeholder": "Select an input device…"
"preferences.audio.default": "System Default"
"preferences.hint": "The renderer backend applies to the render worker at the next launch; every other setting takes effect immediately and is saved on exit."
"preferences.tab.general": "General"
"preferences.tab.keyboard": "Keyboard"
"preferences.section.keyboard": "Keyboard"
"preferences.keyboard.search": "Search for action or shortcut"
"preferences.keyboard.action": "Action"
"preferences.keyboard.shortcut": "Shortcut"
"preferences.keyboard.click_to_edit": "Click to set shortcut…"
"preferences.keyboard.capturing": "Press keys… (Esc to cancel)"
"preferences.keyboard.unbound": "None"
"preferences.keyboard.import": "Import…"
"preferences.keyboard.export": "Export…"
"preferences.keyboard.reset_selected": "Reset Selected"
"preferences.keyboard.reset_all": "Reset All"
"preferences.keyboard.reset_all.confirm": "Are you sure you wish to reset all keyboard shortcuts to their defaults?"
"preferences.keyboard.conflict": "The shortcut is already bound to {action}; the binding has been moved."
"preferences.keyboard.cleared": "Shortcut cleared (action unbound)."
"preferences.keyboard.reset": "Shortcut reset to its default."
"preferences.keyboard.reset_all_done": "All shortcuts reset to their defaults."
"preferences.keyboard.imported": "Shortcuts imported successfully."
"preferences.keyboard.exported": "Shortcuts exported successfully."
"preferences.keyboard.import_failed": "Failed to open the file for reading."
"preferences.keyboard.export_failed": "Failed to open the file for writing."
"actionsearch.search_placeholder": "Search for action…"
"actionsearch.empty": "No matching actions"
"actionsearch.no_actions": "No actions available"
"export.title": "Export Sequence"
"export.format": "Format"
"export.video_codec": "Video Codec"
"export.audio_codec": "Audio Codec"
"export.color": "Color Space"
"export.color.sdr": "SDR — Rec.709 8-bit"
"export.resolution": "Resolution (0 = sequence)"
"export.framerate": "Frame Rate (0 = sequence)"
"export.bitrate": "Bit Rate (0 = codec default)"
"export.color.hdr": "HDR — BT.2020 10-bit"
"export.range": "Export Range"
"export.range.all": "Whole Timeline"
"export.range.inout": "In / Out Points"
"project.export.format": "Project Format"
"export.format.placeholder": "Select a format…"
"export.path": "Output path"
"export.sequence": "Sequence"
"export.run": "Export"
"export.hint": "The sequence is exported through the oaktask export path; progress is shown in the dialog."
"export.progress.title": "Exporting"
"export.progress.label": "Rendering frames…"
"proxydialog.title": "Proxy Settings"
"proxydialog.footage_group": "Footage"
"proxydialog.no_footage": "No footage in the project"
"proxydialog.custom": "Use custom settings for footage"
"proxydialog.custom_suffix": " (custom settings)"
"proxydialog.global": "Global Proxy Settings"
"proxydialog.resolution": "Proxy Resolution"
"proxydialog.resolution.custom": "Custom size"
"proxydialog.resolution.half": "1/2 of source"
"proxydialog.resolution.quarter": "1/4 of source"
"proxydialog.resolution.eighth": "1/8 of source"
"proxydialog.width": "Proxy Width"
"proxydialog.height": "Proxy Height"
"proxydialog.crf": "Proxy CRF"
"proxydialog.preset": "Proxy Preset"
"proxydialog.max_concurrent": "Max Concurrent Jobs"
"proxydialog.include_audio": "Include audio in proxies"
"proxydialog.ffmpeg": "ffmpeg Executable"
"proxydialog.generate": "Generate Proxies"
"proxydialog.delete": "Delete Proxies"
"proxydialog.close": "Close"
"proxydialog.state.missing": "Missing"
"proxydialog.state.generating": "Generating"
"proxydialog.state.ready": "Ready"
"proxydialog.state.failed": "Failed"
"menu.color.label": "Color Label"
"menu.color.red": "Red"
"menu.color.maroon": "Maroon"
"menu.color.orange": "Orange"
"menu.color.brown": "Brown"
"menu.color.yellow": "Yellow"
"menu.color.oak": "Oak"
"menu.color.lime": "Lime"
"menu.color.green": "Green"
"menu.color.cyan": "Cyan"
"menu.color.teal": "Teal"
"menu.color.blue": "Blue"
"menu.color.navy": "Navy"
"menu.color.pink": "Pink"
"menu.color.purple": "Purple"
"menu.color.silver": "Silver"
"menu.color.gray": "Gray"
"menu.context.properties": "Properties"
"timeline.context.sync_source_time": "Synchronize by Source Time"
"timeline.context.sync_waveform": "Synchronize by Waveform"
"timeline.context.sync_waveform_speed": "Synchronize by Waveform (Adjust Speed)"
"timeline.context.cache": "Cache"
"timeline.context.auto_cache": "Auto-Cache"
"timeline.context.cache_all": "Cache All"
"timeline.context.cache_in_out": "Cache In/Out"
"timeline.context.cache_discard": "Discard"
"timeline.context.proxy": "Proxy"
"timeline.context.generate_proxy": "Generate Proxy"
"timeline.context.use_proxy": "Use Proxy"
"timeline.context.reveal_proxy": "Reveal Proxy"
"timeline.context.delete_proxy": "Delete Proxy"
"timeline.context.reveal_in_footage_viewer": "Reveal in Footage Viewer"
"timeline.context.reveal_in_project": "Reveal in Project"
"timeline.context.multicam": "Multi-Cam"
"timeline.context.use_audio_time_units": "Use Audio Time Units"
"timeline.context.show_thumbnails": "Show Thumbnails"
"timeline.context.thumbnails_off": "Disabled"
"timeline.context.thumbnails_at_in_points": "Only At In Points"
"timeline.context.thumbnails_on": "Enabled"
"timeline.context.show_waveforms": "Show Waveforms"
"timeline.context.add_video_track": "Add Video Track"
"timeline.context.add_audio_track": "Add Audio Track"
"timeline.context.delete_track": "Delete"
"timeline.context.delete_all_empty": "Delete All Empty"
"timeline.context.timecode_drop_frame": "Drop Frame"
"timeline.context.timecode_non_drop_frame": "Non-Drop Frame"
"timeline.context.timecode_seconds": "Seconds"
"timeline.context.timecode_frames": "Frames"
"timeline.context.timecode_milliseconds": "Milliseconds"
"node.category.output": "Output"
"node.category.effect": "Effect"
"node.category.generator": "Generator"
"node.category.input": "Input"
"node.category.math": "Math"
"node.category.color": "Color"
"node.category.distort": "Distort"
"node.category.filter": "Filter"
"node.category.keying": "Keying"
"node.category.openfx": "OpenFX"
"node.category.group": "Group"
"project.context.new": "New"
"project.new_sequence": "New Sequence"
"project.add_text_footage": "Add Text Footage"
"timeline.context.add_adjustment_layer": "Add Adjustment Layer"
"project.context.reveal_in_finder": "Reveal in Finder"
"project.context.replace_footage": "Replace Footage"
"project.context.rename": "Rename"
"project.context.export_sequence": "Export Sequence…"
"project.context.delete": "Delete"
"project.context.open_in_new_tab": "Open in New Tab"
"project.context.open_in_new_window": "Open in New Window"
"viewer.context.zoom": "Zoom"
"viewer.context.zoom_fit": "Fit"
"viewer.context.full_screen": "Full Screen"
"viewer.context.playback_resolution": "Playback Resolution"
"viewer.context.res_full": "Full"
"viewer.context.res_half": "1/2"
"viewer.context.res_quarter": "1/4"
"viewer.context.res_eighth": "1/8"
"viewer.context.safe_margins": "Safe Margins"
"viewer.context.safe_off": "Off"
"viewer.context.safe_on": "On"
"viewer.context.safe_custom": "Custom Aspect"
"viewer.context.stop_on_last": "Stop Playback On Last Frame"
"viewer.context.audio_waveform": "Audio Waveform"
"viewer.context.wf_automatic": "Automatically Show/Hide"
"viewer.context.wf_only": "Show Waveform Only"
"viewer.context.wf_both": "Show Both Viewer And Waveform"
"viewer.context.show_fps": "Show FPS"
"viewer.context.save_frame": "Save Frame As Image"
"node.context.group": "Group"
"node.context.ungroup": "Ungroup"
"node.context.open_in_viewer": "Open in Viewer"
"node.context.show_in_param_editor": "Show in Parameter Editor"
"node.context.smooth_edges": "Smooth Edges"
"node.context.direction": "Direction"
"node.context.dir_top_bottom": "Top to Bottom"
"node.context.dir_bottom_top": "Bottom to Top"
"node.context.dir_left_right": "Left to Right"
"node.context.dir_right_left": "Right to Left"
"node.context.add": "Add"
"inspector.context.enable": "Enable"
"inspector.context.disable": "Disable"
"inspector.context.remove": "Remove"
"inspector.context.rename": "Rename"