index.html 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <meta name="theme-color" content="#262626">
  7. <title>Raw Editor</title>
  8. <link rel="stylesheet" href="../script/semantic/semantic.min.css">
  9. <script src="../script/jquery.min.js"></script>
  10. <script src="../script/ao_module.js"></script>
  11. <link rel="stylesheet" href="css/style.css">
  12. </head>
  13. <body class="dark">
  14. <div id="app">
  15. <!-- Title bar -->
  16. <div id="titlebar">
  17. <div class="tb-left">
  18. <button class="ic-btn" id="btnOpen" title="Open image / RAW"><i class="folder open outline icon"></i></button>
  19. </div>
  20. <div id="fileTitle" class="tb-title">No image loaded</div>
  21. <div class="tb-right">
  22. <button class="ic-btn" id="btnSave" title="Save developed image (JPEG)"><i class="download icon"></i></button>
  23. <button class="ic-btn" id="btnReset" title="Reset all adjustments"><i class="undo icon"></i></button>
  24. <button class="ic-btn" id="btnFit" title="Fit to window"><i class="expand arrows alternate icon"></i></button>
  25. </div>
  26. </div>
  27. <div id="body">
  28. <!-- Stage -->
  29. <div id="stage">
  30. <div id="dropHint">
  31. <i class="images outline icon huge"></i>
  32. <p>Open a RAW (ARW, DNG, NEF, CR2 ...) or image file to begin.</p>
  33. <button class="ui inverted button" id="btnOpen2"><i class="folder open icon"></i> Open file</button>
  34. <p class="tiny-note">You can also drag a file here.</p>
  35. </div>
  36. <canvas id="view" style="display:none;"></canvas>
  37. <div id="loader" style="display:none;">
  38. <div class="spinner"></div>
  39. <div id="loaderText">Decoding RAW...</div>
  40. </div>
  41. </div>
  42. <!-- Develop panel -->
  43. <div id="panel">
  44. <!-- Histogram -->
  45. <div id="histoWrap">
  46. <span class="clip clip-l" id="clipShadow" title="Shadow clipping"></span>
  47. <span class="clip clip-r" id="clipHigh" title="Highlight clipping"></span>
  48. <canvas id="histogram" width="300" height="118"></canvas>
  49. <div id="exifLine">
  50. <span id="exifIso">--</span>
  51. <span id="exifFocal">--</span>
  52. <span id="exifAperture">--</span>
  53. <span id="exifShutter">--</span>
  54. </div>
  55. </div>
  56. <div class="panel-scroll">
  57. <!-- Edit header -->
  58. <div class="edit-head">
  59. <span class="edit-title">Edit</span>
  60. <div class="edit-actions">
  61. <button class="pill" id="btnAuto">Auto</button>
  62. <button class="pill" id="btnBW">B&amp;W</button>
  63. </div>
  64. </div>
  65. <!-- LIGHT -->
  66. <div class="group" data-group="light">
  67. <div class="group-head">
  68. <i class="dropdown icon chev"></i>
  69. <span class="group-title">Light</span>
  70. <i class="eye icon eye-toggle" title="Toggle Light adjustments"></i>
  71. </div>
  72. <div class="group-body">
  73. <div class="slider" data-key="exposure" data-min="-5" data-max="5" data-def="0" data-step="0.01"><span class="s-name">Exposure</span><span class="s-track"><input type="range"></span><input class="s-val" type="number"></div>
  74. <div class="slider" data-key="contrast" data-min="-100" data-max="100" data-def="0" data-step="1"><span class="s-name">Contrast</span><span class="s-track"><input type="range"></span><input class="s-val" type="number"></div>
  75. <div class="slider" data-key="highlights" data-min="-100" data-max="100" data-def="0" data-step="1"><span class="s-name">Highlights</span><span class="s-track"><input type="range"></span><input class="s-val" type="number"></div>
  76. <div class="slider" data-key="shadows" data-min="-100" data-max="100" data-def="0" data-step="1"><span class="s-name">Shadows</span><span class="s-track"><input type="range"></span><input class="s-val" type="number"></div>
  77. <div class="slider" data-key="whites" data-min="-100" data-max="100" data-def="0" data-step="1"><span class="s-name">Whites</span><span class="s-track"><input type="range"></span><input class="s-val" type="number"></div>
  78. <div class="slider" data-key="blacks" data-min="-100" data-max="100" data-def="0" data-step="1"><span class="s-name">Blacks</span><span class="s-track"><input type="range"></span><input class="s-val" type="number"></div>
  79. <div class="group-reset"><button class="link-btn" id="btnDefault">Reset Light</button></div>
  80. </div>
  81. </div>
  82. <!-- COLOR -->
  83. <div class="group" data-group="color">
  84. <div class="group-head">
  85. <i class="dropdown icon chev"></i>
  86. <span class="group-title">Color</span>
  87. <i class="eye icon eye-toggle" title="Toggle Color adjustments"></i>
  88. </div>
  89. <div class="group-body">
  90. <div class="wb-row">
  91. <span class="lbl">White Balance</span>
  92. <select id="wbPreset" class="mini-select">
  93. <option value="asshot">As Shot</option>
  94. <option value="auto">Auto</option>
  95. <option value="daylight">Daylight</option>
  96. <option value="cloudy">Cloudy</option>
  97. <option value="shade">Shade</option>
  98. <option value="tungsten">Tungsten</option>
  99. <option value="fluorescent">Fluorescent</option>
  100. <option value="custom">Custom</option>
  101. </select>
  102. <button class="ic-btn eyedrop" id="btnEyedrop" title="Auto white balance"><i class="eye dropper icon"></i></button>
  103. </div>
  104. <div class="slider grad-temp" data-key="temperature" data-min="2000" data-max="50000" data-def="5500" data-step="10"><span class="s-name">Temperature</span><span class="s-track"><input type="range"></span><input class="s-val" type="number"></div>
  105. <div class="slider grad-tint" data-key="tint" data-min="-150" data-max="150" data-def="0" data-step="1"><span class="s-name">Tint</span><span class="s-track"><input type="range"></span><input class="s-val" type="number"></div>
  106. <div class="slider grad-vib" data-key="vibrance" data-min="-100" data-max="100" data-def="0" data-step="1"><span class="s-name">Vibrance</span><span class="s-track"><input type="range"></span><input class="s-val" type="number"></div>
  107. <div class="slider grad-sat" data-key="saturation" data-min="-100" data-max="100" data-def="0" data-step="1"><span class="s-name">Saturation</span><span class="s-track"><input type="range"></span><input class="s-val" type="number"></div>
  108. </div>
  109. </div>
  110. <!-- EFFECTS -->
  111. <div class="group" data-group="effects">
  112. <div class="group-head">
  113. <i class="dropdown icon chev"></i>
  114. <span class="group-title">Effects</span>
  115. <i class="eye icon eye-toggle" title="Toggle Effects"></i>
  116. </div>
  117. <div class="group-body">
  118. <div class="slider" data-key="texture" data-min="-100" data-max="100" data-def="0" data-step="1"><span class="s-name">Texture</span><span class="s-track"><input type="range"></span><input class="s-val" type="number"></div>
  119. <div class="slider" data-key="clarity" data-min="-100" data-max="100" data-def="0" data-step="1"><span class="s-name">Clarity</span><span class="s-track"><input type="range"></span><input class="s-val" type="number"></div>
  120. <div class="slider" data-key="dehaze" data-min="-100" data-max="100" data-def="0" data-step="1"><span class="s-name">Dehaze</span><span class="s-track"><input type="range"></span><input class="s-val" type="number"></div>
  121. <div class="slider" data-key="vignette" data-min="-100" data-max="100" data-def="0" data-step="1"><span class="s-name">Vignette</span><span class="s-track"><input type="range"></span><input class="s-val" type="number"></div>
  122. <div class="slider" data-key="grain" data-min="0" data-max="100" data-def="0" data-step="1"><span class="s-name">Grain</span><span class="s-track"><input type="range"></span><input class="s-val" type="number"></div>
  123. </div>
  124. </div>
  125. <!-- LUT -->
  126. <div class="group" data-group="lut">
  127. <div class="group-head">
  128. <i class="dropdown icon chev"></i>
  129. <span class="group-title">LUT / Color Grade</span>
  130. <i class="eye icon eye-toggle" title="Toggle LUT"></i>
  131. </div>
  132. <div class="group-body">
  133. <div class="lut-intro">Drop <b>.cube</b> LUT files into <span class="mono">user:/RawEditor/LUTs</span> with the Files app, then pick one here. LUTs apply after all adjustments.</div>
  134. <div class="wb-row">
  135. <span class="lbl">Library</span>
  136. <select id="lutLibrary" class="mini-select"><option value="">&mdash; Select a LUT &mdash;</option></select>
  137. <button class="ic-btn eyedrop" id="btnLutRefresh" title="Rescan LUT folder"><i class="sync icon"></i></button>
  138. </div>
  139. <div id="lutEmpty" class="lut-hint">Scanning LUT folder&hellip;</div>
  140. <button class="ui tiny inverted fluid button" id="btnLoadLut"><i class="upload icon"></i> Import .cube to library</button>
  141. <input type="file" id="lutFile" accept=".cube" style="display:none;">
  142. <div id="lutInfo" class="lut-info" style="display:none;">
  143. <div class="wb-row"><span class="lbl">LUT</span><span id="lutName" class="lut-name">-</span></div>
  144. <div class="wb-row toggle-row">
  145. <span class="lbl">Enabled</span>
  146. <label class="switch"><input type="checkbox" id="lutEnabled" checked><span class="track"></span></label>
  147. </div>
  148. <div class="wb-row toggle-row">
  149. <span class="lbl">Log input</span>
  150. <label class="switch"><input type="checkbox" id="lutLogInput"><span class="track"></span></label>
  151. </div>
  152. <div class="lut-hint">Turn on for F-Log / S-Log / V-Log &rarr; display conversion LUTs so they look as intended on a normal photo.</div>
  153. <div class="slider" data-key="lutAmount" data-min="0" data-max="100" data-def="100" data-step="1"><span class="s-name">Amount</span><span class="s-track"><input type="range"></span><input class="s-val" type="number"></div>
  154. <div class="group-reset"><button class="link-btn" id="btnClearLut">Remove LUT</button></div>
  155. </div>
  156. </div>
  157. </div>
  158. </div>
  159. </div>
  160. </div>
  161. <!-- Bottom bar -->
  162. <div id="statusbar">
  163. <div class="sb-left">
  164. <canvas id="filmstrip" width="72" height="48"></canvas>
  165. <span class="zoom-label" id="btnZoomFit">Fit</span>
  166. <button class="pill" id="btnZoom100">100%</button>
  167. <span class="zoom-readout" id="zoomReadout"></span>
  168. </div>
  169. <div class="status-info" id="statusInfo">-</div>
  170. <div class="sb-right">
  171. <button class="ui tiny inverted button" id="btnCancel">Cancel</button>
  172. <button class="ui tiny primary button" id="btnDone" title="Save and open in Pixel Studio">Open in Pixel Studio</button>
  173. </div>
  174. </div>
  175. </div>
  176. <script src="js/rawdecoder.js"></script>
  177. <script src="js/lut.js"></script>
  178. <script src="js/glrender.js"></script>
  179. <script src="js/editor.js"></script>
  180. </body>
  181. </html>