diff --git a/content/user_docs/Edit_Metadata/editing_metadata.md b/content/user_docs/Edit_Metadata/editing_metadata.md index 1b7da3d..8882bd8 100644 --- a/content/user_docs/Edit_Metadata/editing_metadata.md +++ b/content/user_docs/Edit_Metadata/editing_metadata.md @@ -2,7 +2,7 @@ title: Editing Metadata type: docs prev: /user_docs/ -#next: /user_docs/Edit_Metadata/editing_metadata + --- When you click Edit on the metadata page you will be taken to the edit page. This shows a table with all the clips for that production. You can see whether a clip has been transcoded, is marked as hidden or edit the metadata of the clip(s) diff --git a/content/user_docs/transcribe/_index.md b/content/user_docs/transcribe/_index.md new file mode 100644 index 0000000..1f87550 --- /dev/null +++ b/content/user_docs/transcribe/_index.md @@ -0,0 +1,19 @@ +--- +title: Transcription +type: docs +prev: /user_docs/ +next: /user_docs/watch +weight: 3 +--- +Glympse Can transcribe any of the clips in it's database or you can upload individual files to be transcribed. + +These transcriptions happen in house and are not sent to any third party for processing. There is no cost to transcribing through Glympse. + +Once your file has been transcribed you will be sent a MS Word Document with the timecoded transcript. The timecodes are taken directly from the video/audio file. + +It is possible to view and edit the transcript live within Glympse. + +{{< cards >}} + {{< card link="/user_docs/transcribe/transcribe_clips/" title="Transcribe Existing Clips" icon="transcribe" >}} + {{< card link="/user_docs/transcribe/upload_clips/" title="Upload Clips" icon="upload_cloud" >}} +{{< /cards >}} \ No newline at end of file diff --git a/content/user_docs/transcribe/transcribe_clips.md b/content/user_docs/transcribe/transcribe_clips.md new file mode 100644 index 0000000..5e5ca4e --- /dev/null +++ b/content/user_docs/transcribe/transcribe_clips.md @@ -0,0 +1,42 @@ +--- +title: Transcribe Glympse Clips +type: docs +prev: /user_docs/ +--- + +There are a couple of ways you can send existing clips from Glympse to be transcribed. + +## When watching +When you are watching the clips, you can select the clips you would like to transcribe by checking them in the table below the video player + +![select clip](/images/select_transcribe.png) + +Then from the file menu select transcribe. + +![Select Transcribe](/images/transcribe_menu.png) + +This will open the the transcript options. Most of these can be left as default. +![transcript Options](/images/transcript_options.png) + +Click submit and the file will be sent to the transcript engine. Once it has finished you will be receive an email with the transcript document. + +You can also check the progress of the transcript in the transcript page. + +## Transcript Options + ### Select Format + The only option here is Word Doc, though you can download a subtitle file or an avid ScriptSync file from the transcript page. + + ### Select Audio Track + For cameras with multiple audio tracks it is possible to select which track you would like to have transcribed. By default it will transcribe the full mix track. + + ### Verbosity + This is how often the timecodes are injected in the transcript. It is possible to change this later in the transcript page. + + ### Translate to English + If your file is a foreign language, it is possible to translate it to english. The language detection is automatic but not perfect. This is not a perfect solution but should give you a starting point. + + *Translations should be checked by a Translator before file delivery* + + ### Speaker Detection + *Experimental*\ + This will try detect the different speakers in a file. Currently it only supports checking for two different people speaking. diff --git a/content/user_docs/transcribe/upload_clips.md b/content/user_docs/transcribe/upload_clips.md new file mode 100644 index 0000000..f63235c --- /dev/null +++ b/content/user_docs/transcribe/upload_clips.md @@ -0,0 +1,56 @@ +--- +title: Upload Clips for Transcription +type: docs +prev: /user_docs/ + +--- + +It is possible to upload a file to be transcribed. This can be an audio or video file and does not need to belong to an existing production. + +Navigate to the Transcribe page and click upload. +![Upload Transcript](/images/upload_transcript.png) + +This will take you to the upload page where you need to supply the file and fill in some details. +![Upload Transcript Options](/images/transcript_upload_options.png) + +Once you've filled out the form, click submit, your file will be uploaded and sent to the transcript queue. + +Once it has finished you will be receive an email with the transcript document. + +You can also check the progress of the transcript in the transcript page. + +## Form Fields +### Production +Every file needs to belong to a production. You can either select an existing Base Production or you can create a new one. +To create a new production click the Blue `+` button and enter the name of your production. +![add base](/images/add_base.png) + +### Title *Required* +Enter a title for your clip. This is how the clip will appear within Glympse. + +### Roll +*Optional* Enter the camera/audio roll if you have one. This is optional but, if supplied, will appear in the title of the transcript. + +### Format +The only option here is Word Doc, though you can download a subtitle file or an avid ScriptSync file from the transcript page. + +### Shooter +*Optional* Add the name of the shooter. + +### Date +*Optional* Enter the creation/shoot date of the file. + +### Frame Rate +*Optional* Glympse will try to automatically get the framerate from the file, if you're uploading a video file, enter the framerate here so the timecodes will be accurate. + +#### Timecode +*Optional* Glympse will try get the timecode from the file. If you wish to enter a different timecode or if you're uploading an audio file without timecode, entering a timecode here will calculate all the timecodes in the transcript from this starting timecode. + +### Translate +If checked, Glympse will attempt to translate the file to English. This is for foreign audio files, it doesn't work if the main content is English and there is a sentence or two in a foreign language. + +### Verbosity +This is how often the timecodes are injected in the transcript. It is possible to change this later in the transcript page. + +### File +Select your file. \ No newline at end of file diff --git a/create share.png b/create share.png deleted file mode 100644 index e9394f5..0000000 Binary files a/create share.png and /dev/null differ diff --git a/data/icons.yaml b/data/icons.yaml new file mode 100644 index 0000000..479a0db --- /dev/null +++ b/data/icons.yaml @@ -0,0 +1,3 @@ +gitea: +transcribe: +upload_cloud: \ No newline at end of file diff --git a/hugo.yaml b/hugo.yaml index 30ea825..6768999 100644 --- a/hugo.yaml +++ b/hugo.yaml @@ -34,7 +34,7 @@ menu: weight: 5 url: "https://git.themainframe.co.uk/josh/glympse_docs" params: - icon: github + icon: gitea params: navbar: diff --git a/isableFastRender/404.html b/isableFastRender/404.html deleted file mode 100644 index 12e77eb..0000000 --- a/isableFastRender/404.html +++ /dev/null @@ -1,27 +0,0 @@ -
-
- -

404

-
-

This page could not be found.

-
-
-
diff --git a/isableFastRender/about/index.html b/isableFastRender/about/index.html deleted file mode 100644 index b6908f1..0000000 --- a/isableFastRender/about/index.html +++ /dev/null @@ -1,394 +0,0 @@ - - - - - - - - - - - - - - About – Glympse - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - -
-
-
-

About

-
-
-

This is the about page.

- -
-
- -
-
-
- - - - - - - - - - - - diff --git a/isableFastRender/android-chrome-192x192.png b/isableFastRender/android-chrome-192x192.png deleted file mode 100644 index 7f0493c..0000000 Binary files a/isableFastRender/android-chrome-192x192.png and /dev/null differ diff --git a/isableFastRender/android-chrome-512x512.png b/isableFastRender/android-chrome-512x512.png deleted file mode 100644 index faea4c2..0000000 Binary files a/isableFastRender/android-chrome-512x512.png and /dev/null differ diff --git a/isableFastRender/apple-touch-icon.png b/isableFastRender/apple-touch-icon.png deleted file mode 100644 index eb281cb..0000000 Binary files a/isableFastRender/apple-touch-icon.png and /dev/null differ diff --git a/isableFastRender/categories/index.html b/isableFastRender/categories/index.html deleted file mode 100644 index 0f2bb1c..0000000 --- a/isableFastRender/categories/index.html +++ /dev/null @@ -1,381 +0,0 @@ - - - - - - - - - - - - - - Categories – Glympse - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - -
-
-
-

Categories

- -
-
-
- -
-
-
- - - - - - - - - - - - diff --git a/isableFastRender/categories/index.xml b/isableFastRender/categories/index.xml deleted file mode 100644 index 641ba42..0000000 --- a/isableFastRender/categories/index.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - Glympse – Categories - http://localhost:1313/categories/ - Recent content in Categories on Glympse - Hugo -- gohugo.io - en-gb - - - - - - - - - - - diff --git a/isableFastRender/css/compiled/main.css b/isableFastRender/css/compiled/main.css deleted file mode 100644 index dc3c35d..0000000 --- a/isableFastRender/css/compiled/main.css +++ /dev/null @@ -1,3547 +0,0 @@ -/* -! tailwindcss v3.4.10 | MIT License | https://tailwindcss.com -*//* -1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) -2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) -*/ - -*, -::before, -::after { - box-sizing: border-box; /* 1 */ - border-width: 0; /* 2 */ - border-style: solid; /* 2 */ - border-color: #e5e7eb; /* 2 */ -} - -::before, -::after { - --tw-content: ''; -} - -/* -1. Use a consistent sensible line-height in all browsers. -2. Prevent adjustments of font size after orientation changes in iOS. -3. Use a more readable tab size. -4. Use the user's configured `sans` font-family by default. -5. Use the user's configured `sans` font-feature-settings by default. -6. Use the user's configured `sans` font-variation-settings by default. -7. Disable tap highlights on iOS -*/ - -html, -:host { - line-height: 1.5; /* 1 */ - -webkit-text-size-adjust: 100%; /* 2 */ - -moz-tab-size: 4; /* 3 */ - -o-tab-size: 4; - tab-size: 4; /* 3 */ - font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; /* 4 */ - font-feature-settings: normal; /* 5 */ - font-variation-settings: normal; /* 6 */ - -webkit-tap-highlight-color: transparent; /* 7 */ -} - -/* -1. Remove the margin in all browsers. -2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. -*/ - -body { - margin: 0; /* 1 */ - line-height: inherit; /* 2 */ -} - -/* -1. Add the correct height in Firefox. -2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) -3. Ensure horizontal rules are visible by default. -*/ - -hr { - height: 0; /* 1 */ - color: inherit; /* 2 */ - border-top-width: 1px; /* 3 */ -} - -/* -Add the correct text decoration in Chrome, Edge, and Safari. -*/ - -abbr:where([title]) { - -webkit-text-decoration: underline dotted; - text-decoration: underline dotted; -} - -/* -Remove the default font size and weight for headings. -*/ - -h1, -h2, -h3, -h4, -h5, -h6 { - font-size: inherit; - font-weight: inherit; -} - -/* -Reset links to optimize for opt-in styling instead of opt-out. -*/ - -a { - color: inherit; - text-decoration: inherit; -} - -/* -Add the correct font weight in Edge and Safari. -*/ - -b, -strong { - font-weight: bolder; -} - -/* -1. Use the user's configured `mono` font-family by default. -2. Use the user's configured `mono` font-feature-settings by default. -3. Use the user's configured `mono` font-variation-settings by default. -4. Correct the odd `em` font sizing in all browsers. -*/ - -code, -kbd, -samp, -pre { - font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; /* 1 */ - font-feature-settings: normal; /* 2 */ - font-variation-settings: normal; /* 3 */ - font-size: 1em; /* 4 */ -} - -/* -Add the correct font size in all browsers. -*/ - -small { - font-size: 80%; -} - -/* -Prevent `sub` and `sup` elements from affecting the line height in all browsers. -*/ - -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sub { - bottom: -0.25em; -} - -sup { - top: -0.5em; -} - -/* -1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) -2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) -3. Remove gaps between table borders by default. -*/ - -table { - text-indent: 0; /* 1 */ - border-color: inherit; /* 2 */ - border-collapse: collapse; /* 3 */ -} - -/* -1. Change the font styles in all browsers. -2. Remove the margin in Firefox and Safari. -3. Remove default padding in all browsers. -*/ - -button, -input, -optgroup, -select, -textarea { - font-family: inherit; /* 1 */ - font-feature-settings: inherit; /* 1 */ - font-variation-settings: inherit; /* 1 */ - font-size: 100%; /* 1 */ - font-weight: inherit; /* 1 */ - line-height: inherit; /* 1 */ - letter-spacing: inherit; /* 1 */ - color: inherit; /* 1 */ - margin: 0; /* 2 */ - padding: 0; /* 3 */ -} - -/* -Remove the inheritance of text transform in Edge and Firefox. -*/ - -button, -select { - text-transform: none; -} - -/* -1. Correct the inability to style clickable types in iOS and Safari. -2. Remove default button styles. -*/ - -button, -input:where([type='button']), -input:where([type='reset']), -input:where([type='submit']) { - -webkit-appearance: button; /* 1 */ - background-color: transparent; /* 2 */ - background-image: none; /* 2 */ -} - -/* -Use the modern Firefox focus style for all focusable elements. -*/ - -:-moz-focusring { - outline: auto; -} - -/* -Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) -*/ - -:-moz-ui-invalid { - box-shadow: none; -} - -/* -Add the correct vertical alignment in Chrome and Firefox. -*/ - -progress { - vertical-align: baseline; -} - -/* -Correct the cursor style of increment and decrement buttons in Safari. -*/ - -::-webkit-inner-spin-button, -::-webkit-outer-spin-button { - height: auto; -} - -/* -1. Correct the odd appearance in Chrome and Safari. -2. Correct the outline style in Safari. -*/ - -[type='search'] { - -webkit-appearance: textfield; /* 1 */ - outline-offset: -2px; /* 2 */ -} - -/* -Remove the inner padding in Chrome and Safari on macOS. -*/ - -::-webkit-search-decoration { - -webkit-appearance: none; -} - -/* -1. Correct the inability to style clickable types in iOS and Safari. -2. Change font properties to `inherit` in Safari. -*/ - -::-webkit-file-upload-button { - -webkit-appearance: button; /* 1 */ - font: inherit; /* 2 */ -} - -/* -Add the correct display in Chrome and Safari. -*/ - -summary { - display: list-item; -} - -/* -Removes the default spacing and border for appropriate elements. -*/ - -blockquote, -dl, -dd, -h1, -h2, -h3, -h4, -h5, -h6, -hr, -figure, -p, -pre { - margin: 0; -} - -fieldset { - margin: 0; - padding: 0; -} - -legend { - padding: 0; -} - -ol, -ul, -menu { - list-style: none; - margin: 0; - padding: 0; -} - -/* -Reset default styling for dialogs. -*/ -dialog { - padding: 0; -} - -/* -Prevent resizing textareas horizontally by default. -*/ - -textarea { - resize: vertical; -} - -/* -1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) -2. Set the default placeholder color to the user's configured gray 400 color. -*/ - -input::-moz-placeholder, textarea::-moz-placeholder { - opacity: 1; /* 1 */ - color: #9ca3af; /* 2 */ -} - -input::placeholder, -textarea::placeholder { - opacity: 1; /* 1 */ - color: #9ca3af; /* 2 */ -} - -/* -Set the default cursor for buttons. -*/ - -button, -[role="button"] { - cursor: pointer; -} - -/* -Make sure disabled buttons don't get the pointer cursor. -*/ -:disabled { - cursor: default; -} - -/* -1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) -2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) - This can trigger a poorly considered lint error in some tools but is included by design. -*/ - -img, -svg, -video, -canvas, -audio, -iframe, -embed, -object { - display: block; /* 1 */ - vertical-align: middle; /* 2 */ -} - -/* -Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) -*/ - -img, -video { - max-width: 100%; - height: auto; -} - -/* Make elements with the HTML hidden attribute stay hidden by default */ -[hidden] { - display: none; -} - -*, ::before, ::after { - --tw-border-spacing-x: 0; - --tw-border-spacing-y: 0; - --tw-translate-x: 0; - --tw-translate-y: 0; - --tw-rotate: 0; - --tw-skew-x: 0; - --tw-skew-y: 0; - --tw-scale-x: 1; - --tw-scale-y: 1; - --tw-pan-x: ; - --tw-pan-y: ; - --tw-pinch-zoom: ; - --tw-scroll-snap-strictness: proximity; - --tw-gradient-from-position: ; - --tw-gradient-via-position: ; - --tw-gradient-to-position: ; - --tw-ordinal: ; - --tw-slashed-zero: ; - --tw-numeric-figure: ; - --tw-numeric-spacing: ; - --tw-numeric-fraction: ; - --tw-ring-inset: ; - --tw-ring-offset-width: 0px; - --tw-ring-offset-color: #fff; - --tw-ring-color: rgb(59 130 246 / 0.5); - --tw-ring-offset-shadow: 0 0 #0000; - --tw-ring-shadow: 0 0 #0000; - --tw-shadow: 0 0 #0000; - --tw-shadow-colored: 0 0 #0000; - --tw-blur: ; - --tw-brightness: ; - --tw-contrast: ; - --tw-grayscale: ; - --tw-hue-rotate: ; - --tw-invert: ; - --tw-saturate: ; - --tw-sepia: ; - --tw-drop-shadow: ; - --tw-backdrop-blur: ; - --tw-backdrop-brightness: ; - --tw-backdrop-contrast: ; - --tw-backdrop-grayscale: ; - --tw-backdrop-hue-rotate: ; - --tw-backdrop-invert: ; - --tw-backdrop-opacity: ; - --tw-backdrop-saturate: ; - --tw-backdrop-sepia: ; - --tw-contain-size: ; - --tw-contain-layout: ; - --tw-contain-paint: ; - --tw-contain-style: ; -} - -::backdrop { - --tw-border-spacing-x: 0; - --tw-border-spacing-y: 0; - --tw-translate-x: 0; - --tw-translate-y: 0; - --tw-rotate: 0; - --tw-skew-x: 0; - --tw-skew-y: 0; - --tw-scale-x: 1; - --tw-scale-y: 1; - --tw-pan-x: ; - --tw-pan-y: ; - --tw-pinch-zoom: ; - --tw-scroll-snap-strictness: proximity; - --tw-gradient-from-position: ; - --tw-gradient-via-position: ; - --tw-gradient-to-position: ; - --tw-ordinal: ; - --tw-slashed-zero: ; - --tw-numeric-figure: ; - --tw-numeric-spacing: ; - --tw-numeric-fraction: ; - --tw-ring-inset: ; - --tw-ring-offset-width: 0px; - --tw-ring-offset-color: #fff; - --tw-ring-color: rgb(59 130 246 / 0.5); - --tw-ring-offset-shadow: 0 0 #0000; - --tw-ring-shadow: 0 0 #0000; - --tw-shadow: 0 0 #0000; - --tw-shadow-colored: 0 0 #0000; - --tw-blur: ; - --tw-brightness: ; - --tw-contrast: ; - --tw-grayscale: ; - --tw-hue-rotate: ; - --tw-invert: ; - --tw-saturate: ; - --tw-sepia: ; - --tw-drop-shadow: ; - --tw-backdrop-blur: ; - --tw-backdrop-brightness: ; - --tw-backdrop-contrast: ; - --tw-backdrop-grayscale: ; - --tw-backdrop-hue-rotate: ; - --tw-backdrop-invert: ; - --tw-backdrop-opacity: ; - --tw-backdrop-saturate: ; - --tw-backdrop-sepia: ; - --tw-contain-size: ; - --tw-contain-layout: ; - --tw-contain-paint: ; - --tw-contain-style: ; -} -.hx-sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - white-space: nowrap; - border-width: 0; -} -.hx-pointer-events-none { - pointer-events: none; -} -.hx-fixed { - position: fixed; -} -.hx-absolute { - position: absolute; -} -.hx-relative { - position: relative; -} -.hx-sticky { - position: sticky; -} -.hx-inset-0 { - inset: 0px; -} -.hx-inset-x-0 { - left: 0px; - right: 0px; -} -.hx-inset-y-0 { - top: 0px; - bottom: 0px; -} -.hx-bottom-0 { - bottom: 0px; -} -.hx-left-\[24px\] { - left: 24px; -} -.hx-left-\[36px\] { - left: 36px; -} -.hx-right-0 { - right: 0px; -} -.hx-top-0 { - top: 0px; -} -.hx-top-16 { - top: 4rem; -} -.hx-top-8 { - top: 2rem; -} -.hx-top-\[40\%\] { - top: 40%; -} -.hx-top-full { - top: 100%; -} -.hx-z-10 { - z-index: 10; -} -.hx-z-20 { - z-index: 20; -} -.hx-z-\[-1\] { - z-index: -1; -} -.hx-order-last { - order: 9999; -} -.hx-m-\[11px\] { - margin: 11px; -} -.hx-mx-1 { - margin-left: 0.25rem; - margin-right: 0.25rem; -} -.hx-mx-2 { - margin-left: 0.5rem; - margin-right: 0.5rem; -} -.hx-mx-4 { - margin-left: 1rem; - margin-right: 1rem; -} -.hx-mx-auto { - margin-left: auto; - margin-right: auto; -} -.hx-my-1\.5 { - margin-top: 0.375rem; - margin-bottom: 0.375rem; -} -.hx-my-2 { - margin-top: 0.5rem; - margin-bottom: 0.5rem; -} -.-hx-mb-0\.5 { - margin-bottom: -0.125rem; -} -.-hx-ml-2 { - margin-left: -0.5rem; -} -.-hx-mr-2 { - margin-right: -0.5rem; -} -.-hx-mt-20 { - margin-top: -5rem; -} -.hx-mb-10 { - margin-bottom: 2.5rem; -} -.hx-mb-12 { - margin-bottom: 3rem; -} -.hx-mb-16 { - margin-bottom: 4rem; -} -.hx-mb-2 { - margin-bottom: 0.5rem; -} -.hx-mb-4 { - margin-bottom: 1rem; -} -.hx-mb-6 { - margin-bottom: 1.5rem; -} -.hx-mb-8 { - margin-bottom: 2rem; -} -.hx-ml-4 { - margin-left: 1rem; -} -.hx-mr-1 { - margin-right: 0.25rem; -} -.hx-mr-2 { - margin-right: 0.5rem; -} -.hx-mt-1 { - margin-top: 0.25rem; -} -.hx-mt-1\.5 { - margin-top: 0.375rem; -} -.hx-mt-12 { - margin-top: 3rem; -} -.hx-mt-16 { - margin-top: 4rem; -} -.hx-mt-2 { - margin-top: 0.5rem; -} -.hx-mt-4 { - margin-top: 1rem; -} -.hx-mt-5 { - margin-top: 1.25rem; -} -.hx-mt-6 { - margin-top: 1.5rem; -} -.hx-mt-8 { - margin-top: 2rem; -} -.hx-line-clamp-3 { - overflow: hidden; - display: -webkit-box; - -webkit-box-orient: vertical; - -webkit-line-clamp: 3; -} -.hx-block { - display: block; -} -.hx-inline-block { - display: inline-block; -} -.hx-inline { - display: inline; -} -.hx-flex { - display: flex; -} -.hx-inline-flex { - display: inline-flex; -} -.hx-grid { - display: grid; -} -.hx-hidden { - display: none; -} -.hx-aspect-auto { - aspect-ratio: auto; -} -.hx-h-0 { - height: 0px; -} -.hx-h-16 { - height: 4rem; -} -.hx-h-2 { - height: 0.5rem; -} -.hx-h-3\.5 { - height: 0.875rem; -} -.hx-h-4 { - height: 1rem; -} -.hx-h-5 { - height: 1.25rem; -} -.hx-h-7 { - height: 1.75rem; -} -.hx-h-\[18px\] { - height: 18px; -} -.hx-h-full { - height: 100%; -} -.hx-max-h-64 { - max-height: 16rem; -} -.hx-max-h-\[calc\(100vh-var\(--navbar-height\)-env\(safe-area-inset-bottom\)\)\] { - max-height: calc(100vh - var(--navbar-height) - env(safe-area-inset-bottom)); -} -.hx-max-h-\[min\(calc\(50vh-11rem-env\(safe-area-inset-bottom\)\)\,400px\)\] { - max-height: min(calc(50vh - 11rem - env(safe-area-inset-bottom)),400px); -} -.hx-min-h-\[100px\] { - min-height: 100px; -} -.hx-min-h-\[calc\(100vh-var\(--navbar-height\)\)\] { - min-height: calc(100vh - var(--navbar-height)); -} -.hx-w-2 { - width: 0.5rem; -} -.hx-w-3\.5 { - width: 0.875rem; -} -.hx-w-4 { - width: 1rem; -} -.hx-w-64 { - width: 16rem; -} -.hx-w-\[110\%\] { - width: 110%; -} -.hx-w-\[180\%\] { - width: 180%; -} -.hx-w-full { - width: 100%; -} -.hx-w-max { - width: -moz-max-content; - width: max-content; -} -.hx-w-screen { - width: 100vw; -} -.hx-min-w-0 { - min-width: 0px; -} -.hx-min-w-\[18px\] { - min-width: 18px; -} -.hx-min-w-\[24px\] { - min-width: 24px; -} -.hx-min-w-full { - min-width: 100%; -} -.hx-max-w-6xl { - max-width: 72rem; -} -.hx-max-w-\[50\%\] { - max-width: 50%; -} -.hx-max-w-\[90rem\] { - max-width: 90rem; -} -.hx-max-w-\[min\(calc\(100vw-2rem\)\,calc\(100\%\+20rem\)\)\] { - max-width: min(calc(100vw - 2rem),calc(100% + 20rem)); -} -.hx-max-w-none { - max-width: none; -} -.hx-max-w-screen-xl { - max-width: 1280px; -} -.hx-shrink-0 { - flex-shrink: 0; -} -.hx-grow { - flex-grow: 1; -} -.hx-origin-center { - transform-origin: center; -} -.hx-cursor-default { - cursor: default; -} -.hx-cursor-pointer { - cursor: pointer; -} -.hx-select-none { - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; -} -.hx-scroll-my-6 { - scroll-margin-top: 1.5rem; - scroll-margin-bottom: 1.5rem; -} -.hx-scroll-py-6 { - scroll-padding-top: 1.5rem; - scroll-padding-bottom: 1.5rem; -} -.hx-list-none { - list-style-type: none; -} -.hx-appearance-none { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; -} -.hx-flex-col { - flex-direction: column; -} -.hx-flex-wrap { - flex-wrap: wrap; -} -.hx-items-start { - align-items: flex-start; -} -.hx-items-center { - align-items: center; -} -.hx-justify-start { - justify-content: flex-start; -} -.hx-justify-end { - justify-content: flex-end; -} -.hx-justify-center { - justify-content: center; -} -.hx-justify-between { - justify-content: space-between; -} -.hx-justify-items-start { - justify-items: start; -} -.hx-gap-1 { - gap: 0.25rem; -} -.hx-gap-2 { - gap: 0.5rem; -} -.hx-gap-4 { - gap: 1rem; -} -.hx-gap-x-1\.5 { - -moz-column-gap: 0.375rem; - column-gap: 0.375rem; -} -.hx-gap-y-2 { - row-gap: 0.5rem; -} -.hx-overflow-auto { - overflow: auto; -} -.hx-overflow-hidden { - overflow: hidden; -} -.hx-overflow-x-auto { - overflow-x: auto; -} -.hx-overflow-y-auto { - overflow-y: auto; -} -.hx-overflow-x-hidden { - overflow-x: hidden; -} -.hx-overflow-y-hidden { - overflow-y: hidden; -} -.hx-overscroll-contain { - overscroll-behavior: contain; -} -.hx-overscroll-x-contain { - overscroll-behavior-x: contain; -} -.hx-text-ellipsis { - text-overflow: ellipsis; -} -.hx-whitespace-nowrap { - white-space: nowrap; -} -.hx-break-words { - overflow-wrap: break-word; -} -.hx-rounded { - border-radius: 0.25rem; -} -.hx-rounded-3xl { - border-radius: 1.5rem; -} -.hx-rounded-full { - border-radius: 9999px; -} -.hx-rounded-lg { - border-radius: 0.5rem; -} -.hx-rounded-md { - border-radius: 0.375rem; -} -.hx-rounded-sm { - border-radius: 0.125rem; -} -.hx-rounded-xl { - border-radius: 0.75rem; -} -.hx-rounded-t { - border-top-left-radius: 0.25rem; - border-top-right-radius: 0.25rem; -} -.hx-border { - border-width: 1px; -} -.hx-border-b { - border-bottom-width: 1px; -} -.hx-border-b-2 { - border-bottom-width: 2px; -} -.hx-border-t { - border-top-width: 1px; -} -.hx-border-black\/5 { - border-color: rgb(0 0 0 / 0.05); -} -.hx-border-blue-200 { - --tw-border-opacity: 1; - border-color: rgb(191 219 254 / var(--tw-border-opacity)); -} -.hx-border-gray-200 { - --tw-border-opacity: 1; - border-color: rgb(229 231 235 / var(--tw-border-opacity)); -} -.hx-border-gray-500 { - --tw-border-opacity: 1; - border-color: rgb(107 114 128 / var(--tw-border-opacity)); -} -.hx-border-orange-100 { - --tw-border-opacity: 1; - border-color: rgb(255 237 213 / var(--tw-border-opacity)); -} -.hx-border-red-200 { - --tw-border-opacity: 1; - border-color: rgb(254 202 202 / var(--tw-border-opacity)); -} -.hx-border-transparent { - border-color: transparent; -} -.hx-border-yellow-100 { - --tw-border-opacity: 1; - border-color: rgb(254 249 195 / var(--tw-border-opacity)); -} -.hx-bg-black\/80 { - background-color: rgb(0 0 0 / 0.8); -} -.hx-bg-black\/\[\.05\] { - background-color: rgb(0 0 0 / .05); -} -.hx-bg-blue-100 { - --tw-bg-opacity: 1; - background-color: rgb(219 234 254 / var(--tw-bg-opacity)); -} -.hx-bg-gray-100 { - --tw-bg-opacity: 1; - background-color: rgb(243 244 246 / var(--tw-bg-opacity)); -} -.hx-bg-neutral-50 { - --tw-bg-opacity: 1; - background-color: rgb(250 250 250 / var(--tw-bg-opacity)); -} -.hx-bg-orange-50 { - --tw-bg-opacity: 1; - background-color: rgb(255 247 237 / var(--tw-bg-opacity)); -} -.hx-bg-primary-100 { - --tw-bg-opacity: 1; - background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness)) / 50) * 44) / var(--tw-bg-opacity)); -} -.hx-bg-primary-400 { - --tw-bg-opacity: 1; - background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness)) / 50) * 16) / var(--tw-bg-opacity)); -} -.hx-bg-primary-600 { - --tw-bg-opacity: 1; - background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 45) / var(--tw-bg-opacity)); -} -.hx-bg-primary-700\/5 { - background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 39) / 0.05); -} -.hx-bg-red-100 { - --tw-bg-opacity: 1; - background-color: rgb(254 226 226 / var(--tw-bg-opacity)); -} -.hx-bg-transparent { - background-color: transparent; -} -.hx-bg-white { - --tw-bg-opacity: 1; - background-color: rgb(255 255 255 / var(--tw-bg-opacity)); -} -.hx-bg-yellow-50 { - --tw-bg-opacity: 1; - background-color: rgb(254 252 232 / var(--tw-bg-opacity)); -} -.hx-bg-gradient-to-r { - background-image: linear-gradient(to right, var(--tw-gradient-stops)); -} -.hx-from-gray-900 { - --tw-gradient-from: #111827 var(--tw-gradient-from-position); - --tw-gradient-to: rgb(17 24 39 / 0) var(--tw-gradient-to-position); - --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); -} -.hx-to-gray-600 { - --tw-gradient-to: #4b5563 var(--tw-gradient-to-position); -} -.hx-bg-clip-text { - -webkit-background-clip: text; - background-clip: text; -} -.hx-p-0\.5 { - padding: 0.125rem; -} -.hx-p-1 { - padding: 0.25rem; -} -.hx-p-1\.5 { - padding: 0.375rem; -} -.hx-p-2 { - padding: 0.5rem; -} -.hx-p-4 { - padding: 1rem; -} -.hx-p-6 { - padding: 1.5rem; -} -.hx-px-1\.5 { - padding-left: 0.375rem; - padding-right: 0.375rem; -} -.hx-px-2 { - padding-left: 0.5rem; - padding-right: 0.5rem; -} -.hx-px-2\.5 { - padding-left: 0.625rem; - padding-right: 0.625rem; -} -.hx-px-3 { - padding-left: 0.75rem; - padding-right: 0.75rem; -} -.hx-px-4 { - padding-left: 1rem; - padding-right: 1rem; -} -.hx-px-6 { - padding-left: 1.5rem; - padding-right: 1.5rem; -} -.hx-py-1 { - padding-top: 0.25rem; - padding-bottom: 0.25rem; -} -.hx-py-1\.5 { - padding-top: 0.375rem; - padding-bottom: 0.375rem; -} -.hx-py-12 { - padding-top: 3rem; - padding-bottom: 3rem; -} -.hx-py-2 { - padding-top: 0.5rem; - padding-bottom: 0.5rem; -} -.hx-py-2\.5 { - padding-top: 0.625rem; - padding-bottom: 0.625rem; -} -.hx-py-3 { - padding-top: 0.75rem; - padding-bottom: 0.75rem; -} -.hx-py-4 { - padding-top: 1rem; - padding-bottom: 1rem; -} -.hx-pb-8 { - padding-bottom: 2rem; -} -.hx-pb-\[env\(safe-area-inset-bottom\)\] { - padding-bottom: env(safe-area-inset-bottom); -} -.hx-pb-px { - padding-bottom: 1px; -} -.hx-pl-\[max\(env\(safe-area-inset-left\)\,1\.5rem\)\] { - padding-left: max(env(safe-area-inset-left),1.5rem); -} -.hx-pr-2 { - padding-right: 0.5rem; -} -.hx-pr-4 { - padding-right: 1rem; -} -.hx-pr-\[calc\(env\(safe-area-inset-right\)-1\.5rem\)\] { - padding-right: calc(env(safe-area-inset-right) - 1.5rem); -} -.hx-pr-\[max\(env\(safe-area-inset-left\)\,1\.5rem\)\] { - padding-right: max(env(safe-area-inset-left),1.5rem); -} -.hx-pr-\[max\(env\(safe-area-inset-right\)\,1\.5rem\)\] { - padding-right: max(env(safe-area-inset-right),1.5rem); -} -.hx-pt-4 { - padding-top: 1rem; -} -.hx-pt-6 { - padding-top: 1.5rem; -} -.hx-pt-8 { - padding-top: 2rem; -} -.hx-text-left { - text-align: left; -} -.hx-text-center { - text-align: center; -} -.hx-align-text-bottom { - vertical-align: text-bottom; -} -.hx-align-\[-2\.5px\] { - vertical-align: -2.5px; -} -.hx-font-mono { - font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; -} -.hx-text-2xl { - font-size: 1.5rem; -} -.hx-text-4xl { - font-size: 2.25rem; -} -.hx-text-\[\.65rem\] { - font-size: .65rem; -} -.hx-text-\[10px\] { - font-size: 10px; -} -.hx-text-base { - font-size: 1rem; -} -.hx-text-lg { - font-size: 1.125rem; -} -.hx-text-sm { - font-size: .875rem; -} -.hx-text-xl { - font-size: 1.25rem; -} -.hx-text-xs { - font-size: .75rem; -} -.hx-font-bold { - font-weight: 700; -} -.hx-font-extrabold { - font-weight: 800; -} -.hx-font-medium { - font-weight: 500; -} -.hx-font-normal { - font-weight: 400; -} -.hx-font-semibold { - font-weight: 600; -} -.hx-capitalize { - text-transform: capitalize; -} -.hx-leading-5 { - line-height: 1.25rem; -} -.hx-leading-6 { - line-height: 1.5rem; -} -.hx-leading-7 { - line-height: 1.75rem; -} -.hx-leading-none { - line-height: 1; -} -.hx-leading-tight { - line-height: 1.25; -} -.hx-tracking-tight { - letter-spacing: -0.015em; -} -.hx-text-\[color\:hsl\(var\(--primary-hue\)\,100\%\,50\%\)\] { - --tw-text-opacity: 1; - color: hsl(var(--primary-hue) 100% 50% / var(--tw-text-opacity)); -} -.hx-text-blue-900 { - --tw-text-opacity: 1; - color: rgb(30 58 138 / var(--tw-text-opacity)); -} -.hx-text-current { - color: currentColor; -} -.hx-text-gray-100 { - --tw-text-opacity: 1; - color: rgb(243 244 246 / var(--tw-text-opacity)); -} -.hx-text-gray-500 { - --tw-text-opacity: 1; - color: rgb(107 114 128 / var(--tw-text-opacity)); -} -.hx-text-gray-600 { - --tw-text-opacity: 1; - color: rgb(75 85 99 / var(--tw-text-opacity)); -} -.hx-text-gray-700 { - --tw-text-opacity: 1; - color: rgb(55 65 81 / var(--tw-text-opacity)); -} -.hx-text-gray-800 { - --tw-text-opacity: 1; - color: rgb(31 41 55 / var(--tw-text-opacity)); -} -.hx-text-gray-900 { - --tw-text-opacity: 1; - color: rgb(17 24 39 / var(--tw-text-opacity)); -} -.hx-text-orange-800 { - --tw-text-opacity: 1; - color: rgb(154 52 18 / var(--tw-text-opacity)); -} -.hx-text-primary-800 { - --tw-text-opacity: 1; - color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 32) / var(--tw-text-opacity)); -} -.hx-text-red-900 { - --tw-text-opacity: 1; - color: rgb(127 29 29 / var(--tw-text-opacity)); -} -.hx-text-slate-900 { - --tw-text-opacity: 1; - color: rgb(15 23 42 / var(--tw-text-opacity)); -} -.hx-text-transparent { - color: transparent; -} -.hx-text-white { - --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity)); -} -.hx-text-yellow-900 { - --tw-text-opacity: 1; - color: rgb(113 63 18 / var(--tw-text-opacity)); -} -.hx-underline { - text-decoration-line: underline; -} -.hx-no-underline { - text-decoration-line: none; -} -.hx-decoration-from-font { - text-decoration-thickness: from-font; -} -.hx-underline-offset-2 { - text-underline-offset: 2px; -} -.hx-opacity-0 { - opacity: 0; -} -.hx-opacity-50 { - opacity: 0.5; -} -.hx-opacity-80 { - opacity: 0.8; -} -.hx-shadow { - --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1); - --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} -.hx-shadow-\[0_-12px_16px_\#fff\] { - --tw-shadow: 0 -12px 16px #fff; - --tw-shadow-colored: 0 -12px 16px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} -.hx-shadow-\[0_-12px_16px_white\] { - --tw-shadow: 0 -12px 16px white; - --tw-shadow-colored: 0 -12px 16px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} -.hx-shadow-\[0_2px_4px_rgba\(0\,0\,0\,\.02\)\,0_1px_0_rgba\(0\,0\,0\,\.06\)\] { - --tw-shadow: 0 2px 4px rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.06); - --tw-shadow-colored: 0 2px 4px var(--tw-shadow-color), 0 1px 0 var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} -.hx-shadow-lg { - --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); - --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} -.hx-shadow-sm { - --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05); - --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} -.hx-shadow-xl { - --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1); - --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} -.hx-shadow-gray-100 { - --tw-shadow-color: #f3f4f6; - --tw-shadow: var(--tw-shadow-colored); -} -.hx-ring-1 { - --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); - --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color); - box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); -} -.hx-ring-black\/5 { - --tw-ring-color: rgb(0 0 0 / 0.05); -} -.hx-transition { - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; -} -.hx-transition-all { - transition-property: all; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; -} -.hx-transition-colors { - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; -} -.hx-transition-opacity { - transition-property: opacity; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; -} -.hx-transition-transform { - transition-property: transform; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; -} -.hx-duration-200 { - transition-duration: 200ms; -} -.hx-duration-75 { - transition-duration: 75ms; -} -.hx-ease-in { - transition-timing-function: cubic-bezier(0.4, 0, 1, 1); -} -.\[-webkit-tap-highlight-color\:transparent\] { - -webkit-tap-highlight-color: transparent; -} -.\[-webkit-touch-callout\:none\] { - -webkit-touch-callout: none; -} -.\[counter-reset\:step\] { - counter-reset: step; -} -.\[hyphens\:auto\] { - -webkit-hyphens: auto; - hyphens: auto; -} -.\[transition\:background-color_1\.5s_ease\] { - transition: background-color 1.5s ease; -} -.\[word-break\:break-word\] { - word-break: break-word; -} -.content :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)) { - margin-top: 0.5rem; - font-size: 2.25rem; - font-weight: 700; - letter-spacing: -0.015em; - --tw-text-opacity: 1; - color: rgb(15 23 42 / var(--tw-text-opacity)); -} -.content :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)):is(html[class~="dark"] *) { - --tw-text-opacity: 1; - color: rgb(241 245 249 / var(--tw-text-opacity)); -} -.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)) { - margin-top: 2.5rem; - border-bottom-width: 1px; - border-color: rgb(229 229 229 / 0.7); - padding-bottom: 0.25rem; - font-size: 1.875rem; - font-weight: 600; - letter-spacing: -0.015em; - --tw-text-opacity: 1; - color: rgb(15 23 42 / var(--tw-text-opacity)); -} -@media (prefers-contrast: more) { - - .content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)) { - --tw-border-opacity: 1; - border-color: rgb(163 163 163 / var(--tw-border-opacity)); - } -} -.content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)):is(html[class~="dark"] *) { - border-color: hsl(var(--primary-hue) var(--primary-saturation) calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness)) / 50) * 44) / 0.1); - --tw-text-opacity: 1; - color: rgb(241 245 249 / var(--tw-text-opacity)); -} -@media (prefers-contrast: more) { - - .content :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)):is(html[class~="dark"] *) { - --tw-border-opacity: 1; - border-color: rgb(163 163 163 / var(--tw-border-opacity)); - } -} -.content :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)) { - margin-top: 2rem; - font-size: 1.5rem; - font-weight: 600; - letter-spacing: -0.015em; - --tw-text-opacity: 1; - color: rgb(15 23 42 / var(--tw-text-opacity)); -} -.content :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)):is(html[class~="dark"] *) { - --tw-text-opacity: 1; - color: rgb(241 245 249 / var(--tw-text-opacity)); -} -.content :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)) { - margin-top: 2rem; - font-size: 1.25rem; - font-weight: 600; - letter-spacing: -0.015em; - --tw-text-opacity: 1; - color: rgb(15 23 42 / var(--tw-text-opacity)); -} -.content :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)):is(html[class~="dark"] *) { - --tw-text-opacity: 1; - color: rgb(241 245 249 / var(--tw-text-opacity)); -} -.content :where(h5):not(:where([class~=not-prose],[class~=not-prose] *)) { - margin-top: 2rem; - font-size: 1.125rem; - font-weight: 600; - letter-spacing: -0.015em; - --tw-text-opacity: 1; - color: rgb(15 23 42 / var(--tw-text-opacity)); -} -.content :where(h5):not(:where([class~=not-prose],[class~=not-prose] *)):is(html[class~="dark"] *) { - --tw-text-opacity: 1; - color: rgb(241 245 249 / var(--tw-text-opacity)); -} -.content :where(h6):not(:where([class~=not-prose],[class~=not-prose] *)) { - margin-top: 2rem; - font-size: 1rem; - font-weight: 600; - letter-spacing: -0.015em; - --tw-text-opacity: 1; - color: rgb(15 23 42 / var(--tw-text-opacity)); -} -.content :where(h6):not(:where([class~=not-prose],[class~=not-prose] *)):is(html[class~="dark"] *) { - --tw-text-opacity: 1; - color: rgb(241 245 249 / var(--tw-text-opacity)); -} -.content :where(p):not(:where([class~=not-prose],[class~=not-prose] *)) { - margin-top: 1.5rem; - line-height: 1.75rem; -} -.content :where(p):not(:where([class~=not-prose],[class~=not-prose] *)):first-child { - margin-top: 0px; -} -.content :where(a):not(:where([class~=not-prose],[class~=not-prose] *)) { - --tw-text-opacity: 1; - color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 45) / var(--tw-text-opacity)); - text-decoration-line: underline; - text-decoration-thickness: from-font; - text-underline-position: from-font; -} -.content :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)) { - margin-top: 1.5rem; - --tw-border-opacity: 1; - border-color: rgb(209 213 219 / var(--tw-border-opacity)); - font-style: italic; - --tw-text-opacity: 1; - color: rgb(55 65 81 / var(--tw-text-opacity)); -} -.content :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)):first-child { - margin-top: 0px; -} -.content :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)):is(html[class~="dark"] *) { - --tw-border-opacity: 1; - border-color: rgb(55 65 81 / var(--tw-border-opacity)); - --tw-text-opacity: 1; - color: rgb(156 163 175 / var(--tw-text-opacity)); -} -.content :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)):where([dir="ltr"], [dir="ltr"] *) { - border-left-width: 2px; - padding-left: 1.5rem; -} -.content :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)):where([dir="rtl"], [dir="rtl"] *) { - border-right-width: 2px; - padding-right: 1.5rem; -} -.content :where(pre):not(:where(.hextra-code-block pre, [class~=not-prose],[class~=not-prose] *)) { - margin-bottom: 1rem; - overflow-x: auto; - border-radius: 0.75rem; - background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 39) / 0.05); - padding-top: 1rem; - padding-bottom: 1rem; - font-size: .9em; - font-weight: 500; - -webkit-font-smoothing: auto; - -moz-osx-font-smoothing: auto; -} -@media (prefers-contrast: more) { - - .content :where(pre):not(:where(.hextra-code-block pre, [class~=not-prose],[class~=not-prose] *)) { - border-width: 1px; - border-color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 24) / 0.2); - --tw-contrast: contrast(1.5); - filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); - } -} -.content :where(pre):not(:where(.hextra-code-block pre, [class~=not-prose],[class~=not-prose] *)):is(html[class~="dark"] *) { - background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness)) / 50) * 27) / 0.1); -} -@media (prefers-contrast: more) { - - .content :where(pre):not(:where(.hextra-code-block pre, [class~=not-prose],[class~=not-prose] *)):is(html[class~="dark"] *) { - border-color: hsl(var(--primary-hue) var(--primary-saturation) calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness)) / 50) * 44) / 0.4); - } -} -.content :where(code):not(:where(.hextra-code-block code, [class~=not-prose],[class~=not-prose] *)) { - overflow-wrap: break-word; - border-radius: 0.375rem; - border-width: 1px; - border-color: rgb(0 0 0 / var(--tw-border-opacity)); - --tw-border-opacity: 0.04; - background-color: rgb(0 0 0 / var(--tw-bg-opacity)); - --tw-bg-opacity: 0.03; - padding-top: 0.125rem; - padding-bottom: 0.125rem; - padding-left: .25em; - padding-right: .25em; - font-size: .9em; -} -.content :where(code):not(:where(.hextra-code-block code, [class~=not-prose],[class~=not-prose] *)):is(html[class~="dark"] *) { - border-color: rgb(255 255 255 / 0.1); - background-color: rgb(255 255 255 / 0.1); -} -.content :where(table):not(:where(.hextra-code-block table, [class~=not-prose],[class~=not-prose] *)) { - margin-top: 1.5rem; - display: block; - overflow-x: auto; - padding: 0px; -} -.content :where(table):not(:where(.hextra-code-block table, [class~=not-prose],[class~=not-prose] *)):first-child { - margin-top: 0px; -} -.content :where(table):not(:where(.hextra-code-block table, [class~=not-prose],[class~=not-prose] *)) tr { - margin: 0px; - border-top-width: 1px; - --tw-border-opacity: 1; - border-color: rgb(209 213 219 / var(--tw-border-opacity)); - padding: 0px; -} -.content :where(table):not(:where(.hextra-code-block table, [class~=not-prose],[class~=not-prose] *)) tr:nth-child(even) { - --tw-bg-opacity: 1; - background-color: rgb(243 244 246 / var(--tw-bg-opacity)); -} -.content :where(table):not(:where(.hextra-code-block table, [class~=not-prose],[class~=not-prose] *)) tr:is(html[class~="dark"] *) { - --tw-border-opacity: 1; - border-color: rgb(75 85 99 / var(--tw-border-opacity)); -} -.content :where(table):not(:where(.hextra-code-block table, [class~=not-prose],[class~=not-prose] *)) tr:is(html[class~="dark"] *):nth-child(even) { - background-color: rgb(75 85 99 / 0.2); -} -.content :where(table):not(:where(.hextra-code-block table, [class~=not-prose],[class~=not-prose] *)) th { - margin: 0px; - border-width: 1px; - --tw-border-opacity: 1; - border-color: rgb(209 213 219 / var(--tw-border-opacity)); - padding-left: 1rem; - padding-right: 1rem; - padding-top: 0.5rem; - padding-bottom: 0.5rem; - font-weight: 600; -} -.content :where(table):not(:where(.hextra-code-block table, [class~=not-prose],[class~=not-prose] *)) th:is(html[class~="dark"] *) { - --tw-border-opacity: 1; - border-color: rgb(75 85 99 / var(--tw-border-opacity)); -} -.content :where(table):not(:where(.hextra-code-block table, [class~=not-prose],[class~=not-prose] *)) td { - margin: 0px; - border-width: 1px; - --tw-border-opacity: 1; - border-color: rgb(209 213 219 / var(--tw-border-opacity)); - padding-left: 1rem; - padding-right: 1rem; - padding-top: 0.5rem; - padding-bottom: 0.5rem; -} -.content :where(table):not(:where(.hextra-code-block table, [class~=not-prose],[class~=not-prose] *)) td:is(html[class~="dark"] *) { - --tw-border-opacity: 1; - border-color: rgb(75 85 99 / var(--tw-border-opacity)); -} -.content :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)) { - margin-top: 1.5rem; - list-style-type: decimal; -} -.content :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)):first-child { - margin-top: 0px; -} -.content :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)):where([dir="ltr"], [dir="ltr"] *) { - margin-left: 1.5rem; -} -.content :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)):where([dir="rtl"], [dir="rtl"] *) { - margin-right: 1.5rem; -} -.content :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)) li { - margin-top: 0.5rem; - margin-bottom: 0.5rem; -} -.content :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)) { - margin-top: 1.5rem; - list-style-type: disc; -} -.content :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)):first-child { - margin-top: 0px; -} -.content :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)):where([dir="ltr"], [dir="ltr"] *) { - margin-left: 1.5rem; -} -.content :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)):where([dir="rtl"], [dir="rtl"] *) { - margin-right: 1.5rem; -} -.content :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)) li { - margin-top: 0.5rem; - margin-bottom: 0.5rem; -} -/* This CSS rule targets the first nested unordered (ul) or ordered (ol) list - inside the list item (li) of any parent ul or ol. - The rule sets the top margin of the selected list to zero. */ -.content :where(ul, ol) > li > :where(ul, ol):not(:where([class~=not-prose],[class~=not-prose] *)) { - margin-top: 0px; -} -.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)) { - overflow-wrap: break-word; - border-radius: 0.375rem; - border-width: 1px; - border-color: rgb(0 0 0 / var(--tw-border-opacity)); - --tw-border-opacity: 0.04; - background-color: rgb(0 0 0 / var(--tw-bg-opacity)); - --tw-bg-opacity: 0.03; - padding-top: 0.125rem; - padding-bottom: 0.125rem; - padding-left: .25em; - padding-right: .25em; - font-size: .9em; -} -.content :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)):is(html[class~="dark"] *) { - border-color: rgb(255 255 255 / 0.1); - background-color: rgb(255 255 255 / 0.1); -} -.content :where(pre.mermaid):not(:where(.hextra-code-block pre, [class~=not-prose],[class~=not-prose] *)) { - border-radius: 0px; - background-color: transparent; -} -.content :where(pre.mermaid):not(:where(.hextra-code-block pre, [class~=not-prose],[class~=not-prose] *)):is(html[class~="dark"] *) { - background-color: transparent; -} -.content :where(img):not(:where([class~=not-prose],[class~=not-prose] *)) { - margin-left: auto; - margin-right: auto; - margin-top: 1rem; - margin-bottom: 1rem; - border-radius: 0.375rem; -} -.content :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)) figcaption { - margin-top: 0.5rem; - display: block; - text-align: center; - font-size: .875rem; - --tw-text-opacity: 1; - color: rgb(107 114 128 / var(--tw-text-opacity)); -} -.content :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)) figcaption:is(html[class~="dark"] *) { - --tw-text-opacity: 1; - color: rgb(156 163 175 / var(--tw-text-opacity)); -} -/* Definition list */ -.content :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)) dt { - margin-top: 1.5rem; - font-weight: 600; -} -.content :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)) dd { - margin-top: 0.5rem; - margin-bottom: 0.5rem; - padding-inline-start: 1.5rem; -} -.content .footnotes { - margin-top: 3rem; - font-size: .875rem; -} -.subheading-anchor { - opacity: 0; - transition-property: opacity; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; -} -.subheading-anchor:where([dir="ltr"], [dir="ltr"] *) { - margin-left: 0.25rem; -} -.subheading-anchor:where([dir="rtl"], [dir="rtl"] *) { - margin-right: 0.25rem; -} -span:target + .subheading-anchor, - :hover > .subheading-anchor, - .subheading-anchor:focus { - opacity: 1; -} -span + .subheading-anchor, - :hover > .subheading-anchor { - text-decoration-line: none !important; -} -.subheading-anchor:after { - padding-left: 0.25rem; - padding-right: 0.25rem; - --tw-content: '#'; - content: var(--tw-content); - --tw-text-opacity: 1; - color: rgb(209 213 219 / var(--tw-text-opacity)); -} -.subheading-anchor:is(html[class~="dark"] *):after { - --tw-text-opacity: 1; - color: rgb(64 64 64 / var(--tw-text-opacity)); -} -span:target + .subheading-anchor:after { - --tw-text-opacity: 1; - color: rgb(156 163 175 / var(--tw-text-opacity)); -} -span:target + .subheading-anchor:is(html[class~="dark"] *):after { - --tw-text-opacity: 1; - color: rgb(115 115 115 / var(--tw-text-opacity)); -} -article details > summary::-webkit-details-marker { - display: none; -} -article details > summary::before { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='hx-h-5 hx-w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z' clip-rule='evenodd' /%3E%3C/svg%3E"); - height: 1.2em; - width: 1.2em; - vertical-align: -4px; - padding: 0 0.6em; - } -:lang(fa) ol { - list-style-type: persian; -} -/* Code syntax highlight */ -/* Light theme for syntax highlight */ -/* Generated using `hugo gen chromastyles --style=github` */ -.highlight { - /* Background .bg { background-color: #ffffff; } */ - /* PreWrapper .chroma { background-color: #ffffff; } */ - /* Other .chroma .x { } */ - /* CodeLine .chroma .cl { } */ - /* LineTableTD .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; } */ - /* LineTable .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; } */ - /* LineHighlight .chroma .hl { background-color: #ffffcc } */ - /* LineNumbersTable .chroma .lnt { white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f } */ - /* LineNumbers .chroma .ln { white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f } */ - /* Name .chroma .n { } */ - /* NameFunctionMagic .chroma .fm { } */ - /* NameOther .chroma .nx { } */ - /* NameProperty .chroma .py { } */ - /* NameVariableMagic .chroma .vm { } */ - /* Literal .chroma .l { } */ - /* LiteralDate .chroma .ld { } */ - /* Punctuation .chroma .p { } */ - /* Generic .chroma .g { } */ -} -/* Error */ -.highlight .chroma .err { color: #a61717; background-color: #e3d2d2 } -/* LineLink */ -.highlight .chroma .lnlinks { outline: none; text-decoration: none; color: inherit } -/* Line */ -.highlight .chroma .line { display: flex; } -/* Keyword */ -.highlight .chroma .k { color: #000000; font-weight: bold } -/* KeywordConstant */ -.highlight .chroma .kc { color: #000000; font-weight: bold } -/* KeywordDeclaration */ -.highlight .chroma .kd { color: #000000; font-weight: bold } -/* KeywordNamespace */ -.highlight .chroma .kn { color: #000000; font-weight: bold } -/* KeywordPseudo */ -.highlight .chroma .kp { color: #000000; font-weight: bold } -/* KeywordReserved */ -.highlight .chroma .kr { color: #000000; font-weight: bold } -/* KeywordType */ -.highlight .chroma .kt { color: #445588; font-weight: bold } -/* NameAttribute */ -.highlight .chroma .na { color: #008080 } -/* NameBuiltin */ -.highlight .chroma .nb { color: #0086b3 } -/* NameBuiltinPseudo */ -.highlight .chroma .bp { color: #999999 } -/* NameClass */ -.highlight .chroma .nc { color: #445588; font-weight: bold } -/* NameConstant */ -.highlight .chroma .no { color: #008080 } -/* NameDecorator */ -.highlight .chroma .nd { color: #3c5d5d; font-weight: bold } -/* NameEntity */ -.highlight .chroma .ni { color: #800080 } -/* NameException */ -.highlight .chroma .ne { color: #990000; font-weight: bold } -/* NameFunction */ -.highlight .chroma .nf { color: #990000; font-weight: bold } -/* NameLabel */ -.highlight .chroma .nl { color: #990000; font-weight: bold } -/* NameNamespace */ -.highlight .chroma .nn { color: #555555 } -/* NameTag */ -.highlight .chroma .nt { color: #000080 } -/* NameVariable */ -.highlight .chroma .nv { color: #008080 } -/* NameVariableClass */ -.highlight .chroma .vc { color: #008080 } -/* NameVariableGlobal */ -.highlight .chroma .vg { color: #008080 } -/* NameVariableInstance */ -.highlight .chroma .vi { color: #008080 } -/* LiteralString */ -.highlight .chroma .s { color: #dd1144 } -/* LiteralStringAffix */ -.highlight .chroma .sa { color: #dd1144 } -/* LiteralStringBacktick */ -.highlight .chroma .sb { color: #dd1144 } -/* LiteralStringChar */ -.highlight .chroma .sc { color: #dd1144 } -/* LiteralStringDelimiter */ -.highlight .chroma .dl { color: #dd1144 } -/* LiteralStringDoc */ -.highlight .chroma .sd { color: #dd1144 } -/* LiteralStringDouble */ -.highlight .chroma .s2 { color: #dd1144 } -/* LiteralStringEscape */ -.highlight .chroma .se { color: #dd1144 } -/* LiteralStringHeredoc */ -.highlight .chroma .sh { color: #dd1144 } -/* LiteralStringInterpol */ -.highlight .chroma .si { color: #dd1144 } -/* LiteralStringOther */ -.highlight .chroma .sx { color: #dd1144 } -/* LiteralStringRegex */ -.highlight .chroma .sr { color: #009926 } -/* LiteralStringSingle */ -.highlight .chroma .s1 { color: #dd1144 } -/* LiteralStringSymbol */ -.highlight .chroma .ss { color: #990073 } -/* LiteralNumber */ -.highlight .chroma .m { color: #009999 } -/* LiteralNumberBin */ -.highlight .chroma .mb { color: #009999 } -/* LiteralNumberFloat */ -.highlight .chroma .mf { color: #009999 } -/* LiteralNumberHex */ -.highlight .chroma .mh { color: #009999 } -/* LiteralNumberInteger */ -.highlight .chroma .mi { color: #009999 } -/* LiteralNumberIntegerLong */ -.highlight .chroma .il { color: #009999 } -/* LiteralNumberOct */ -.highlight .chroma .mo { color: #009999 } -/* Operator */ -.highlight .chroma .o { color: #000000; font-weight: bold } -/* OperatorWord */ -.highlight .chroma .ow { color: #000000; font-weight: bold } -/* Comment */ -.highlight .chroma .c { color: #999988; font-style: italic } -/* CommentHashbang */ -.highlight .chroma .ch { color: #999988; font-style: italic } -/* CommentMultiline */ -.highlight .chroma .cm { color: #999988; font-style: italic } -/* CommentSingle */ -.highlight .chroma .c1 { color: #999988; font-style: italic } -/* CommentSpecial */ -.highlight .chroma .cs { color: #999999; font-weight: bold; font-style: italic } -/* CommentPreproc */ -.highlight .chroma .cp { color: #999999; font-weight: bold; font-style: italic } -/* CommentPreprocFile */ -.highlight .chroma .cpf { color: #999999; font-weight: bold; font-style: italic } -/* GenericDeleted */ -.highlight .chroma .gd { color: #000000; background-color: #ffdddd } -/* GenericEmph */ -.highlight .chroma .ge { color: #000000; font-style: italic } -/* GenericError */ -.highlight .chroma .gr { color: #aa0000 } -/* GenericHeading */ -.highlight .chroma .gh { color: #999999 } -/* GenericInserted */ -.highlight .chroma .gi { color: #000000; background-color: #ddffdd } -/* GenericOutput */ -.highlight .chroma .go { color: #888888 } -/* GenericPrompt */ -.highlight .chroma .gp { color: #555555 } -/* GenericStrong */ -.highlight .chroma .gs { font-weight: bold } -/* GenericSubheading */ -.highlight .chroma .gu { color: #aaaaaa } -/* GenericTraceback */ -.highlight .chroma .gt { color: #aa0000 } -/* GenericUnderline */ -.highlight .chroma .gl { text-decoration: underline } -/* TextWhitespace */ -.highlight .chroma .w { color: #bbbbbb } -.dark .highlight { - /* Background .bg { color: #c9d1d9; background-color: #0d1117; } - /* PreWrapper .chroma { color: #c9d1d9; background-color: #0d1117; } */ - /* LineTableTD .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; } */ - /* LineTable .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; } */ - /* LineHighlight .chroma .hl { background-color: #ffffcc } */ - /* LineNumbersTable .chroma .lnt { white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #64686c } */ - /* LineNumbers .chroma .ln { white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #6e7681 } */ -} -/* Other */ -.dark .highlight .chroma .x { } -/* Error */ -.dark .highlight .chroma .err { color: #f85149 } -/* CodeLine */ -.dark .highlight .chroma .cl { } -/* LineLink */ -.dark .highlight .chroma .lnlinks { outline: none; text-decoration: none; color: inherit } -/* Line */ -.dark .highlight .chroma .line { display: flex; } -/* Keyword */ -.dark .highlight .chroma .k { color: #ff7b72 } -/* KeywordConstant */ -.dark .highlight .chroma .kc { color: #79c0ff } -/* KeywordDeclaration */ -.dark .highlight .chroma .kd { color: #ff7b72 } -/* KeywordNamespace */ -.dark .highlight .chroma .kn { color: #ff7b72 } -/* KeywordPseudo */ -.dark .highlight .chroma .kp { color: #79c0ff } -/* KeywordReserved */ -.dark .highlight .chroma .kr { color: #ff7b72 } -/* KeywordType */ -.dark .highlight .chroma .kt { color: #ff7b72 } -/* Name */ -.dark .highlight .chroma .n { } -/* NameAttribute */ -.dark .highlight .chroma .na { } -/* NameBuiltin */ -.dark .highlight .chroma .nb { } -/* NameBuiltinPseudo */ -.dark .highlight .chroma .bp { } -/* NameClass */ -.dark .highlight .chroma .nc { color: #f0883e; font-weight: bold } -/* NameConstant */ -.dark .highlight .chroma .no { color: #79c0ff; font-weight: bold } -/* NameDecorator */ -.dark .highlight .chroma .nd { color: #d2a8ff; font-weight: bold } -/* NameEntity */ -.dark .highlight .chroma .ni { color: #ffa657 } -/* NameException */ -.dark .highlight .chroma .ne { color: #f0883e; font-weight: bold } -/* NameFunction */ -.dark .highlight .chroma .nf { color: #d2a8ff; font-weight: bold } -/* NameFunctionMagic */ -.dark .highlight .chroma .fm { } -/* NameLabel */ -.dark .highlight .chroma .nl { color: #79c0ff; font-weight: bold } -/* NameNamespace */ -.dark .highlight .chroma .nn { color: #ff7b72 } -/* NameOther */ -.dark .highlight .chroma .nx { } -/* NameProperty */ -.dark .highlight .chroma .py { color: #79c0ff } -/* NameTag */ -.dark .highlight .chroma .nt { color: #7ee787 } -/* NameVariable */ -.dark .highlight .chroma .nv { color: #79c0ff } -/* NameVariableClass */ -.dark .highlight .chroma .vc { } -/* NameVariableGlobal */ -.dark .highlight .chroma .vg { } -/* NameVariableInstance */ -.dark .highlight .chroma .vi { } -/* NameVariableMagic */ -.dark .highlight .chroma .vm { } -/* Literal */ -.dark .highlight .chroma .l { color: #a5d6ff } -/* LiteralDate */ -.dark .highlight .chroma .ld { color: #79c0ff } -/* LiteralString */ -.dark .highlight .chroma .s { color: #a5d6ff } -/* LiteralStringAffix */ -.dark .highlight .chroma .sa { color: #79c0ff } -/* LiteralStringBacktick */ -.dark .highlight .chroma .sb { color: #a5d6ff } -/* LiteralStringChar */ -.dark .highlight .chroma .sc { color: #a5d6ff } -/* LiteralStringDelimiter */ -.dark .highlight .chroma .dl { color: #79c0ff } -/* LiteralStringDoc */ -.dark .highlight .chroma .sd { color: #a5d6ff } -/* LiteralStringDouble */ -.dark .highlight .chroma .s2 { color: #a5d6ff } -/* LiteralStringEscape */ -.dark .highlight .chroma .se { color: #79c0ff } -/* LiteralStringHeredoc */ -.dark .highlight .chroma .sh { color: #79c0ff } -/* LiteralStringInterpol */ -.dark .highlight .chroma .si { color: #a5d6ff } -/* LiteralStringOther */ -.dark .highlight .chroma .sx { color: #a5d6ff } -/* LiteralStringRegex */ -.dark .highlight .chroma .sr { color: #79c0ff } -/* LiteralStringSingle */ -.dark .highlight .chroma .s1 { color: #a5d6ff } -/* LiteralStringSymbol */ -.dark .highlight .chroma .ss { color: #a5d6ff } -/* LiteralNumber */ -.dark .highlight .chroma .m { color: #a5d6ff } -/* LiteralNumberBin */ -.dark .highlight .chroma .mb { color: #a5d6ff } -/* LiteralNumberFloat */ -.dark .highlight .chroma .mf { color: #a5d6ff } -/* LiteralNumberHex */ -.dark .highlight .chroma .mh { color: #a5d6ff } -/* LiteralNumberInteger */ -.dark .highlight .chroma .mi { color: #a5d6ff } -/* LiteralNumberIntegerLong */ -.dark .highlight .chroma .il { color: #a5d6ff } -/* LiteralNumberOct */ -.dark .highlight .chroma .mo { color: #a5d6ff } -/* Operator */ -.dark .highlight .chroma .o { color: #ff7b72; font-weight: bold } -/* OperatorWord */ -.dark .highlight .chroma .ow { color: #ff7b72; font-weight: bold } -/* Punctuation */ -.dark .highlight .chroma .p { } -/* Comment */ -.dark .highlight .chroma .c { color: #8b949e; font-style: italic } -/* CommentHashbang */ -.dark .highlight .chroma .ch { color: #8b949e; font-style: italic } -/* CommentMultiline */ -.dark .highlight .chroma .cm { color: #8b949e; font-style: italic } -/* CommentSingle */ -.dark .highlight .chroma .c1 { color: #8b949e; font-style: italic } -/* CommentSpecial */ -.dark .highlight .chroma .cs { color: #8b949e; font-weight: bold; font-style: italic } -/* CommentPreproc */ -.dark .highlight .chroma .cp { color: #8b949e; font-weight: bold; font-style: italic } -/* CommentPreprocFile */ -.dark .highlight .chroma .cpf { color: #8b949e; font-weight: bold; font-style: italic } -/* Generic */ -.dark .highlight .chroma .g { } -/* GenericDeleted */ -.dark .highlight .chroma .gd { color: #ffa198; background-color: #490202 } -/* GenericEmph */ -.dark .highlight .chroma .ge { color: inherit; font-style: italic } -/* GenericError */ -.dark .highlight .chroma .gr { color: #ffa198 } -/* GenericHeading */ -.dark .highlight .chroma .gh { color: #79c0ff; font-weight: bold } -/* GenericInserted */ -.dark .highlight .chroma .gi { color: #56d364; background-color: #0f5323 } -/* GenericOutput */ -.dark .highlight .chroma .go { color: #8b949e } -/* GenericPrompt */ -.dark .highlight .chroma .gp { color: #8b949e } -/* GenericStrong */ -.dark .highlight .chroma .gs { font-weight: bold } -/* GenericSubheading */ -.dark .highlight .chroma .gu { color: #79c0ff } -/* GenericTraceback */ -.dark .highlight .chroma .gt { color: #ff7b72 } -/* GenericUnderline */ -.dark .highlight .chroma .gl { text-decoration: underline } -/* TextWhitespace */ -.dark .highlight .chroma .w { color: #6e7681 } -.hextra-code-block { - font-size: .9em; - line-height: 1.25rem; -} -.hextra-code-block pre { - overflow-x: auto; - background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 39) / 0.05); - font-size: .9em; - font-weight: 500; - -webkit-font-smoothing: auto; - -moz-osx-font-smoothing: auto; -} -@media (prefers-contrast: more) { - - .hextra-code-block pre { - border-width: 1px; - border-color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 24) / 0.2); - --tw-contrast: contrast(1.5); - filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); - } -} -.hextra-code-block pre:is(html[class~="dark"] *) { - background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness)) / 50) * 27) / 0.1); -} -@media (prefers-contrast: more) { - - .hextra-code-block pre:is(html[class~="dark"] *) { - border-color: hsl(var(--primary-hue) var(--primary-saturation) calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness)) / 50) * 44) / 0.4); - } -} -.hextra-code-block .filename { - position: absolute; - top: 0px; - z-index: 1; - width: 100%; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - border-top-left-radius: 0.75rem; - border-top-right-radius: 0.75rem; - background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 39) / 0.05); - padding-top: 0.5rem; - padding-bottom: 0.5rem; - padding-left: 1rem; - padding-right: 1rem; - font-size: .75rem; - --tw-text-opacity: 1; - color: rgb(55 65 81 / var(--tw-text-opacity)); -} -.hextra-code-block .filename:is(html[class~="dark"] *) { - background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness)) / 50) * 27) / 0.1); - --tw-text-opacity: 1; - color: rgb(229 231 235 / var(--tw-text-opacity)); -} -.hextra-code-block .filename + pre:not(.lntable pre) { - /* Override padding for code blocks with filename but no highlight */ - padding-top: 3rem; - } -.hextra-code-block pre:not(.lntable pre) { - margin-bottom: 1rem; - border-radius: 0.75rem; - padding-left: 1rem; - padding-right: 1rem; - padding-top: 1rem; - padding-bottom: 1rem; -} -.hextra-code-block div:nth-of-type(2) pre { - padding-top: 3rem; - padding-bottom: 1rem; -} -.chroma .lntable { - margin: 0px; - display: block; - width: auto; - overflow: auto; - border-radius: 0.75rem; -} -.chroma .lntable pre { - padding-top: 1rem; - padding-bottom: 1rem; -} -.chroma .ln, - .chroma .lnt:not(.hl > .lnt), - .chroma .hl:not(.line) { - min-width: 2.6rem; - padding-left: 1rem; - padding-right: 1rem; - --tw-text-opacity: 1; - color: rgb(82 82 82 / var(--tw-text-opacity)); -} -.chroma .ln:is(html[class~="dark"] *), - .chroma .lnt:not(.hl > .lnt):is(html[class~="dark"] *), - .chroma .hl:not(.line):is(html[class~="dark"] *) { - --tw-text-opacity: 1; - color: rgb(212 212 212 / var(--tw-text-opacity)); -} -.chroma .lntd { - padding: 0px; - vertical-align: top; -} -.chroma .lntd:last-of-type { - width: 100%; -} -/* LineHighlight */ -.chroma .hl { - display: block; - width: 100%; - background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 32) / 0.1); -} -.hextra-cards { - grid-template-columns: repeat(auto-fill, minmax(max(250px, calc((100% - 1rem * 2) / var(--hextra-cards-grid-cols))), 1fr)); -} -.hextra-card { - position: relative; -} -.hextra-card img { - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; -} -.hextra-card:hover svg { - color: currentColor; -} -.hextra-card svg { - width: 1.5rem; - color: #00000033; - transition: color 0.3s ease; -} -.hextra-card p { - margin-top: 0.5rem; - position: relative; -} -.dark .hextra-card svg { - color: #ffffff66; -} -.dark .hextra-card:hover svg { - color: currentColor; -} -.hextra-card-tag { - position: absolute; - top: 5px; - right: 5px; - z-index: 10; -} -.steps h3 { - counter-increment: step; -} -.steps h3:before { - position: absolute; - height: 33px; - width: 33px; - border-width: 4px; - --tw-border-opacity: 1; - border-color: rgb(255 255 255 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(243 244 246 / var(--tw-bg-opacity)); -} -.steps h3:is(html[class~="dark"] *):before { - --tw-border-opacity: 1; - border-color: rgb(17 17 17 / var(--tw-border-opacity)); - --tw-bg-opacity: 1; - background-color: rgb(38 38 38 / var(--tw-bg-opacity)); -} -.steps h3:before { - border-radius: 9999px; - text-align: center; - text-indent: -1px; - font-size: 1rem; - font-weight: 400; - --tw-text-opacity: 1; - color: rgb(163 163 163 / var(--tw-text-opacity)); - margin-top: 3px; -} -.steps h3:where([dir="ltr"], [dir="ltr"] *):before { - margin-left: -41px; -} -.steps h3:where([dir="rtl"], [dir="rtl"] *):before { - margin-right: -44px; -} -.steps h3:before { - content: counter(step); - } -:lang(fa) .steps h3:before { - content: counter(step, persian); - } -.search-wrapper li { - margin-left: 0.625rem; - margin-right: 0.625rem; - overflow-wrap: break-word; - border-radius: 0.375rem; - --tw-text-opacity: 1; - color: rgb(31 41 55 / var(--tw-text-opacity)); -} -@media (prefers-contrast: more) { - - .search-wrapper li { - border-width: 1px; - border-color: transparent; - } -} -.search-wrapper li:is(html[class~="dark"] *) { - --tw-text-opacity: 1; - color: rgb(209 213 219 / var(--tw-text-opacity)); -} -.search-wrapper li a { - display: block; - scroll-margin: 3rem; - padding-left: 0.625rem; - padding-right: 0.625rem; - padding-top: 0.5rem; - padding-bottom: 0.5rem; -} -.search-wrapper li .title { - font-size: 1rem; - font-weight: 600; - line-height: 1.25rem; -} -.search-wrapper li .active { - border-radius: 0.375rem; - background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 50) / 0.1); -} -@media (prefers-contrast: more) { - - .search-wrapper li .active { - --tw-border-opacity: 1; - border-color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 50) / var(--tw-border-opacity)); - } -} -.search-wrapper .no-result { - display: block; - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; - padding: 2rem; - text-align: center; - font-size: .875rem; - --tw-text-opacity: 1; - color: rgb(156 163 175 / var(--tw-text-opacity)); -} -.search-wrapper .prefix { - margin-left: 0.625rem; - margin-right: 0.625rem; - margin-bottom: 0.5rem; - margin-top: 1.5rem; - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; - border-bottom-width: 1px; - border-color: rgb(0 0 0 / 0.1); - padding-left: 0.625rem; - padding-right: 0.625rem; - padding-bottom: 0.375rem; - font-size: .75rem; - font-weight: 600; - text-transform: uppercase; - --tw-text-opacity: 1; - color: rgb(107 114 128 / var(--tw-text-opacity)); -} -.search-wrapper .prefix:first-child { - margin-top: 0px; -} -@media (prefers-contrast: more) { - - .search-wrapper .prefix { - --tw-border-opacity: 1; - border-color: rgb(75 85 99 / var(--tw-border-opacity)); - --tw-text-opacity: 1; - color: rgb(17 24 39 / var(--tw-text-opacity)); - } -} -.search-wrapper .prefix:is(html[class~="dark"] *) { - border-color: rgb(255 255 255 / 0.2); - --tw-text-opacity: 1; - color: rgb(209 213 219 / var(--tw-text-opacity)); -} -@media (prefers-contrast: more) { - - .search-wrapper .prefix:is(html[class~="dark"] *) { - --tw-border-opacity: 1; - border-color: rgb(249 250 251 / var(--tw-border-opacity)); - --tw-text-opacity: 1; - color: rgb(249 250 251 / var(--tw-text-opacity)); - } -} -.search-wrapper .excerpt { - margin-top: 0.25rem; - overflow: hidden; - text-overflow: ellipsis; - font-size: .875rem; - line-height: 1.35rem; - --tw-text-opacity: 1; - color: rgb(75 85 99 / var(--tw-text-opacity)); -} -.search-wrapper .excerpt:is(html[class~="dark"] *) { - --tw-text-opacity: 1; - color: rgb(156 163 175 / var(--tw-text-opacity)); -} -@media (prefers-contrast: more) { - - .search-wrapper .excerpt:is(html[class~="dark"] *) { - --tw-text-opacity: 1; - color: rgb(249 250 251 / var(--tw-text-opacity)); - } -} -.search-wrapper .excerpt { - display: -webkit-box; - line-clamp: 1; - -webkit-line-clamp: 1; - -webkit-box-orient: vertical; - } -.search-wrapper .match { - --tw-text-opacity: 1; - color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 45) / var(--tw-text-opacity)); -} -@media (max-width: 767px) { - .sidebar-container { - position: fixed; - top: 0px; - bottom: 0px; - z-index: 15; - width: 100%; - overscroll-behavior: contain; - --tw-bg-opacity: 1; - background-color: rgb(255 255 255 / var(--tw-bg-opacity)); - padding-top: calc(var(--navbar-height)); - } - .sidebar-container:is(html[class~="dark"] *) { - --tw-bg-opacity: 1; - background-color: rgb(17 17 17 / var(--tw-bg-opacity)); - } - .sidebar-container { - transition: transform 0.8s cubic-bezier(0.52, 0.16, 0.04, 1); - will-change: transform, opacity; - contain: layout style; - backface-visibility: hidden; - } -} -.sidebar-container li > div { - height: 0px; -} -.sidebar-container li.open > div { - height: auto; - padding-top: 0.25rem; -} -.sidebar-container li.open > a > span > svg > path { - --tw-rotate: 90deg; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} -nav .search-wrapper { - display: none; -} -@media (min-width: 768px) { - - nav .search-wrapper { - display: inline-block; - } -} -@supports ( - ((-webkit-backdrop-filter: blur(1px)) or (backdrop-filter: blur(1px))) -) { - .nav-container-blur { - background-color: rgb(255 255 255 / .85); - --tw-backdrop-blur: blur(12px); - -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); - backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); - } - .nav-container-blur:is(html[class~="dark"] *) { - background-color: rgb(17 17 17 / 0.8) !important; - } -} -.hamburger-menu svg g { - transform-origin: center; - transition: transform 0.2s cubic-bezier(0.25, 1, 0.5, 1); -} -.hamburger-menu svg path { - opacity: 1; - transition: - transform 0.2s cubic-bezier(0.25, 1, 0.5, 1) 0.2s, - opacity 0.2s ease 0.2s; - } -.hamburger-menu svg.open path { - transition: - transform 0.2s cubic-bezier(0.25, 1, 0.5, 1), - opacity 0s ease 0.2s; - } -.hamburger-menu svg.open g { - transition: transform 0.2s cubic-bezier(0.25, 1, 0.5, 1) 0.2s; - } -.hamburger-menu svg.open > path { - opacity: 0; -} -.hamburger-menu svg.open > g:nth-of-type(1) { - --tw-rotate: 45deg; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} -.hamburger-menu svg.open > g:nth-of-type(1) path { - transform: translate3d(0, 4px, 0); - } -.hamburger-menu svg.open > g:nth-of-type(2) { - --tw-rotate: -45deg; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} -.hamburger-menu svg.open > g:nth-of-type(2) path { - transform: translate3d(0, -4px, 0); - } -.hextra-scrollbar, .hextra-scrollbar * { - scrollbar-width: thin; /* Firefox */ - scrollbar-color: oklch(55.55% 0 0 / 40%) transparent; /* Firefox */ - - scrollbar-gutter: stable; -} -.hextra-scrollbar::-webkit-scrollbar, .hextra-scrollbar *::-webkit-scrollbar { - height: 0.75rem; - width: 0.75rem; -} -.hextra-scrollbar::-webkit-scrollbar-track, .hextra-scrollbar *::-webkit-scrollbar-track { - background-color: transparent; -} -.hextra-scrollbar::-webkit-scrollbar-thumb, .hextra-scrollbar *::-webkit-scrollbar-thumb { - border-radius: 10px; -} -.hextra-scrollbar:hover::-webkit-scrollbar-thumb, .hextra-scrollbar *:hover::-webkit-scrollbar-thumb { - border: 3px solid transparent; - background-color: var(--tw-shadow-color); - background-clip: content-box; - --tw-shadow-color: rgb(115 115 115 / 0.2); - --tw-shadow: var(--tw-shadow-colored); - } -.hextra-scrollbar:hover::-webkit-scrollbar-thumb:hover, .hextra-scrollbar *:hover::-webkit-scrollbar-thumb:hover { - --tw-shadow-color: rgb(115 115 115 / 0.4); - --tw-shadow: var(--tw-shadow-colored); -} -@supports ( - ((-webkit-backdrop-filter: blur(1px)) or (backdrop-filter: blur(1px))) -) { - .hextra-code-copy-btn { - --tw-bg-opacity: .85; - --tw-backdrop-blur: blur(12px); - -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); - backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); - } - .hextra-code-copy-btn:is(html[class~="dark"] *) { - --tw-bg-opacity: 0.8; - } -} -@media (min-width: 1024px) { -.hextra-feature-grid { - grid-template-columns: repeat(var(--hextra-feature-grid-cols), minmax(0, 1fr)) -} - } -.hextra-jupyter-code-cell { - scrollbar-gutter: auto; - margin-top: 1.5rem; -} -.hextra-jupyter-code-cell .hextra-jupyter-code-cell-outputs-container { - overflow: hidden; - font-size: .75rem; -} -.hextra-jupyter-code-cell .hextra-jupyter-code-cell-outputs-container .hextra-jupyter-code-cell-outputs { - max-height: 50vh; - overflow: auto; -} -.hextra-jupyter-code-cell .hextra-jupyter-code-cell-outputs-container .hextra-jupyter-code-cell-outputs pre { - max-width: 100%; - overflow: auto; - font-size: .75rem; -} -.hextra-badge { - display: inline-flex; - align-items: center; -} -html { - font-size: 1rem; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - font-feature-settings: "rlig" 1, "calt" 1, "ss01" 1; - -webkit-tap-highlight-color: transparent; -} -body { - width: 100%; - --tw-bg-opacity: 1; - background-color: rgb(255 255 255 / var(--tw-bg-opacity)); -} -body:is(html[class~="dark"] *) { - --tw-bg-opacity: 1; - background-color: rgb(17 17 17 / var(--tw-bg-opacity)); - --tw-text-opacity: 1; - color: rgb(243 244 246 / var(--tw-text-opacity)); -} -:root { - --primary-hue: 212deg; - --primary-saturation: 100%; - --primary-lightness: 50%; - --navbar-height: 4rem; - --menu-height: 3.75rem; -} -.dark { - --primary-hue: 204deg; - --primary-saturation: 100%; - --primary-lightness: 50%; -} -.placeholder\:hx-text-gray-500::-moz-placeholder { - --tw-text-opacity: 1; - color: rgb(107 114 128 / var(--tw-text-opacity)); -} -.placeholder\:hx-text-gray-500::placeholder { - --tw-text-opacity: 1; - color: rgb(107 114 128 / var(--tw-text-opacity)); -} -.before\:hx-pointer-events-none::before { - content: var(--tw-content); - pointer-events: none; -} -.before\:hx-absolute::before { - content: var(--tw-content); - position: absolute; -} -.before\:hx-inset-0::before { - content: var(--tw-content); - inset: 0px; -} -.before\:hx-inset-y-1::before { - content: var(--tw-content); - top: 0.25rem; - bottom: 0.25rem; -} -.before\:hx-mr-1::before { - content: var(--tw-content); - margin-right: 0.25rem; -} -.before\:hx-inline-block::before { - content: var(--tw-content); - display: inline-block; -} -.before\:hx-w-px::before { - content: var(--tw-content); - width: 1px; -} -.before\:hx-bg-gray-200::before { - content: var(--tw-content); - --tw-bg-opacity: 1; - background-color: rgb(229 231 235 / var(--tw-bg-opacity)); -} -.before\:hx-opacity-25::before { - content: var(--tw-content); - opacity: 0.25; -} -.before\:hx-transition-transform::before { - content: var(--tw-content); - transition-property: transform; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; -} -.before\:hx-content-\[\'\#\'\]::before { - --tw-content: '#'; - content: var(--tw-content); -} -.before\:hx-content-\[\'\'\]::before { - --tw-content: ''; - content: var(--tw-content); -} -.before\:hx-content-\[\\\"\\\"\]::before { - --tw-content: \"\"; - content: var(--tw-content); -} -.first\:hx-mt-0:first-child { - margin-top: 0px; -} -.last-of-type\:hx-mb-0:last-of-type { - margin-bottom: 0px; -} -.hover\:hx-border-gray-200:hover { - --tw-border-opacity: 1; - border-color: rgb(229 231 235 / var(--tw-border-opacity)); -} -.hover\:hx-border-gray-300:hover { - --tw-border-opacity: 1; - border-color: rgb(209 213 219 / var(--tw-border-opacity)); -} -.hover\:hx-border-gray-400:hover { - --tw-border-opacity: 1; - border-color: rgb(156 163 175 / var(--tw-border-opacity)); -} -.hover\:hx-border-gray-900:hover { - --tw-border-opacity: 1; - border-color: rgb(17 24 39 / var(--tw-border-opacity)); -} -.hover\:hx-bg-gray-100:hover { - --tw-bg-opacity: 1; - background-color: rgb(243 244 246 / var(--tw-bg-opacity)); -} -.hover\:hx-bg-gray-800\/5:hover { - background-color: rgb(31 41 55 / 0.05); -} -.hover\:hx-bg-primary-50:hover { - --tw-bg-opacity: 1; - background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness)) / 50) * 47) / var(--tw-bg-opacity)); -} -.hover\:hx-bg-primary-700:hover { - --tw-bg-opacity: 1; - background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 39) / var(--tw-bg-opacity)); -} -.hover\:hx-bg-slate-50:hover { - --tw-bg-opacity: 1; - background-color: rgb(248 250 252 / var(--tw-bg-opacity)); -} -.hover\:hx-text-black:hover { - --tw-text-opacity: 1; - color: rgb(0 0 0 / var(--tw-text-opacity)); -} -.hover\:hx-text-gray-800:hover { - --tw-text-opacity: 1; - color: rgb(31 41 55 / var(--tw-text-opacity)); -} -.hover\:hx-text-gray-900:hover { - --tw-text-opacity: 1; - color: rgb(17 24 39 / var(--tw-text-opacity)); -} -.hover\:hx-text-primary-600:hover { - --tw-text-opacity: 1; - color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 45) / var(--tw-text-opacity)); -} -.hover\:hx-opacity-60:hover { - opacity: 0.6; -} -.hover\:hx-opacity-75:hover { - opacity: 0.75; -} -.hover\:hx-shadow-lg:hover { - --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); - --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} -.hover\:hx-shadow-md:hover { - --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); - --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} -.hover\:hx-shadow-gray-100:hover { - --tw-shadow-color: #f3f4f6; - --tw-shadow: var(--tw-shadow-colored); -} -.focus\:hx-bg-white:focus { - --tw-bg-opacity: 1; - background-color: rgb(255 255 255 / var(--tw-bg-opacity)); -} -.focus\:hx-outline-none:focus { - outline: 2px solid transparent; - outline-offset: 2px; -} -.focus\:hx-ring-4:focus { - --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); - --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color); - box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); -} -.focus\:hx-ring-primary-300:focus { - --tw-ring-opacity: 1; - --tw-ring-color: hsl(var(--primary-hue) var(--primary-saturation) calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness)) / 50) * 27) / var(--tw-ring-opacity)); -} -.active\:hx-bg-gray-400\/20:active { - background-color: rgb(156 163 175 / 0.2); -} -.active\:hx-opacity-50:active { - opacity: 0.5; -} -.active\:hx-shadow-sm:active { - --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05); - --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} -.active\:hx-shadow-gray-200:active { - --tw-shadow-color: #e5e7eb; - --tw-shadow: var(--tw-shadow-colored); -} -.hx-group[open] .group-open\:before\:hx-rotate-90::before { - content: var(--tw-content); - --tw-rotate: 90deg; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} -.hx-group:hover .group-hover\:hx-underline { - text-decoration-line: underline; -} -.hx-group\/code:hover .group-hover\/code\:hx-opacity-100 { - opacity: 1; -} -.hx-group\/copybtn.copied .group-\[\.copied\]\/copybtn\:hx-block { - display: block; -} -.hx-group\/copybtn.copied .group-\[\.copied\]\/copybtn\:hx-hidden { - display: none; -} -.data-\[state\=selected\]\:hx-block[data-state="selected"] { - display: block; -} -.data-\[state\=closed\]\:hx-hidden[data-state="closed"] { - display: none; -} -.data-\[state\=open\]\:hx-hidden[data-state="open"] { - display: none; -} -.data-\[state\=selected\]\:hx-border-primary-500[data-state="selected"] { - --tw-border-opacity: 1; - border-color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 50) / var(--tw-border-opacity)); -} -.data-\[state\=selected\]\:hx-text-primary-600[data-state="selected"] { - --tw-text-opacity: 1; - color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 45) / var(--tw-text-opacity)); -} -.hx-group[data-theme="dark"] .group-data-\[theme\=dark\]\:hx-hidden { - display: none; -} -.hx-group[data-theme="light"] .group-data-\[theme\=light\]\:hx-hidden { - display: none; -} -@media (prefers-contrast: more) { - - .contrast-more\:hx-border { - border-width: 1px; - } - - .contrast-more\:hx-border-t { - border-top-width: 1px; - } - - .contrast-more\:hx-border-current { - border-color: currentColor; - } - - .contrast-more\:hx-border-gray-800 { - --tw-border-opacity: 1; - border-color: rgb(31 41 55 / var(--tw-border-opacity)); - } - - .contrast-more\:hx-border-gray-900 { - --tw-border-opacity: 1; - border-color: rgb(17 24 39 / var(--tw-border-opacity)); - } - - .contrast-more\:hx-border-neutral-400 { - --tw-border-opacity: 1; - border-color: rgb(163 163 163 / var(--tw-border-opacity)); - } - - .contrast-more\:hx-border-primary-500 { - --tw-border-opacity: 1; - border-color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 50) / var(--tw-border-opacity)); - } - - .contrast-more\:hx-border-transparent { - border-color: transparent; - } - - .contrast-more\:hx-font-bold { - font-weight: 700; - } - - .contrast-more\:hx-text-current { - color: currentColor; - } - - .contrast-more\:hx-text-gray-700 { - --tw-text-opacity: 1; - color: rgb(55 65 81 / var(--tw-text-opacity)); - } - - .contrast-more\:hx-text-gray-800 { - --tw-text-opacity: 1; - color: rgb(31 41 55 / var(--tw-text-opacity)); - } - - .contrast-more\:hx-text-gray-900 { - --tw-text-opacity: 1; - color: rgb(17 24 39 / var(--tw-text-opacity)); - } - - .contrast-more\:hx-underline { - text-decoration-line: underline; - } - - .contrast-more\:hx-shadow-\[0_0_0_1px_\#000\] { - --tw-shadow: 0 0 0 1px #000; - --tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); - } - - .contrast-more\:hx-shadow-none { - --tw-shadow: 0 0 #0000; - --tw-shadow-colored: 0 0 #0000; - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); - } - - .contrast-more\:hover\:hx-border-gray-900:hover { - --tw-border-opacity: 1; - border-color: rgb(17 24 39 / var(--tw-border-opacity)); - } -} -.dark\:hx-block:is(html[class~="dark"] *) { - display: block; -} -.dark\:hx-hidden:is(html[class~="dark"] *) { - display: none; -} -.dark\:hx-border-blue-200\/30:is(html[class~="dark"] *) { - border-color: rgb(191 219 254 / 0.3); -} -.dark\:hx-border-gray-100\/20:is(html[class~="dark"] *) { - border-color: rgb(243 244 246 / 0.2); -} -.dark\:hx-border-gray-400:is(html[class~="dark"] *) { - --tw-border-opacity: 1; - border-color: rgb(156 163 175 / var(--tw-border-opacity)); -} -.dark\:hx-border-neutral-700:is(html[class~="dark"] *) { - --tw-border-opacity: 1; - border-color: rgb(64 64 64 / var(--tw-border-opacity)); -} -.dark\:hx-border-neutral-800:is(html[class~="dark"] *) { - --tw-border-opacity: 1; - border-color: rgb(38 38 38 / var(--tw-border-opacity)); -} -.dark\:hx-border-orange-400\/30:is(html[class~="dark"] *) { - border-color: rgb(251 146 60 / 0.3); -} -.dark\:hx-border-red-200\/30:is(html[class~="dark"] *) { - border-color: rgb(254 202 202 / 0.3); -} -.dark\:hx-border-white\/10:is(html[class~="dark"] *) { - border-color: rgb(255 255 255 / 0.1); -} -.dark\:hx-border-yellow-200\/30:is(html[class~="dark"] *) { - border-color: rgb(254 240 138 / 0.3); -} -.dark\:hx-bg-black\/60:is(html[class~="dark"] *) { - background-color: rgb(0 0 0 / 0.6); -} -.dark\:hx-bg-blue-900\/30:is(html[class~="dark"] *) { - background-color: rgb(30 58 138 / 0.3); -} -.dark\:hx-bg-dark:is(html[class~="dark"] *) { - --tw-bg-opacity: 1; - background-color: rgb(17 17 17 / var(--tw-bg-opacity)); -} -.dark\:hx-bg-dark\/50:is(html[class~="dark"] *) { - background-color: rgb(17 17 17 / 0.5); -} -.dark\:hx-bg-gray-50\/10:is(html[class~="dark"] *) { - background-color: rgb(249 250 251 / 0.1); -} -.dark\:hx-bg-neutral-800:is(html[class~="dark"] *) { - --tw-bg-opacity: 1; - background-color: rgb(38 38 38 / var(--tw-bg-opacity)); -} -.dark\:hx-bg-neutral-900:is(html[class~="dark"] *) { - --tw-bg-opacity: 1; - background-color: rgb(23 23 23 / var(--tw-bg-opacity)); -} -.dark\:hx-bg-orange-400\/20:is(html[class~="dark"] *) { - background-color: rgb(251 146 60 / 0.2); -} -.dark\:hx-bg-primary-300\/10:is(html[class~="dark"] *) { - background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness)) / 50) * 27) / 0.1); -} -.dark\:hx-bg-primary-400\/10:is(html[class~="dark"] *) { - background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness)) / 50) * 16) / 0.1); -} -.dark\:hx-bg-primary-600:is(html[class~="dark"] *) { - --tw-bg-opacity: 1; - background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 45) / var(--tw-bg-opacity)); -} -.dark\:hx-bg-red-900\/30:is(html[class~="dark"] *) { - background-color: rgb(127 29 29 / 0.3); -} -.dark\:hx-bg-yellow-700\/30:is(html[class~="dark"] *) { - background-color: rgb(161 98 7 / 0.3); -} -.dark\:hx-from-gray-100:is(html[class~="dark"] *) { - --tw-gradient-from: #f3f4f6 var(--tw-gradient-from-position); - --tw-gradient-to: rgb(243 244 246 / 0) var(--tw-gradient-to-position); - --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); -} -.dark\:hx-to-gray-400:is(html[class~="dark"] *) { - --tw-gradient-to: #9ca3af var(--tw-gradient-to-position); -} -.dark\:hx-text-blue-200:is(html[class~="dark"] *) { - --tw-text-opacity: 1; - color: rgb(191 219 254 / var(--tw-text-opacity)); -} -.dark\:hx-text-gray-100:is(html[class~="dark"] *) { - --tw-text-opacity: 1; - color: rgb(243 244 246 / var(--tw-text-opacity)); -} -.dark\:hx-text-gray-200:is(html[class~="dark"] *) { - --tw-text-opacity: 1; - color: rgb(229 231 235 / var(--tw-text-opacity)); -} -.dark\:hx-text-gray-300:is(html[class~="dark"] *) { - --tw-text-opacity: 1; - color: rgb(209 213 219 / var(--tw-text-opacity)); -} -.dark\:hx-text-gray-400:is(html[class~="dark"] *) { - --tw-text-opacity: 1; - color: rgb(156 163 175 / var(--tw-text-opacity)); -} -.dark\:hx-text-gray-50:is(html[class~="dark"] *) { - --tw-text-opacity: 1; - color: rgb(249 250 251 / var(--tw-text-opacity)); -} -.dark\:hx-text-neutral-200:is(html[class~="dark"] *) { - --tw-text-opacity: 1; - color: rgb(229 229 229 / var(--tw-text-opacity)); -} -.dark\:hx-text-neutral-400:is(html[class~="dark"] *) { - --tw-text-opacity: 1; - color: rgb(163 163 163 / var(--tw-text-opacity)); -} -.dark\:hx-text-orange-300:is(html[class~="dark"] *) { - --tw-text-opacity: 1; - color: rgb(253 186 116 / var(--tw-text-opacity)); -} -.dark\:hx-text-primary-600:is(html[class~="dark"] *) { - --tw-text-opacity: 1; - color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 45) / var(--tw-text-opacity)); -} -.dark\:hx-text-red-200:is(html[class~="dark"] *) { - --tw-text-opacity: 1; - color: rgb(254 202 202 / var(--tw-text-opacity)); -} -.dark\:hx-text-slate-100:is(html[class~="dark"] *) { - --tw-text-opacity: 1; - color: rgb(241 245 249 / var(--tw-text-opacity)); -} -.dark\:hx-text-yellow-200:is(html[class~="dark"] *) { - --tw-text-opacity: 1; - color: rgb(254 240 138 / var(--tw-text-opacity)); -} -.dark\:hx-opacity-80:is(html[class~="dark"] *) { - opacity: 0.8; -} -.dark\:hx-shadow-\[0_-12px_16px_\#111\]:is(html[class~="dark"] *) { - --tw-shadow: 0 -12px 16px #111; - --tw-shadow-colored: 0 -12px 16px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} -.dark\:hx-shadow-\[0_-1px_0_rgba\(255\2c 255\2c 255\2c \.1\)_inset\]:is(html[class~="dark"] *) { - --tw-shadow: 0 -1px 0 rgba(255,255,255,.1) inset; - --tw-shadow-colored: inset 0 -1px 0 var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} -.dark\:hx-shadow-none:is(html[class~="dark"] *) { - --tw-shadow: 0 0 #0000; - --tw-shadow-colored: 0 0 #0000; - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} -.dark\:hx-ring-white\/20:is(html[class~="dark"] *) { - --tw-ring-color: rgb(255 255 255 / 0.2); -} -.dark\:placeholder\:hx-text-gray-400:is(html[class~="dark"] *)::-moz-placeholder { - --tw-text-opacity: 1; - color: rgb(156 163 175 / var(--tw-text-opacity)); -} -.dark\:placeholder\:hx-text-gray-400:is(html[class~="dark"] *)::placeholder { - --tw-text-opacity: 1; - color: rgb(156 163 175 / var(--tw-text-opacity)); -} -.dark\:before\:hx-bg-neutral-800:is(html[class~="dark"] *)::before { - content: var(--tw-content); - --tw-bg-opacity: 1; - background-color: rgb(38 38 38 / var(--tw-bg-opacity)); -} -.dark\:before\:hx-invert:is(html[class~="dark"] *)::before { - content: var(--tw-content); - --tw-invert: invert(100%); - filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); -} -.dark\:hover\:hx-border-gray-100:hover:is(html[class~="dark"] *) { - --tw-border-opacity: 1; - border-color: rgb(243 244 246 / var(--tw-border-opacity)); -} -.dark\:hover\:hx-border-gray-600:hover:is(html[class~="dark"] *) { - --tw-border-opacity: 1; - border-color: rgb(75 85 99 / var(--tw-border-opacity)); -} -.dark\:hover\:hx-border-neutral-500:hover:is(html[class~="dark"] *) { - --tw-border-opacity: 1; - border-color: rgb(115 115 115 / var(--tw-border-opacity)); -} -.dark\:hover\:hx-border-neutral-700:hover:is(html[class~="dark"] *) { - --tw-border-opacity: 1; - border-color: rgb(64 64 64 / var(--tw-border-opacity)); -} -.dark\:hover\:hx-border-neutral-800:hover:is(html[class~="dark"] *) { - --tw-border-opacity: 1; - border-color: rgb(38 38 38 / var(--tw-border-opacity)); -} -.dark\:hover\:hx-bg-gray-100\/5:hover:is(html[class~="dark"] *) { - background-color: rgb(243 244 246 / 0.05); -} -.dark\:hover\:hx-bg-neutral-700:hover:is(html[class~="dark"] *) { - --tw-bg-opacity: 1; - background-color: rgb(64 64 64 / var(--tw-bg-opacity)); -} -.dark\:hover\:hx-bg-neutral-800:hover:is(html[class~="dark"] *) { - --tw-bg-opacity: 1; - background-color: rgb(38 38 38 / var(--tw-bg-opacity)); -} -.dark\:hover\:hx-bg-neutral-900:hover:is(html[class~="dark"] *) { - --tw-bg-opacity: 1; - background-color: rgb(23 23 23 / var(--tw-bg-opacity)); -} -.dark\:hover\:hx-bg-primary-100\/5:hover:is(html[class~="dark"] *) { - background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(var(--primary-lightness) + calc(calc(100% - var(--primary-lightness)) / 50) * 44) / 0.05); -} -.dark\:hover\:hx-bg-primary-700:hover:is(html[class~="dark"] *) { - --tw-bg-opacity: 1; - background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 39) / var(--tw-bg-opacity)); -} -.hover\:dark\:hx-bg-primary-500\/10:is(html[class~="dark"] *):hover { - background-color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 50) / 0.1); -} -.dark\:hover\:hx-text-gray-100:hover:is(html[class~="dark"] *) { - --tw-text-opacity: 1; - color: rgb(243 244 246 / var(--tw-text-opacity)); -} -.dark\:hover\:hx-text-gray-200:hover:is(html[class~="dark"] *) { - --tw-text-opacity: 1; - color: rgb(229 231 235 / var(--tw-text-opacity)); -} -.dark\:hover\:hx-text-gray-300:hover:is(html[class~="dark"] *) { - --tw-text-opacity: 1; - color: rgb(209 213 219 / var(--tw-text-opacity)); -} -.dark\:hover\:hx-text-gray-50:hover:is(html[class~="dark"] *) { - --tw-text-opacity: 1; - color: rgb(249 250 251 / var(--tw-text-opacity)); -} -.dark\:hover\:hx-text-neutral-50:hover:is(html[class~="dark"] *) { - --tw-text-opacity: 1; - color: rgb(250 250 250 / var(--tw-text-opacity)); -} -.dark\:hover\:hx-text-white:hover:is(html[class~="dark"] *) { - --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity)); -} -.hover\:dark\:hx-text-primary-600:is(html[class~="dark"] *):hover { - --tw-text-opacity: 1; - color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 45) / var(--tw-text-opacity)); -} -.dark\:hover\:hx-shadow-none:hover:is(html[class~="dark"] *) { - --tw-shadow: 0 0 #0000; - --tw-shadow-colored: 0 0 #0000; - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} -.dark\:focus\:hx-bg-dark:focus:is(html[class~="dark"] *) { - --tw-bg-opacity: 1; - background-color: rgb(17 17 17 / var(--tw-bg-opacity)); -} -.dark\:focus\:hx-ring-primary-800:focus:is(html[class~="dark"] *) { - --tw-ring-opacity: 1; - --tw-ring-color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 32) / var(--tw-ring-opacity)); -} -@media (prefers-contrast: more) { - - .contrast-more\:dark\:hx-border-current:is(html[class~="dark"] *) { - border-color: currentColor; - } - - .contrast-more\:dark\:hx-border-gray-50:is(html[class~="dark"] *) { - --tw-border-opacity: 1; - border-color: rgb(249 250 251 / var(--tw-border-opacity)); - } - - .contrast-more\:dark\:hx-border-neutral-400:is(html[class~="dark"] *) { - --tw-border-opacity: 1; - border-color: rgb(163 163 163 / var(--tw-border-opacity)); - } - - .contrast-more\:dark\:hx-border-primary-500:is(html[class~="dark"] *) { - --tw-border-opacity: 1; - border-color: hsl(var(--primary-hue) var(--primary-saturation) calc(calc(var(--primary-lightness) / 50) * 50) / var(--tw-border-opacity)); - } - - .dark\:contrast-more\:hx-border-neutral-400:is(html[class~="dark"] *) { - --tw-border-opacity: 1; - border-color: rgb(163 163 163 / var(--tw-border-opacity)); - } - - .contrast-more\:dark\:hx-text-current:is(html[class~="dark"] *) { - color: currentColor; - } - - .contrast-more\:dark\:hx-text-gray-100:is(html[class~="dark"] *) { - --tw-text-opacity: 1; - color: rgb(243 244 246 / var(--tw-text-opacity)); - } - - .contrast-more\:dark\:hx-text-gray-300:is(html[class~="dark"] *) { - --tw-text-opacity: 1; - color: rgb(209 213 219 / var(--tw-text-opacity)); - } - - .contrast-more\:dark\:hx-text-gray-50:is(html[class~="dark"] *) { - --tw-text-opacity: 1; - color: rgb(249 250 251 / var(--tw-text-opacity)); - } - - .contrast-more\:dark\:hx-shadow-\[0_0_0_1px_\#fff\]:is(html[class~="dark"] *) { - --tw-shadow: 0 0 0 1px #fff; - --tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); - } - - .contrast-more\:dark\:hx-shadow-none:is(html[class~="dark"] *) { - --tw-shadow: 0 0 #0000; - --tw-shadow-colored: 0 0 #0000; - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); - } - - .contrast-more\:dark\:hover\:hx-border-gray-50:hover:is(html[class~="dark"] *) { - --tw-border-opacity: 1; - border-color: rgb(249 250 251 / var(--tw-border-opacity)); - } -} -@media not all and (min-width: 1280px) { - - .max-xl\:hx-hidden { - display: none; - } -} -@media not all and (min-width: 1024px) { - - .max-lg\:hx-min-h-\[340px\] { - min-height: 340px; - } -} -@media not all and (min-width: 768px) { - - .max-md\:hx-hidden { - display: none; - } - - .max-md\:hx-min-h-\[340px\] { - min-height: 340px; - } - - .max-md\:\[transform\:translate3d\(0\2c -100\%\2c 0\)\] { - transform: translate3d(0,-100%,0); - } -} -@media not all and (min-width: 640px) { - - .max-sm\:hx-grid-cols-1 { - grid-template-columns: repeat(1, minmax(0, 1fr)); - } -} -@media (min-width: 640px) { - - .sm\:hx-block { - display: block; - } - - .sm\:hx-flex { - display: flex; - } - - .sm\:hx-w-\[110\%\] { - width: 110%; - } - - .sm\:hx-items-start { - align-items: flex-start; - } - - .sm\:hx-text-xl { - font-size: 1.25rem; - } - - @media not all and (min-width: 1024px) { - - .sm\:max-lg\:hx-grid-cols-2 { - grid-template-columns: repeat(2, minmax(0, 1fr)); - } - } -} -@media (min-width: 768px) { - - .md\:hx-sticky { - position: sticky; - } - - .md\:hx-top-16 { - top: 4rem; - } - - .md\:hx-inline-block { - display: inline-block; - } - - .md\:hx-hidden { - display: none; - } - - .md\:hx-aspect-\[1\.1\/1\] { - aspect-ratio: 1.1/1; - } - - .md\:hx-h-\[calc\(100vh-var\(--navbar-height\)-var\(--menu-height\)\)\] { - height: calc(100vh - var(--navbar-height) - var(--menu-height)); - } - - .md\:hx-max-h-\[min\(calc\(100vh-5rem-env\(safe-area-inset-bottom\)\)\2c 400px\)\] { - max-height: min(calc(100vh - 5rem - env(safe-area-inset-bottom)),400px); - } - - .md\:hx-w-64 { - width: 16rem; - } - - .md\:hx-shrink-0 { - flex-shrink: 0; - } - - .md\:hx-justify-start { - justify-content: flex-start; - } - - .md\:hx-self-start { - align-self: flex-start; - } - - .md\:hx-px-12 { - padding-left: 3rem; - padding-right: 3rem; - } - - .md\:hx-pt-12 { - padding-top: 3rem; - } - - .md\:hx-text-5xl { - font-size: 3rem; - } - - .md\:hx-text-lg { - font-size: 1.125rem; - } - - .md\:hx-text-sm { - font-size: .875rem; - } -} -@media (min-width: 1280px) { - - .xl\:hx-block { - display: block; - } -} -.ltr\:hx-right-1\.5:where([dir="ltr"], [dir="ltr"] *) { - right: 0.375rem; -} -.ltr\:hx-right-3:where([dir="ltr"], [dir="ltr"] *) { - right: 0.75rem; -} -.ltr\:hx--mr-4:where([dir="ltr"], [dir="ltr"] *) { - margin-right: -1rem; -} -.ltr\:hx-ml-1:where([dir="ltr"], [dir="ltr"] *) { - margin-left: 0.25rem; -} -.ltr\:hx-ml-3:where([dir="ltr"], [dir="ltr"] *) { - margin-left: 0.75rem; -} -.ltr\:hx-ml-auto:where([dir="ltr"], [dir="ltr"] *) { - margin-left: auto; -} -.ltr\:hx-mr-auto:where([dir="ltr"], [dir="ltr"] *) { - margin-right: auto; -} -.ltr\:hx-rotate-180:where([dir="ltr"], [dir="ltr"] *) { - --tw-rotate: 180deg; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} -.ltr\:hx-border-l:where([dir="ltr"], [dir="ltr"] *) { - border-left-width: 1px; -} -.ltr\:hx-pl-12:where([dir="ltr"], [dir="ltr"] *) { - padding-left: 3rem; -} -.ltr\:hx-pl-16:where([dir="ltr"], [dir="ltr"] *) { - padding-left: 4rem; -} -.ltr\:hx-pl-3:where([dir="ltr"], [dir="ltr"] *) { - padding-left: 0.75rem; -} -.ltr\:hx-pl-4:where([dir="ltr"], [dir="ltr"] *) { - padding-left: 1rem; -} -.ltr\:hx-pl-5:where([dir="ltr"], [dir="ltr"] *) { - padding-left: 1.25rem; -} -.ltr\:hx-pl-6:where([dir="ltr"], [dir="ltr"] *) { - padding-left: 1.5rem; -} -.ltr\:hx-pl-8:where([dir="ltr"], [dir="ltr"] *) { - padding-left: 2rem; -} -.ltr\:hx-pr-0:where([dir="ltr"], [dir="ltr"] *) { - padding-right: 0px; -} -.ltr\:hx-pr-2:where([dir="ltr"], [dir="ltr"] *) { - padding-right: 0.5rem; -} -.ltr\:hx-pr-4:where([dir="ltr"], [dir="ltr"] *) { - padding-right: 1rem; -} -.ltr\:hx-pr-9:where([dir="ltr"], [dir="ltr"] *) { - padding-right: 2.25rem; -} -.ltr\:hx-text-right:where([dir="ltr"], [dir="ltr"] *) { - text-align: right; -} -.ltr\:before\:hx-left-0:where([dir="ltr"], [dir="ltr"] *)::before { - content: var(--tw-content); - left: 0px; -} -@media (min-width: 768px) { - - .ltr\:md\:hx-left-auto:where([dir="ltr"], [dir="ltr"] *) { - left: auto; - } -} -.rtl\:hx-left-1\.5:where([dir="rtl"], [dir="rtl"] *) { - left: 0.375rem; -} -.rtl\:hx-left-3:where([dir="rtl"], [dir="rtl"] *) { - left: 0.75rem; -} -.rtl\:hx--ml-4:where([dir="rtl"], [dir="rtl"] *) { - margin-left: -1rem; -} -.rtl\:hx-ml-auto:where([dir="rtl"], [dir="rtl"] *) { - margin-left: auto; -} -.rtl\:hx-mr-1:where([dir="rtl"], [dir="rtl"] *) { - margin-right: 0.25rem; -} -.rtl\:hx-mr-3:where([dir="rtl"], [dir="rtl"] *) { - margin-right: 0.75rem; -} -.rtl\:hx-mr-auto:where([dir="rtl"], [dir="rtl"] *) { - margin-right: auto; -} -.rtl\:-hx-rotate-180:where([dir="rtl"], [dir="rtl"] *) { - --tw-rotate: -180deg; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} -.rtl\:hx-border-r:where([dir="rtl"], [dir="rtl"] *) { - border-right-width: 1px; -} -.rtl\:hx-pl-2:where([dir="rtl"], [dir="rtl"] *) { - padding-left: 0.5rem; -} -.rtl\:hx-pl-4:where([dir="rtl"], [dir="rtl"] *) { - padding-left: 1rem; -} -.rtl\:hx-pl-9:where([dir="rtl"], [dir="rtl"] *) { - padding-left: 2.25rem; -} -.rtl\:hx-pr-12:where([dir="rtl"], [dir="rtl"] *) { - padding-right: 3rem; -} -.rtl\:hx-pr-16:where([dir="rtl"], [dir="rtl"] *) { - padding-right: 4rem; -} -.rtl\:hx-pr-3:where([dir="rtl"], [dir="rtl"] *) { - padding-right: 0.75rem; -} -.rtl\:hx-pr-4:where([dir="rtl"], [dir="rtl"] *) { - padding-right: 1rem; -} -.rtl\:hx-pr-5:where([dir="rtl"], [dir="rtl"] *) { - padding-right: 1.25rem; -} -.rtl\:hx-pr-6:where([dir="rtl"], [dir="rtl"] *) { - padding-right: 1.5rem; -} -.rtl\:hx-pr-8:where([dir="rtl"], [dir="rtl"] *) { - padding-right: 2rem; -} -.rtl\:hx-text-left:where([dir="rtl"], [dir="rtl"] *) { - text-align: left; -} -.rtl\:before\:hx-right-0:where([dir="rtl"], [dir="rtl"] *)::before { - content: var(--tw-content); - right: 0px; -} -.rtl\:before\:hx-rotate-180:where([dir="rtl"], [dir="rtl"] *)::before { - content: var(--tw-content); - --tw-rotate: 180deg; - transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} -@media (min-width: 768px) { - - .rtl\:md\:hx-right-auto:where([dir="rtl"], [dir="rtl"] *) { - right: auto; - } -} -@media print { - - .print\:hx-hidden { - display: none; - } - - .print\:hx-bg-transparent { - background-color: transparent; - } -} diff --git a/isableFastRender/css/custom.css b/isableFastRender/css/custom.css deleted file mode 100644 index e69de29..0000000 diff --git a/isableFastRender/docs/index.html b/isableFastRender/docs/index.html deleted file mode 100644 index aa3b6b2..0000000 --- a/isableFastRender/docs/index.html +++ /dev/null @@ -1,479 +0,0 @@ - - - - - - - - - - - - - - Server Admin – Glympse - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - -
-
- -
Server Admin
-
- -
-

Server Admin

-

This is the documentation for the admin of a Glympse server.

-

Glympse is supplied as a docker container exclusively.

-

Prerequisites: -

    -
  • docker
  • -
  • docker compose
  • -
  • Nvidia GPU for transcribing (preferred for transcoding tasks)
  • -
- -
-
- - -
-
-
- - - - - - - - - - - - diff --git a/isableFastRender/docs/index.xml b/isableFastRender/docs/index.xml deleted file mode 100644 index b59a9b2..0000000 --- a/isableFastRender/docs/index.xml +++ /dev/null @@ -1,800 +0,0 @@ - - - Glympse – Server Admin - http://localhost:1313/docs/ - Recent content in Server Admin on Glympse - Hugo -- gohugo.io - en-gb - - - - - - - - - - - Watching clips - http://localhost:1313/user_docs/watching-clips/watch/ - Mon, 01 Jan 0001 00:00:00 +0000 - - http://localhost:1313/user_docs/watching-clips/watch/ - - - - <p><img src="http://localhost:1313/images/watch_clips.png" alt="Watch Clips" loading="lazy" /> -This is where you will watch through the clips in Glympse.</p> -<p>When the page loads, it will automatically load the first clip into the player. To start playing you can press the big play button in the centre.</p> -<h3>The video Player<span class="hx-absolute -hx-mt-20" id="the-video-player"></span> - <a href="#the-video-player" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><h4>Timecode<span class="hx-absolute -hx-mt-20" id="timecode"></span> - <a href="#timecode" class="subheading-anchor" aria-label="Permalink for this section"></a></h4><p>Glympse uses the timecode from the media files. This is so that it matches the timecode that your editor sees within Avid or their NLE of choice.</p> -<p><em>It is possible that the timecode in Glympse may be a frame off, this is because the timecodes must be calculated rather than read from the file. It will never be more that one frame off the timecode in the NLE.</em></p> -<p>The timecode of the clip is displayed in two places. The seek bar: -<img src="http://localhost:1313/images/timecode1.png" alt="Timecode 1" loading="lazy" /></p> -<p>And there is a timecode box in the top left: -<img src="http://localhost:1313/images/timecode2.png" alt="Timecode 2" loading="lazy" /></p> -<p>This timecode box can be moved anywhere in the player window by dragging it to where you&rsquo;d like it to be. You can reset the position of the timecode or disable the timecode box using the <a href="http://localhost:1313/user_docs/user_settings" >user settings menu.</a></p> -<h4>Audio Selection<span class="hx-absolute -hx-mt-20" id="audio-selection"></span> - <a href="#audio-selection" class="subheading-anchor" aria-label="Permalink for this section"></a></h4><p>For clips that have more than one track of audio, you can select the track to play back by clicking on the headphone icon on the playbar and selecting the audio track. Glympse by default creates a full mix of all the audio channels and plays this by default. -<img src="http://localhost:1313/images/audio_select.png" alt="Audio Tracks" loading="lazy" /></p> -<h4>Theatre Mode<span class="hx-absolute -hx-mt-20" id="theatre-mode"></span> - <a href="#theatre-mode" class="subheading-anchor" aria-label="Permalink for this section"></a></h4><p><img src="http://localhost:1313/images/theatre_mode.png" alt="Theatre Mode" loading="lazy" /> -Clicking the theatre mode button will expand the player to take 100% the width of the browser window. Clicking the theatre mode button again will return the player back to its normal size.</p> -<h4>Full Screen<span class="hx-absolute -hx-mt-20" id="full-screen"></span> - <a href="#full-screen" class="subheading-anchor" aria-label="Permalink for this section"></a></h4><p>Click this button for full screen playback -<img src="http://localhost:1313/images/full_screen.png" alt="Full Screen" loading="lazy" /></p> -<h4>Rotate<span class="hx-absolute -hx-mt-20" id="rotate"></span> - <a href="#rotate" class="subheading-anchor" aria-label="Permalink for this section"></a></h4><p>Some clips like GoPro files can be the wrong orientation. Click the rotate button to rotate the clip by 180° -<img src="http://localhost:1313/images/rotate.png" alt="Rotate" loading="lazy" /></p> -<p>Click the restore rotate to return the clip to its original orientation. -<img src="http://localhost:1313/images/restore_rotate.png" alt="Restore Rotate" loading="lazy" /></p> -<h4>Keyboard shortcuts<span class="hx-absolute -hx-mt-20" id="keyboard-shortcuts"></span> - <a href="#keyboard-shortcuts" class="subheading-anchor" aria-label="Permalink for this section"></a></h4><p>When on this page there are a number of keyboard shortcuts you can use. -J, K, L are shuttle controls to speed up or change the direction of play. You may have to click in the player window to enable these controls. Holding the Shift Key will also increase the amount the play is sped up or slowed down.</p> -<p>M will add a marker at the current time of the clip. Markers will appear for everyone who has access to the production.</p> -<h3>Selecting Clips<span class="hx-absolute -hx-mt-20" id="selecting-clips"></span> - <a href="#selecting-clips" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>You can select the clip you&rsquo;d like to view from the table at the bottom of the screen. Click the title of the clip to load it into the player.</p> -<p>You can also navigate through the clips by pressing the Next/Prev buttons at the bottom of the player. This will load the next or previous clip.</p> -<p>The title of the currently playing clip is shown at the bottom of the player and the middle of the menu bar at the top.</p> -<h3>Related Clips<span class="hx-absolute -hx-mt-20" id="related-clips"></span> - <a href="#related-clips" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>When clips are loaded into Glympse, the system will scan for the start timecode and the end timecode of a clip. This allows it to show all the related clips of the clip you are playing. The related clips box onthe right of the player will update whenever the source of the video player changes. You can automatically hide or show the related clips dropdown using the <a href="http://localhost:1313/user_docs/user_settings" >user settings menu.</a></p> -<p>In this example the clip being played belongs to the Main camera and there are two GoPro cameras that have clips with overlapping timecodes.</p> -<p><img src="http://localhost:1313/images/related.png" alt="Related" loading="lazy" /></p> -<p>Clicking on the title of these related clips will play it in the current page, allowing you to quickly view clips from the other cameras. When you&rsquo;re viewing a related clip, the title in the menu bar and below the player will change showing you that it&rsquo;s playing a related clip then it will list the card followed by the clip title. -<img src="http://localhost:1313/images/related_clip.png" alt="Related" loading="lazy" /> -As well as this, the prev/next buttons will disappear from below the player. You can select the next related clip by clicking on the clip title or you can return to the original clip by selecting it in the table at the bottom again. This will re-enable the next prev buttons and you can resume watching the camera clips as normal.</p> -<p>You can also navigate to any related cards from the related menu in the manu bar. This will show you camera cards from the same camera operator shot on the same day.</p> -<h3>Markers and Tags<span class="hx-absolute -hx-mt-20" id="markers-and-tags"></span> - <a href="#markers-and-tags" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>You can add markers or tags to any clip within Glympse.</p> -<h4>Markers<span class="hx-absolute -hx-mt-20" id="markers"></span> - <a href="#markers" class="subheading-anchor" aria-label="Permalink for this section"></a></h4><p>Markers allow you to mark a specific place in a clip. They will be displayed in the marker window next to the player and clicking on them will take you to the correct position in the clip.</p> -<p>Markers are shown to everyone who has access to the clip.</p> -<h4>Tags<span class="hx-absolute -hx-mt-20" id="tags"></span> - <a href="#tags" class="subheading-anchor" aria-label="Permalink for this section"></a></h4><p>Tags are to tag an entire clip. You can tag more than one clip at a time. There is also a setting in the user settings menu that will automatically add the tags to any related clips.</p> -<p>Tags are available to everyone who has access to the clips.</p> -<h2>Menu Bar<span class="hx-absolute -hx-mt-20" id="menu-bar"></span> - <a href="#menu-bar" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p><img src="http://localhost:1313/images/menu.png" alt="Menu" loading="lazy" /> -The menu bar may show different options depending on what permissions you have. For example, the Download button will only appear if you have been give download permission for your production.</p> -<h3>File<span class="hx-absolute -hx-mt-20" id="file"></span> - <a href="#file" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>From the file menu you can send a clip to be transcribed, edit the metadata of the card, submit the card for re-transcode or report issues with the card.</p> -<h4>Transcribe<span class="hx-absolute -hx-mt-20" id="transcribe"></span> - <a href="#transcribe" class="subheading-anchor" aria-label="Permalink for this section"></a></h4><p>Select the clip or clips you would like to transcribe by checking the box in the table and click file then transcribe. This will send the selected clip(s) to the transcription engine. You can learn more about how this works <a href="http://localhost:1313/user_docs/transcription" >here.</a></p> -<h4>Edit metadata<span class="hx-absolute -hx-mt-20" id="edit-metadata"></span> - <a href="#edit-metadata" class="subheading-anchor" aria-label="Permalink for this section"></a></h4><p>From this menu you can change some of the metadata for the card. Anything you change here will be applied to every clip in the card.</p> -<p>You can change the date, the card name, or the shooter. You can also hide the card which will stop it from showing on the rushes page. Anyone with a link to the card would still be able to access the clips. This will <em>only</em> stop the card from appearing in the rushes page. Users with access to the production can also unhide any card from the metadata edit pages.</p> -<h4>Request Retranscode<span class="hx-absolute -hx-mt-20" id="request-retranscode"></span> - <a href="#request-retranscode" class="subheading-anchor" aria-label="Permalink for this section"></a></h4><p>This will send the entire card back through the transcode engine. It allows you to report any issues with the card and manually submit the clips to the transcoder. The transcode will only work if the original clips are still available.</p> -<h4>Report Issues<span class="hx-absolute -hx-mt-20" id="report-issues"></span> - <a href="#report-issues" class="subheading-anchor" aria-label="Permalink for this section"></a></h4><p>This allows you to report issues with the current card. But this option will not automatically retranscode the clips. They would need to be manually transcoded by the admin team.</p> -<h3>Related<span class="hx-absolute -hx-mt-20" id="related"></span> - <a href="#related" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>This will show any cards that were shot by the same camera operator on the same day as the current card. Clicking one of these will take you load that current card.</p> -<h3>Download<span class="hx-absolute -hx-mt-20" id="download"></span> - <a href="#download" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>If you have been given the download permissions for your production, you can download the original clip by selecting the clips from the table with the checkbox and clicking download. These files can be very large and may take a long time to download.</p> -<h3>Help<span class="hx-absolute -hx-mt-20" id="help"></span> - <a href="#help" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>This will open these help pages.</p> -<h3>Settings<span class="hx-absolute -hx-mt-20" id="settings"></span> - <a href="#settings" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>This will open the user settings menu. <a href="http://localhost:1313/user_docs/user_settings" >Click here to learn more.</a></p> -<p>In the centre of the menu bar, the title of the currently loaded clip will be displayed.</p> - - - - - - Adding A Production - http://localhost:1313/user_docs/watching-clips/add_production/ - Mon, 01 Jan 0001 00:00:00 +0000 - - http://localhost:1313/user_docs/watching-clips/add_production/ - - - - <p>To add a production click the &ldquo;Add Production&rdquo; button in the top right of the home page.</p> -<p>This will bring up the dialogue to add a new production. -<img src="http://localhost:1313/images/add_production.png" alt="Add Production Modal" loading="lazy" /> -A production consists of two parts. The Base Production and the Production.</p> -<p>For example your Base Production may be &ldquo;Game of Thrones&rdquo; then the Production could be &ldquo;Game of Thrones Series 1&rdquo;</p> -<h2>Base Production<span class="hx-absolute -hx-mt-20" id="base-production"></span> - <a href="#base-production" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Select the Base Production, if it doesn&rsquo;t exist create it by clicking the button next to the select dropdown. -Enter the new name of your production and click submit. -<img src="http://localhost:1313/images/add_base.png" alt="Add Production Base" loading="lazy" /> -The name you entered will be automatically selected.</p> -<h2>Production Series<span class="hx-absolute -hx-mt-20" id="production-series"></span> - <a href="#production-series" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Enter the series of the production you are adding. This must be an integer.</p> -<h2>Friendly Name<span class="hx-absolute -hx-mt-20" id="friendly-name"></span> - <a href="#friendly-name" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Enter a short friendly name for the series. This is what will appear on the default thumbnail. In this example we will enter <code>GOTS1</code></p> -<h2>Select the location of the camera rushes.<span class="hx-absolute -hx-mt-20" id="select-the-location-of-the-camera-rushes"></span> - <a href="#select-the-location-of-the-camera-rushes" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Click on a directory to open it and select it by clicking the radio check mark on the left. -<img src="http://localhost:1313/images/series_select.png" alt="Select Series" loading="lazy" /></p> -<h2>Priority<span class="hx-absolute -hx-mt-20" id="priority"></span> - <a href="#priority" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Most productions can be left as the default of 20. But if you have a smaller production or one where the transcodes need to be run before others you can change the priority here. 0 = lowest priority 100 = highest priority.</p> -<h2>Production Owner<span class="hx-absolute -hx-mt-20" id="production-owner"></span> - <a href="#production-owner" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>This is who will be responsible for the production. They will get the emails to say that the production has been scanned etc. This will usually be the edit assistant assigned to the project. The user must exist in the Glympse system.</p> -<p>If left empty, this will default to the admin user.</p> -<p>Click submit and the production will be added to Glympse and the Processing engine will start scanning for new clips. -<img src="http://localhost:1313/images/production_added.png" alt="production Added" loading="lazy" /></p> - - - - - - User Settings - http://localhost:1313/user_docs/watching-clips/user_settings/ - Mon, 01 Jan 0001 00:00:00 +0000 - - http://localhost:1313/user_docs/watching-clips/user_settings/ - - - - <p>From the User Settings menu you can change some personal settings. -<img src="http://localhost:1313/images/user_settings.png" alt="User Settings" loading="lazy" /></p> -<h2>Auto Add/Remove Tags<span class="hx-absolute -hx-mt-20" id="auto-addremove-tags"></span> - <a href="#auto-addremove-tags" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>When checked, this will automatically add or remove tags on any related clips. When unchecked this, any tags you add or remove, will only be apply to the clips you have selected.</p> -<h2>Show Timecode Heading<span class="hx-absolute -hx-mt-20" id="show-timecode-heading"></span> - <a href="#show-timecode-heading" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>This enables/disables the timecode box in the video player. Is is enabled by default, should you wish to disable it, you would do so here.</p> -<h2>Timecode Size<span class="hx-absolute -hx-mt-20" id="timecode-size"></span> - <a href="#timecode-size" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Default: 16</p> -<p>You can change the font size for the timecode box here. Increase to make the timecode larger, decrease to make it smaller.</p> -<h2>Reset Timecode Position<span class="hx-absolute -hx-mt-20" id="reset-timecode-position"></span> - <a href="#reset-timecode-position" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>It is possible that the timecode box may disappear off the ege of the video player. Especially if you use multiple devices with different resolution screens. If that happens, you can reset it to the top left corner here.</p> -<h2>Auto Expand related clips<span class="hx-absolute -hx-mt-20" id="auto-expand-related-clips"></span> - <a href="#auto-expand-related-clips" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>This will automatically expand the related clips accordion oin the right next to the player. If it is enabled, the related clips will be shown automatically. If disabled you would need to manually open the accordion to display them.</p> -<h2>Marker Colour<span class="hx-absolute -hx-mt-20" id="marker-colour"></span> - <a href="#marker-colour" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Change the colour of your markers, this only really applies to the Review section.</p> -<h2>Receive Admin Emails<span class="hx-absolute -hx-mt-20" id="receive-admin-emails"></span> - <a href="#receive-admin-emails" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>If you are set as a production owner, this enables/disables the email updates.</p> - - - - - - Database Installation - http://localhost:1313/docs/installation/database/ - Mon, 01 Jan 0001 00:00:00 +0000 - - http://localhost:1313/docs/installation/database/ - - - - <p>To install you will first need the database and queue manager running. Every instance of Glympse you run will need to connect to these containers.</p> -<p>First create your docker network. <code>docker network create glympse_net</code></p> -<p>Then create a a directory and compose file:</p> -<div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"> - - -<pre><code>mkdir /opt/glympse_database - -cd /opt/glympse_database - -nano /opt/glympse_database/compose.yml</code></pre><div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"> - <button - class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50" - title="Copy code" - > - <div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"></div> - <div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"></div> - </button> -</div> - - -</div> -<p>Paste the following, be sure to change the passwords and any other personal details before saving.</p> -<div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"> - - -<div class="filename" dir="auto">compose.yml</div><div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">services</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">redis</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">redis:alpine</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">container_name</span><span class="p">:</span><span class="w"> </span><span class="l">redis</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">restart</span><span class="p">:</span><span class="w"> </span><span class="l">always</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ports</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="m">6379</span><span class="p">:</span><span class="m">6379</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">volumes</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">/opt/glympse_database/redis_data:/data</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">healthcheck</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">test</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">CMD</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">redis-cli</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">ping</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">interval</span><span class="p">:</span><span class="w"> </span><span class="l">30s</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">timeout</span><span class="p">:</span><span class="w"> </span><span class="l">10s</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">retries</span><span class="p">:</span><span class="w"> </span><span class="m">3</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">networks</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">glympse_net</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">rabbitmq</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">rabbitmq:3.13.4-management</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">container_name</span><span class="p">:</span><span class="w"> </span><span class="l">rabbitmq</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">volumes</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l">bind</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">source</span><span class="p">:</span><span class="w"> </span><span class="l">/opt/glympse_database/rabbitmq.conf</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">target</span><span class="p">:</span><span class="w"> </span><span class="l">/etc/rabbitmq/conf.d/10-defaults.conf</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ports</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="m">15672</span><span class="p">:</span><span class="m">15672</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="m">5672</span><span class="p">:</span><span class="m">5672</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">networks</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">glympse_net</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">mysql</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">mysql:8.0</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">container_name</span><span class="p">:</span><span class="w"> </span><span class="l">mysql</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">environment</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">MYSQL_ROOT_PASSWORD</span><span class="p">:</span><span class="w"> </span><span class="l">&lt;root password&gt;</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">MYSQL_DATABASE</span><span class="p">:</span><span class="w"> </span><span class="l">glympse</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">MYSQL_USER</span><span class="p">:</span><span class="w"> </span><span class="l">glympse</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">MYSQL_PASSWORD</span><span class="p">:</span><span class="w"> </span><span class="l">&lt;glympse password&gt;</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">volumes</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">/opt/glympse/mysql:/var/lib/mysql</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l">bind</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">source</span><span class="p">:</span><span class="w"> </span><span class="l">/opt/glympse_database/my.cnf</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">target</span><span class="p">:</span><span class="w"> </span><span class="l">/etc/my.cnf</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ports</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="m">6033</span><span class="p">:</span><span class="m">6033</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="m">3306</span><span class="p">:</span><span class="m">3306</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">networks</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">glympse_net</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">networks</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">glympse_net</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">external</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-8"> - <button - class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50" - title="Copy code" - > - <div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"></div> - <div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"></div> - </button> -</div> - - -</div> -<p>There are two more files that you need to create and save before running the compose file.</p> -<p>First is the mysql config file.</p> -<p>Create a file called my.cnf in the glympse_database directory: <code>nano my.cnf</code> and paste the following:</p> -<div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"> - - -<div class="filename" dir="auto">my.cnf</div><pre><code># For advice on how to change settings please see -# http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html - -[mysqld] -# -# Remove leading # and set to the amount of RAM for the most important data -# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. -# innodb_buffer_pool_size = 128M -# -# Remove leading # to turn on a very important data integrity option: logging -# changes to the binary log between backups. -# log_bin -# -# Remove leading # to set options mainly useful for reporting servers. -# The server defaults are faster for transactions and fast SELECTs. -# Adjust sizes as needed, experiment to find the optimal values. -# join_buffer_size = 128M -# sort_buffer_size = 2M -# read_rnd_buffer_size = 2M - -# Remove leading # to revert to previous value for default_authentication_plugin, -# this will increase compatibility with older clients. For background, see: -# https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin -# default-authentication-plugin=mysql_native_password -skip-host-cache -skip-name-resolve -datadir=/var/lib/mysql -socket=/var/run/mysqld/mysqld.sock -secure-file-priv=/var/lib/mysql-files -user=mysql -connect_timeout = 600 -net_read_timeout = 30 -wait_timeout = 28800 -interactive_timeout = 28800 - -pid-file=/var/run/mysqld/mysqld.pid -[client] -socket=/var/run/mysqld/mysqld.sock - -!includedir /etc/mysql/conf.d/</code></pre><div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-8"> - <button - class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50" - title="Copy code" - > - <div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"></div> - <div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"></div> - </button> -</div> - - -</div> -<p>Finally create a config file for rabbitmq: <code>nano rabbitmq.conf</code> and paste the following:</p> -<p>be sure to change the password for something secure and keep note of it as you will need it for your compose env files.</p> -<div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"> - - -<div class="filename" dir="auto">rabbitmq.conf</div><pre><code>default_vhost = glympse -default_user = glympse -default_pass = &lt;enter password&gt; -default_permissions.configure = .* -default_permissions.read = .* -default_permissions.write = .* -default_user_tags.administrator = true -default_user_tags.management = true -default_user_tags.glympse = true -consumer_timeout = 31622400000</code></pre><div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-8"> - <button - class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50" - title="Copy code" - > - <div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"></div> - <div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"></div> - </button> -</div> - - -</div> - - - - - - Django Admin Settings - http://localhost:1313/docs/setup/admin_settings/ - Mon, 01 Jan 0001 00:00:00 +0000 - - http://localhost:1313/docs/setup/admin_settings/ - - - - <p>The admin settings page is where you can change almost everything. If it&rsquo;s in the database, it&rsquo;s likely you can make changes here.</p> -<h2>System Settings<span class="hx-absolute -hx-mt-20" id="system-settings"></span> - <a href="#system-settings" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><h1>Whisper Model</h1><p><a href="https://github.com/openai/whisper?tab=readme-ov-file#available-models-and-languages" target="_blank" rel="noopener">See here for more information</a><br> -Default: small</p> -<table> - <thead> - <tr> - <th>Size</th> - <th>Parameters</th> - <th>English-only model</th> - <th>Multilingual model</th> - <th>Required VRAM</th> - <th>Relative speed</th> - </tr> - </thead> - <tbody> - <tr> - <td>tiny</td> - <td>39 M</td> - <td>tiny.en</td> - <td>tiny</td> - <td>~1 GB</td> - <td>~10x</td> - </tr> - <tr> - <td>base</td> - <td>74 M</td> - <td>base.en</td> - <td>base</td> - <td>~1 GB</td> - <td>~7x</td> - </tr> - <tr> - <td>small</td> - <td>244 M</td> - <td>small.en</td> - <td>small</td> - <td>~2 GB</td> - <td>~4x</td> - </tr> - <tr> - <td>medium</td> - <td>769 M</td> - <td>medium.en</td> - <td>medium</td> - <td>~5 GB</td> - <td>~2x</td> - </tr> - <tr> - <td>large</td> - <td>1550 M</td> - <td>N/A</td> - <td>large</td> - <td>~10 GB</td> - <td>1x</td> - </tr> - <tr> - <td>turbo</td> - <td>809 M</td> - <td>N/A</td> - <td>turbo</td> - <td>~6 GB</td> - <td>~8x</td> - </tr> - </tbody> -</table> -<h2>Authentication and Authorization<span class="hx-absolute -hx-mt-20" id="authentication-and-authorization"></span> - <a href="#authentication-and-authorization" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Here you can manage the advanced settings of the users and Groups. Most of these settings can be changed from the front end without coming into the Django Admin page.</p> -<h2>Impersonate<span class="hx-absolute -hx-mt-20" id="impersonate"></span> - <a href="#impersonate" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Here you can view the logs for the impersonation.</p> -<h2>Periodic Tasks.<span class="hx-absolute -hx-mt-20" id="periodic-tasks"></span> - <a href="#periodic-tasks" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>These are created when installed. Should you wish to change the time the tasks run, you would do so in the Periodic Tasks section.</p> -<h3>Clocked<span class="hx-absolute -hx-mt-20" id="clocked"></span> - <a href="#clocked" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>These run once at a specific date and time.</p> -<h3>Cron Tabs<span class="hx-absolute -hx-mt-20" id="cron-tabs"></span> - <a href="#cron-tabs" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>This is where you can set advanced schedules using cron. <a href="https://crontab.guru/" target="_blank" rel="noopener">See here for more information about Cron</a></p> -<h3>Intervals<span class="hx-absolute -hx-mt-20" id="intervals"></span> - <a href="#intervals" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>These will allow you to let a task run at specific intervals, e.g. run once every hour.</p> -<h3>Periodic Tasks<span class="hx-absolute -hx-mt-20" id="periodic-tasks-1"></span> - <a href="#periodic-tasks-1" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>This is where you register or change the tasks, To change the schedule, you will need to create the schedule using one of the above options and then select it in this page.</p> -<p>You can also enable and disable tasks here as well as override the priority of the task.</p> -<h2>Review<span class="hx-absolute -hx-mt-20" id="review"></span> - <a href="#review" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><h3>Review Files<span class="hx-absolute -hx-mt-20" id="review-files"></span> - <a href="#review-files" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>This is where you can see all the files that have been uploaded for review. You can retranscode or delete the files from here.</p> -<h3>Share Links<span class="hx-absolute -hx-mt-20" id="share-links"></span> - <a href="#share-links" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Add, edit or delete the share links for files here.</p> -<h2>Rushes Management<span class="hx-absolute -hx-mt-20" id="rushes-management"></span> - <a href="#rushes-management" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>You can make changes to the metadata of the clips or add or remove the productions here. But most of these tasks can and should be done in the front end.</p> -<h3>Base Productions<span class="hx-absolute -hx-mt-20" id="base-productions"></span> - <a href="#base-productions" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Add or edit the base productions. You can also change the group that the Base Production is assigned to.</p> -<h3>Production<span class="hx-absolute -hx-mt-20" id="production"></span> - <a href="#production" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Here you can make changes to the production such as the name, friendly name, filepath etc. You can also trigger some tasks from this page such as the file scan or the transcoder.</p> -<h3>clips<span class="hx-absolute -hx-mt-20" id="clips"></span> - <a href="#clips" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Here you can see and edit all the metadata for the clips in the Glympse database.</p> -<h2>Transcribe<span class="hx-absolute -hx-mt-20" id="transcribe"></span> - <a href="#transcribe" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><h3>Clips for Transcription<span class="hx-absolute -hx-mt-20" id="clips-for-transcription"></span> - <a href="#clips-for-transcription" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Here you can see all of the clips that have been sent to the transcription engine. You can trigger tasks such as re-transcribe or delete the files from here.</p> - - - - - - Editing Metadata - http://localhost:1313/user_docs/edit_metadata/editing_metadata/ - Mon, 01 Jan 0001 00:00:00 +0000 - - http://localhost:1313/user_docs/edit_metadata/editing_metadata/ - - - - <p>When you click Edit on the metadata page you will be taken to the edit page. This shows a table with all the clips for that production. You can see whether a clip has been transcoded, is marked as hidden or edit the metadata of the clip(s)</p> -<p><img src="http://localhost:1313/images/edit_metadata.png" alt="Edit Metadata" loading="lazy" /></p> -<p>There are limited options for editing the metadata. You can edit only the roll, the date and the shooter aswell as hide or unhide a clip.</p> -<p>To edit a clip select it by checking the checkbox of the clip row. At the bottom of the table you can enter a new roll/date/shooter then click save to save the edits.</p> -<p>Whatever you entered in all three boxes will be applied to the selected clips. Leave the box empty to leave the current details unchanged.</p> -<p>You can also hide/unhide clips by checking the hide checkbox. As soon as you click the checkbox it will be immediately hidden. It is possible that the clips may still appear until the cache has ben flushed. This process can take 10-15 minutes.</p> -<p>From this page you can also send multiple clips to the transcription engine.</p> -<p>Select the clips by checking the checkbox and click transcribe. This w3ill send the selected clips to be transcribed.</p> -<p>You can also delete clips from the Glympse database.</p> -<p>Glympse has read only access to the raw camera files, by deleting clips from Glympse, the original camera files will be unaffected.</p> - - - - - - Glympse Admin - http://localhost:1313/docs/setup/admin_frontend/ - Mon, 01 Jan 0001 00:00:00 +0000 - - http://localhost:1313/docs/setup/admin_frontend/ - - - - <p>You can manage most of the admin settings from the front end. When a user is assigned admin permissions or is joined to the &ldquo;hub&rdquo; group they will have access to the admin menu on the webUI.</p> -<h2>Dashboard<span class="hx-absolute -hx-mt-20" id="dashboard"></span> - <a href="#dashboard" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Access the dashboard page. This give you an overview of the system. It will show some figures like how many clips are waiting to be transcoded or how many clips have been transcribed. It also shows you all running tasks and will also show who is currently online.</p> -<p>You can also trigger the periodic tasks from the bottom of this page.</p> -<h2>Logs<span class="hx-absolute -hx-mt-20" id="logs"></span> - <a href="#logs" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>View the system logs.</p> -<h2>Add Production<span class="hx-absolute -hx-mt-20" id="add-production"></span> - <a href="#add-production" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>This brings up the add production modal where you can add a production. This is the same interface as pressing the add production button on the home page.</p> -<h2>Edit Production<span class="hx-absolute -hx-mt-20" id="edit-production"></span> - <a href="#edit-production" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Here you can edit productions.</p> -<h4>Production Admin<span class="hx-absolute -hx-mt-20" id="production-admin"></span> - <a href="#production-admin" class="subheading-anchor" aria-label="Permalink for this section"></a></h4><p>This is who is responsible for the production. It&rsquo;s likely that this should be the edit assistant assigned to the production. You can change this here, this person will receive the emails after the production has been scanned.</p> -<h4>Cover Image<span class="hx-absolute -hx-mt-20" id="cover-image"></span> - <a href="#cover-image" class="subheading-anchor" aria-label="Permalink for this section"></a></h4><p>Click the image to upload a new thumbnail image for the production. Or reset it.</p> -<h4>Active<span class="hx-absolute -hx-mt-20" id="active"></span> - <a href="#active" class="subheading-anchor" aria-label="Permalink for this section"></a></h4><p>An active production will be scanned for new rushes. A deactivated production will still be available to users.</p> -<h4>Archive<span class="hx-absolute -hx-mt-20" id="archive"></span> - <a href="#archive" class="subheading-anchor" aria-label="Permalink for this section"></a></h4><p>This will remove the production from being able to be viewed. All files will remain, they will just be hidden.</p> -<h4>Export<span class="hx-absolute -hx-mt-20" id="export"></span> - <a href="#export" class="subheading-anchor" aria-label="Permalink for this section"></a></h4><p>This will export a json file containing the database entries for this production that can be archived to another system along with the media files. The media files will have to be manually backed up from your server. Once you have backed up the json file and the media, you can delete the production.</p> -<h4>Delete<span class="hx-absolute -hx-mt-20" id="delete"></span> - <a href="#delete" class="subheading-anchor" aria-label="Permalink for this section"></a></h4><p>This will delete the production and all the clips associated with it.</p> -<h2>Manage Users<span class="hx-absolute -hx-mt-20" id="manage-users"></span> - <a href="#manage-users" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><h3>Edit Users<span class="hx-absolute -hx-mt-20" id="edit-users"></span> - <a href="#edit-users" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Select a user from the dropdown menu and you can assign the user to a group. You can also deactivate the user which will keep the account but not allow the user to log in. Or you can delete the user which will delete their account completely.</p> -<p>If the user was created by logging in via SSO, they will still be able to log in once they have been deleted. But they will have no permissions and won&rsquo;t be assigned to a group so will not have access to any productions.</p> -<p>You can enable the ability for users to scan or start a production transcoder. They will only be able to scan or transcode the productions they have access to.</p> -<p>Clicking on the number beside their name at the top will enter the impersonation for this user. This is useful if you need to check a user has the correct permissions.</p> -<p>You can add a local user by clicking the blue + button at the top.</p> -<h3>Edit Group Permissions<span class="hx-absolute -hx-mt-20" id="edit-group-permissions"></span> - <a href="#edit-group-permissions" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>When a base production is added, a new group of the same name will be created.</p> -<p>From this page you can select a group and assign productions to it. Users assigned to this group will then be able to access these productions.</p> -<p>You can add a new group by clicking the blue + button at the top right.</p> -<p>From this page you can</p> -<h2>Settings<span class="hx-absolute -hx-mt-20" id="settings"></span> - <a href="#settings" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>This will open the django admin setting page.</p> -<h2>Send Email<span class="hx-absolute -hx-mt-20" id="send-email"></span> - <a href="#send-email" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Here you can send an email to registered users. -Either select an existing email draft or click new to create a new one.</p> -<p>This will take you to the editor page. Set the Subject at the top, then select a date and time to send the email. Not setting this will send immediately.</p> -<p>Select the recipients of the email and draft the email below.</p> -<p>The editor is a WYSIWYG editor so the email body will appear exactly as it does in this editor. You can add images and graphics to the email body should you wish.</p> -<p>Click save and preview. This will show you a copy of what the email will look like when sent. You will be able to either schedule the send or edit the email again after this point.</p> -<p>Click Delete to delete the email draft.</p> -<h2>Clear Cache<span class="hx-absolute -hx-mt-20" id="clear-cache"></span> - <a href="#clear-cache" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>This clears the cache of the system. Useful if there have been large database changes. By default the system caches data for around 10 minutes.</p> -<p>Users may have to force refresh their browser to clear their local cache if the changes aren&rsquo;t appearing for them.</p> - - - - - - Glympse Services - http://localhost:1313/docs/installation/services/ - Mon, 01 Jan 0001 00:00:00 +0000 - - http://localhost:1313/docs/installation/services/ - - - - <p>Glympse is split into multiple services so you can split the workload between multiple machines.</p> -<p>The available services are as follows:</p> -<ul> -<li> -<p>Celery Beat<br> -You should only have one of these running across all your containers. This is responsible for managing the scheduled tasks. Without this, the scheduled tasks will not run. For ease, I usually run this in the same container as the webui.</p> -</li> -<li> -<p>WebUI<br> -This is the webui front end. The reverse proxy needs to point to the machine that is running this service. It is possible to run more than one frontend for load balancing purposes.</p> -</li> -<li> -<p>Processing<br> -This service is responsible for scanning the rushes drives and inserting the rushes into the Glympse database. It is also responsible for other background tasks such as sending emails etc. This worker will run 16 simultaneous tasks.</p> -</li> -<li> -<p>Transcoding - <strong>Prefers Nvidia GPU</strong><br> -This is the transcoding engine. It takes the raw rushes and transcodes them to lower resolution proxy files that can be streamed. The transcoder will try use cuda hardware acceleration but will fall back to software if it is unavailable. This worker will run 4 simultaneous tasks.</p> -</li> -<li> -<p>Long Transcoding<br> -This was set up to create the thumbnail preview for the video player when you hover over the video play bar to allow for scrubbing. This worker will run 16 simultaneous tasks.</p> -</li> -<li> -<p>Transcribing - <strong>Requires Nvidia GPU</strong><br> -This is responsible for transcribing clips. A modern Nvidia GPU is required for this to work. It is possible to select a different model that may better suit the available hardware. A GPU with more VRAM can support a larger model. This worker will run a single task at a time.</p> -</li> -</ul> -<p>It is possible to run one or more services in a single docker container. the running services are managed through the environment settings in the compose file.</p> - - - - - - Install Glympse - http://localhost:1313/docs/installation/install_glympse/ - Mon, 01 Jan 0001 00:00:00 +0000 - - http://localhost:1313/docs/installation/install_glympse/ - - - - <p>To install glympse we first need to create a docker compose file and then an env file. These two files will allow you to configure most out of the box settings. Once you&rsquo;re set these up, you will be able to change more setting from the webui.</p> -<p>Services default to enabled, to disable a service, change yes to no in the environment section of the compose file. To enable a service, either change the environment variable to yes or delete/comment the line.</p> -<p>UWSGI and NGINX are required for the webui service</p> -<p>The following compose file will enable all services in a single container. This will work but it is possible that the transcoding and transcribing tasks can slow down the webui if you&rsquo;re running on a slower machine.</p> -<p>If you are going to be running the transcoder or the transcription engine, you will need an Nvidia GPU. To find the device ID run <code>nvidia_smi</code> on the system you will be installing the container. -This will give you an output that looks like this:</p> -<div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"> - - -<pre><code>&#43;-----------------------------------------------------------------------------------------&#43; -| NVIDIA-SMI 565.57.02 Driver Version: 566.03 CUDA Version: 12.7 | -|-----------------------------------------&#43;------------------------&#43;----------------------&#43; -| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | -| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | -| | | MIG M. | -|=========================================&#43;========================&#43;======================| -| 0 NVIDIA GeForce GTX 1080 On | 00000000:01:00.0 On | N/A | -| 27% 38C P8 8W / 180W | 893MiB / 8192MiB | 1% Default | -| | | N/A | -&#43;-----------------------------------------&#43;------------------------&#43;----------------------&#43; - -&#43;-----------------------------------------------------------------------------------------&#43; -| Processes: | -| GPU GI CI PID Type Process name GPU Memory | -| ID ID Usage | -|=========================================================================================| -| 0 N/A N/A 26 G /Xwayland N/A | -&#43;-----------------------------------------------------------------------------------------&#43;</code></pre><div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"> - <button - class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50" - title="Copy code" - > - <div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"></div> - <div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"></div> - </button> -</div> - - -</div> -<p>The device id is in the third row, just above the memory:</p> -<div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"> - - -<pre><code>&#43;========================&#43; -| 00000000:01:00.0 On | -| 893MiB / 8192MiB | -| | -&#43;------------------------&#43;</code></pre><div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"> - <button - class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50" - title="Copy code" - > - <div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"></div> - <div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"></div> - </button> -</div> - - -</div> -<p>In this case the device id is: <code>00000000:01:00.0</code></p> -<p>Add this to your compose file. A file that runs all services with a gpu looks like:</p> -<div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"> - - -<div class="filename" dir="auto">compose.yml</div><div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">services</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">Glympse_net</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">git.themainframe.co.uk/josh/glympse</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">container_name</span><span class="p">:</span><span class="w"> </span><span class="l">Glympse</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">restart</span><span class="p">:</span><span class="w"> </span><span class="l">unless-stopped</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ports</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="m">8080</span><span class="p">:</span><span class="m">80</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">environment</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">TZ</span><span class="p">:</span><span class="w"> </span><span class="l">Europe/London</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ENABLE_UWSGI</span><span class="p">:</span><span class="w"> </span><span class="kc">yes</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ENABLE_NGINX</span><span class="p">:</span><span class="w"> </span><span class="kc">yes</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ENABLE_CELERY_BEAT</span><span class="p">:</span><span class="w"> </span><span class="kc">yes</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ENABLE_PROCESSING</span><span class="p">:</span><span class="w"> </span><span class="kc">yes</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ENABLE_MIGRATIONS</span><span class="p">:</span><span class="w"> </span><span class="kc">yes</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ENABLE_TRANSCRIBER</span><span class="p">:</span><span class="w"> </span><span class="kc">yes</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ENABLE_TRANSCODER</span><span class="p">:</span><span class="w"> </span><span class="kc">yes</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">DJANGO_SETTINGS_MODULE</span><span class="p">:</span><span class="w"> </span><span class="l">Glympse.settings.production</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">SECRET_KEY</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;super_secret_key&#34;</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">SECRET_ADMIN_URL</span><span class="p">:</span><span class="w"> </span><span class="l">random_string</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">CSRF_TRUSTED_ORIGINS</span><span class="p">:</span><span class="w"> </span><span class="l">http://127.0.0.1</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ALLOWED_HOSTS</span><span class="p">:</span><span class="w"> </span><span class="m">127.0.0.1</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ADMINS</span><span class="p">:</span><span class="w"> </span><span class="l">admin@glympsevideo.com</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">DOMAIN</span><span class="p">:</span><span class="w"> </span><span class="l">glympse.glympsevideo.com</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">SQL_ENGINE</span><span class="p">:</span><span class="w"> </span><span class="l">django.db.backends.mysql</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">SQL_DATABASE</span><span class="p">:</span><span class="w"> </span><span class="l">glympse</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">SQL_USER</span><span class="p">:</span><span class="w"> </span><span class="l">glympse</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">SQL_PASSWORD</span><span class="p">:</span><span class="w"> </span><span class="l">insecure_password</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">SQL_HOST</span><span class="p">:</span><span class="w"> </span><span class="l">mysql</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">SQL_PORT</span><span class="p">:</span><span class="w"> </span><span class="m">3306</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">EMAIL_HOST</span><span class="p">:</span><span class="w"> </span><span class="l">mail.themainframe.co.uk</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">EMAIL_PORT</span><span class="p">:</span><span class="w"> </span><span class="m">587</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">EMAIL_USE_TLS</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">EMAIL_HOST_USER</span><span class="p">:</span><span class="w"> </span><span class="l">noreply@glympsevideo.com</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">EMAIL_HOST_PASSWORD</span><span class="p">:</span><span class="w"> </span><span class="l">insecure_password</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">DEFAULT_FROM_EMAIL</span><span class="p">:</span><span class="w"> </span><span class="l">Glympse&lt;glympse@glympsevideo.com&gt;</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ALLOWED_EMAIL_DOMAINS</span><span class="p">:</span><span class="w"> </span><span class="l">glympsevideo.com</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">REDIS_HOST</span><span class="p">:</span><span class="w"> </span><span class="l">redis://redis:6379</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">RABBITMQ_URL</span><span class="p">:</span><span class="w"> </span><span class="l">amqp://glympse:insecure_password@rabbitmq:5672/glympse</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ADMIN_USERNAME</span><span class="p">:</span><span class="w"> </span><span class="l">hub</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ADMIN_EMAIL</span><span class="p">:</span><span class="w"> </span><span class="l">admin@glympsevideo.com</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ADMIN_PASSWORD</span><span class="p">:</span><span class="w"> </span><span class="l">insecure_password</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">LOG_LEVEL</span><span class="p">:</span><span class="w"> </span><span class="l">DEBUG</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">TIMEZONE</span><span class="p">:</span><span class="w"> </span><span class="l">Europe/London</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">MICROSOFT_AUTH_CLIENT_ID</span><span class="p">:</span><span class="w"> </span><span class="l">None</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">MICROSOFT_AUTH_CLIENT_SECRET</span><span class="p">:</span><span class="w"> </span><span class="l">None</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">MICROSOFT_AUTH_TENANT_ID</span><span class="p">:</span><span class="w"> </span><span class="l">None</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">MEMCACHED</span><span class="p">:</span><span class="w"> </span><span class="l">memcached:11211</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">CUDA_DEVICE</span><span class="p">:</span><span class="w"> </span><span class="l">cuda:0</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">DEBUG</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;True&#34;</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">REMOTE_WORKER</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;False&#34;</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">REMOTE_PRODUCTION</span><span class="p">:</span><span class="w"> </span><span class="l">None</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">volumes</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">/opt/glympse/logs:/Glympse/logs</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">/media:/media</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">/rushes:/rushes:ro</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">deploy</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">resources</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">reservations</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">devices</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">driver</span><span class="p">:</span><span class="w"> </span><span class="l">nvidia</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">device_ids</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="m">00000000</span><span class="p">:</span><span class="m">01</span><span class="p">:</span><span class="m">00.0</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">capabilities</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">gpu</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">networks</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">glympse_net</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">memcached</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">memcached:latest</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">container_name</span><span class="p">:</span><span class="w"> </span><span class="l">memcached</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">entrypoint</span><span class="p">:</span><span class="w"> </span><span class="l">memcached -m 256</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">restart</span><span class="p">:</span><span class="w"> </span><span class="l">unless-stopped</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">networks</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">glympse_net</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">networks</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">glympse_net</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">external</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-8"> - <button - class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50" - title="Copy code" - > - <div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"></div> - <div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"></div> - </button> -</div> - - -</div> -<p>If you are install Glympse on a second system or a system other than where the raw camera files are stored you can use the following to mount the volumes as smb shares:</p> -<div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"> - - -<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">volumes</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">rushes</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">driver</span><span class="p">:</span><span class="w"> </span><span class="l">local</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">driver_opts</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l">cifs</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">o</span><span class="p">:</span><span class="w"> </span><span class="l">username=&lt;sbm_username&gt;,password=&lt;smb_password&gt;,ro,domain=localhost</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">device</span><span class="p">:</span><span class="w"> </span><span class="l">\\smb\share\path</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"> - <button - class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50" - title="Copy code" - > - <div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"></div> - <div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"></div> - </button> -</div> - - -</div> -<p>Alternatively you can use a nfs share:</p> -<div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"> - - -<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">volumes</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">rushes</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">driver_opts</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l">nfs</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">o</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;addr=&lt;nfs-server-ip&gt;,nolock,soft,rw&#34;</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">device</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;:/full/share/path&#34;</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"> - <button - class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50" - title="Copy code" - > - <div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"></div> - <div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"></div> - </button> -</div> - - -</div> -<p>You will need to make sure that if you are mounting the raw rushes volume that you mount this as <code>ro</code> or read only so Glympse can not make any changes to the raw rushes.</p> -<p>If you are mounting the glympse mediafiles or logs, you will need to mount this as <code>rw</code> or read write so Glympse can create the files.</p> - - - - - - diff --git a/isableFastRender/docs/installation/database/index.html b/isableFastRender/docs/installation/database/index.html deleted file mode 100644 index 281ee48..0000000 --- a/isableFastRender/docs/installation/database/index.html +++ /dev/null @@ -1,665 +0,0 @@ - - - - - - - - - - - - - - Database Installation – Glympse - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - -
-
- -
- -
Database Installation
-
- -
-

Database Installation

-

To install you will first need the database and queue manager running. Every instance of Glympse you run will need to connect to these containers.

-

First create your docker network. docker network create glympse_net

-

Then create a a directory and compose file:

-
- - -
mkdir /opt/glympse_database
-
-cd /opt/glympse_database
-
-nano /opt/glympse_database/compose.yml
- -
- - -
-

Paste the following, be sure to change the passwords and any other personal details before saving.

-
- - -
compose.yml
services:
-  redis:
-    image: redis:alpine
-    container_name: redis
-    restart: always
-    ports:
-      - 6379:6379
-    volumes:
-      - /opt/glympse_database/redis_data:/data
-    healthcheck:
-      test:
-        - CMD
-        - redis-cli
-        - ping
-      interval: 30s
-      timeout: 10s
-      retries: 3
-    networks:
-      glympse_net: null      
-  rabbitmq:
-    image: rabbitmq:3.13.4-management
-    container_name: rabbitmq
-    volumes:
-      - type: bind
-        source: /opt/glympse_database/rabbitmq.conf
-        target: /etc/rabbitmq/conf.d/10-defaults.conf
-    ports:
-      - 15672:15672
-      - 5672:5672
-    networks:
-      glympse_net: null      
-  mysql:
-    image: mysql:8.0
-    container_name: mysql
-    environment:
-      MYSQL_ROOT_PASSWORD: <root password>
-      MYSQL_DATABASE: glympse
-      MYSQL_USER: glympse
-      MYSQL_PASSWORD: <glympse password>
-    volumes:
-      - /opt/glympse/mysql:/var/lib/mysql
-      - type: bind
-        source: /opt/glympse_database/my.cnf
-        target: /etc/my.cnf
-    ports:
-      - 6033:6033
-      - 3306:3306
-    networks:
-      glympse_net: null
-networks:
-  glympse_net:
-    external: true
- -
- - -
-

There are two more files that you need to create and save before running the compose file.

-

First is the mysql config file.

-

Create a file called my.cnf in the glympse_database directory: nano my.cnf and paste the following:

-
- - -
my.cnf
# For advice on how to change settings please see
-# http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html
-
-[mysqld]
-#
-# Remove leading # and set to the amount of RAM for the most important data
-# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
-# innodb_buffer_pool_size = 128M
-#
-# Remove leading # to turn on a very important data integrity option: logging
-# changes to the binary log between backups.
-# log_bin
-#
-# Remove leading # to set options mainly useful for reporting servers.
-# The server defaults are faster for transactions and fast SELECTs.
-# Adjust sizes as needed, experiment to find the optimal values.
-# join_buffer_size = 128M
-# sort_buffer_size = 2M
-# read_rnd_buffer_size = 2M
-
-# Remove leading # to revert to previous value for default_authentication_plugin,
-# this will increase compatibility with older clients. For background, see:
-# https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin
-# default-authentication-plugin=mysql_native_password
-skip-host-cache
-skip-name-resolve
-datadir=/var/lib/mysql
-socket=/var/run/mysqld/mysqld.sock
-secure-file-priv=/var/lib/mysql-files
-user=mysql
-connect_timeout = 600
-net_read_timeout = 30
-wait_timeout = 28800
-interactive_timeout = 28800
-
-pid-file=/var/run/mysqld/mysqld.pid
-[client]
-socket=/var/run/mysqld/mysqld.sock
-
-!includedir /etc/mysql/conf.d/
- -
- - -
-

Finally create a config file for rabbitmq: nano rabbitmq.conf and paste the following:

-

be sure to change the password for something secure and keep note of it as you will need it for your compose env files.

-
- - -
rabbitmq.conf
default_vhost = glympse
-default_user = glympse
-default_pass = <enter password>
-default_permissions.configure = .*
-default_permissions.read = .*
-default_permissions.write = .*
-default_user_tags.administrator = true
-default_user_tags.management = true
-default_user_tags.glympse = true
-consumer_timeout = 31622400000
- -
- - -
- -
-
- - -
-
-
- - - - - - - - - - - - diff --git a/isableFastRender/docs/installation/index.html b/isableFastRender/docs/installation/index.html deleted file mode 100644 index 24d6a96..0000000 --- a/isableFastRender/docs/installation/index.html +++ /dev/null @@ -1,472 +0,0 @@ - - - - - - - - - - - - - - Installation – Glympse - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - -
-
- -
-
Installation
-
- -
-

Installation

-

To install Glympse, you will need a database, a redis cache and a rabbitmq queue all of which must be accessible by all of the Glympse containers you deploy. For that reason it is recommended to keep this as a separate compose file.

- - - -
-
- - -
-
-
- - - - - - - - - - - - diff --git a/isableFastRender/docs/installation/index.xml b/isableFastRender/docs/installation/index.xml deleted file mode 100644 index f513ae3..0000000 --- a/isableFastRender/docs/installation/index.xml +++ /dev/null @@ -1,454 +0,0 @@ - - - Glympse – Installation - http://localhost:1313/docs/installation/ - Recent content in Installation on Glympse - Hugo -- gohugo.io - en-gb - - - - - - - - - - - Database Installation - http://localhost:1313/docs/installation/database/ - Mon, 01 Jan 0001 00:00:00 +0000 - - http://localhost:1313/docs/installation/database/ - - - - <p>To install you will first need the database and queue manager running. Every instance of Glympse you run will need to connect to these containers.</p> -<p>First create your docker network. <code>docker network create glympse_net</code></p> -<p>Then create a a directory and compose file:</p> -<div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"> - - -<pre><code>mkdir /opt/glympse_database - -cd /opt/glympse_database - -nano /opt/glympse_database/compose.yml</code></pre><div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"> - <button - class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50" - title="Copy code" - > - <div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"></div> - <div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"></div> - </button> -</div> - - -</div> -<p>Paste the following, be sure to change the passwords and any other personal details before saving.</p> -<div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"> - - -<div class="filename" dir="auto">compose.yml</div><div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">services</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">redis</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">redis:alpine</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">container_name</span><span class="p">:</span><span class="w"> </span><span class="l">redis</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">restart</span><span class="p">:</span><span class="w"> </span><span class="l">always</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ports</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="m">6379</span><span class="p">:</span><span class="m">6379</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">volumes</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">/opt/glympse_database/redis_data:/data</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">healthcheck</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">test</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">CMD</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">redis-cli</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">ping</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">interval</span><span class="p">:</span><span class="w"> </span><span class="l">30s</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">timeout</span><span class="p">:</span><span class="w"> </span><span class="l">10s</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">retries</span><span class="p">:</span><span class="w"> </span><span class="m">3</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">networks</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">glympse_net</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">rabbitmq</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">rabbitmq:3.13.4-management</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">container_name</span><span class="p">:</span><span class="w"> </span><span class="l">rabbitmq</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">volumes</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l">bind</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">source</span><span class="p">:</span><span class="w"> </span><span class="l">/opt/glympse_database/rabbitmq.conf</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">target</span><span class="p">:</span><span class="w"> </span><span class="l">/etc/rabbitmq/conf.d/10-defaults.conf</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ports</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="m">15672</span><span class="p">:</span><span class="m">15672</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="m">5672</span><span class="p">:</span><span class="m">5672</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">networks</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">glympse_net</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">mysql</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">mysql:8.0</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">container_name</span><span class="p">:</span><span class="w"> </span><span class="l">mysql</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">environment</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">MYSQL_ROOT_PASSWORD</span><span class="p">:</span><span class="w"> </span><span class="l">&lt;root password&gt;</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">MYSQL_DATABASE</span><span class="p">:</span><span class="w"> </span><span class="l">glympse</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">MYSQL_USER</span><span class="p">:</span><span class="w"> </span><span class="l">glympse</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">MYSQL_PASSWORD</span><span class="p">:</span><span class="w"> </span><span class="l">&lt;glympse password&gt;</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">volumes</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">/opt/glympse/mysql:/var/lib/mysql</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l">bind</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">source</span><span class="p">:</span><span class="w"> </span><span class="l">/opt/glympse_database/my.cnf</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">target</span><span class="p">:</span><span class="w"> </span><span class="l">/etc/my.cnf</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ports</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="m">6033</span><span class="p">:</span><span class="m">6033</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="m">3306</span><span class="p">:</span><span class="m">3306</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">networks</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">glympse_net</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">networks</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">glympse_net</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">external</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-8"> - <button - class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50" - title="Copy code" - > - <div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"></div> - <div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"></div> - </button> -</div> - - -</div> -<p>There are two more files that you need to create and save before running the compose file.</p> -<p>First is the mysql config file.</p> -<p>Create a file called my.cnf in the glympse_database directory: <code>nano my.cnf</code> and paste the following:</p> -<div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"> - - -<div class="filename" dir="auto">my.cnf</div><pre><code># For advice on how to change settings please see -# http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html - -[mysqld] -# -# Remove leading # and set to the amount of RAM for the most important data -# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. -# innodb_buffer_pool_size = 128M -# -# Remove leading # to turn on a very important data integrity option: logging -# changes to the binary log between backups. -# log_bin -# -# Remove leading # to set options mainly useful for reporting servers. -# The server defaults are faster for transactions and fast SELECTs. -# Adjust sizes as needed, experiment to find the optimal values. -# join_buffer_size = 128M -# sort_buffer_size = 2M -# read_rnd_buffer_size = 2M - -# Remove leading # to revert to previous value for default_authentication_plugin, -# this will increase compatibility with older clients. For background, see: -# https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin -# default-authentication-plugin=mysql_native_password -skip-host-cache -skip-name-resolve -datadir=/var/lib/mysql -socket=/var/run/mysqld/mysqld.sock -secure-file-priv=/var/lib/mysql-files -user=mysql -connect_timeout = 600 -net_read_timeout = 30 -wait_timeout = 28800 -interactive_timeout = 28800 - -pid-file=/var/run/mysqld/mysqld.pid -[client] -socket=/var/run/mysqld/mysqld.sock - -!includedir /etc/mysql/conf.d/</code></pre><div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-8"> - <button - class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50" - title="Copy code" - > - <div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"></div> - <div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"></div> - </button> -</div> - - -</div> -<p>Finally create a config file for rabbitmq: <code>nano rabbitmq.conf</code> and paste the following:</p> -<p>be sure to change the password for something secure and keep note of it as you will need it for your compose env files.</p> -<div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"> - - -<div class="filename" dir="auto">rabbitmq.conf</div><pre><code>default_vhost = glympse -default_user = glympse -default_pass = &lt;enter password&gt; -default_permissions.configure = .* -default_permissions.read = .* -default_permissions.write = .* -default_user_tags.administrator = true -default_user_tags.management = true -default_user_tags.glympse = true -consumer_timeout = 31622400000</code></pre><div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-8"> - <button - class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50" - title="Copy code" - > - <div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"></div> - <div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"></div> - </button> -</div> - - -</div> - - - - - - Glympse Services - http://localhost:1313/docs/installation/services/ - Mon, 01 Jan 0001 00:00:00 +0000 - - http://localhost:1313/docs/installation/services/ - - - - <p>Glympse is split into multiple services so you can split the workload between multiple machines.</p> -<p>The available services are as follows:</p> -<ul> -<li> -<p>Celery Beat<br> -You should only have one of these running across all your containers. This is responsible for managing the scheduled tasks. Without this, the scheduled tasks will not run. For ease, I usually run this in the same container as the webui.</p> -</li> -<li> -<p>WebUI<br> -This is the webui front end. The reverse proxy needs to point to the machine that is running this service. It is possible to run more than one frontend for load balancing purposes.</p> -</li> -<li> -<p>Processing<br> -This service is responsible for scanning the rushes drives and inserting the rushes into the Glympse database. It is also responsible for other background tasks such as sending emails etc. This worker will run 16 simultaneous tasks.</p> -</li> -<li> -<p>Transcoding - <strong>Prefers Nvidia GPU</strong><br> -This is the transcoding engine. It takes the raw rushes and transcodes them to lower resolution proxy files that can be streamed. The transcoder will try use cuda hardware acceleration but will fall back to software if it is unavailable. This worker will run 4 simultaneous tasks.</p> -</li> -<li> -<p>Long Transcoding<br> -This was set up to create the thumbnail preview for the video player when you hover over the video play bar to allow for scrubbing. This worker will run 16 simultaneous tasks.</p> -</li> -<li> -<p>Transcribing - <strong>Requires Nvidia GPU</strong><br> -This is responsible for transcribing clips. A modern Nvidia GPU is required for this to work. It is possible to select a different model that may better suit the available hardware. A GPU with more VRAM can support a larger model. This worker will run a single task at a time.</p> -</li> -</ul> -<p>It is possible to run one or more services in a single docker container. the running services are managed through the environment settings in the compose file.</p> - - - - - - Install Glympse - http://localhost:1313/docs/installation/install_glympse/ - Mon, 01 Jan 0001 00:00:00 +0000 - - http://localhost:1313/docs/installation/install_glympse/ - - - - <p>To install glympse we first need to create a docker compose file and then an env file. These two files will allow you to configure most out of the box settings. Once you&rsquo;re set these up, you will be able to change more setting from the webui.</p> -<p>Services default to enabled, to disable a service, change yes to no in the environment section of the compose file. To enable a service, either change the environment variable to yes or delete/comment the line.</p> -<p>UWSGI and NGINX are required for the webui service</p> -<p>The following compose file will enable all services in a single container. This will work but it is possible that the transcoding and transcribing tasks can slow down the webui if you&rsquo;re running on a slower machine.</p> -<p>If you are going to be running the transcoder or the transcription engine, you will need an Nvidia GPU. To find the device ID run <code>nvidia_smi</code> on the system you will be installing the container. -This will give you an output that looks like this:</p> -<div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"> - - -<pre><code>&#43;-----------------------------------------------------------------------------------------&#43; -| NVIDIA-SMI 565.57.02 Driver Version: 566.03 CUDA Version: 12.7 | -|-----------------------------------------&#43;------------------------&#43;----------------------&#43; -| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | -| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | -| | | MIG M. | -|=========================================&#43;========================&#43;======================| -| 0 NVIDIA GeForce GTX 1080 On | 00000000:01:00.0 On | N/A | -| 27% 38C P8 8W / 180W | 893MiB / 8192MiB | 1% Default | -| | | N/A | -&#43;-----------------------------------------&#43;------------------------&#43;----------------------&#43; - -&#43;-----------------------------------------------------------------------------------------&#43; -| Processes: | -| GPU GI CI PID Type Process name GPU Memory | -| ID ID Usage | -|=========================================================================================| -| 0 N/A N/A 26 G /Xwayland N/A | -&#43;-----------------------------------------------------------------------------------------&#43;</code></pre><div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"> - <button - class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50" - title="Copy code" - > - <div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"></div> - <div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"></div> - </button> -</div> - - -</div> -<p>The device id is in the third row, just above the memory:</p> -<div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"> - - -<pre><code>&#43;========================&#43; -| 00000000:01:00.0 On | -| 893MiB / 8192MiB | -| | -&#43;------------------------&#43;</code></pre><div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"> - <button - class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50" - title="Copy code" - > - <div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"></div> - <div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"></div> - </button> -</div> - - -</div> -<p>In this case the device id is: <code>00000000:01:00.0</code></p> -<p>Add this to your compose file. A file that runs all services with a gpu looks like:</p> -<div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"> - - -<div class="filename" dir="auto">compose.yml</div><div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">services</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">Glympse_net</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">git.themainframe.co.uk/josh/glympse</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">container_name</span><span class="p">:</span><span class="w"> </span><span class="l">Glympse</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">restart</span><span class="p">:</span><span class="w"> </span><span class="l">unless-stopped</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ports</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="m">8080</span><span class="p">:</span><span class="m">80</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">environment</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">TZ</span><span class="p">:</span><span class="w"> </span><span class="l">Europe/London</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ENABLE_UWSGI</span><span class="p">:</span><span class="w"> </span><span class="kc">yes</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ENABLE_NGINX</span><span class="p">:</span><span class="w"> </span><span class="kc">yes</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ENABLE_CELERY_BEAT</span><span class="p">:</span><span class="w"> </span><span class="kc">yes</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ENABLE_PROCESSING</span><span class="p">:</span><span class="w"> </span><span class="kc">yes</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ENABLE_MIGRATIONS</span><span class="p">:</span><span class="w"> </span><span class="kc">yes</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ENABLE_TRANSCRIBER</span><span class="p">:</span><span class="w"> </span><span class="kc">yes</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ENABLE_TRANSCODER</span><span class="p">:</span><span class="w"> </span><span class="kc">yes</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">DJANGO_SETTINGS_MODULE</span><span class="p">:</span><span class="w"> </span><span class="l">Glympse.settings.production</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">SECRET_KEY</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;super_secret_key&#34;</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">SECRET_ADMIN_URL</span><span class="p">:</span><span class="w"> </span><span class="l">random_string</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">CSRF_TRUSTED_ORIGINS</span><span class="p">:</span><span class="w"> </span><span class="l">http://127.0.0.1</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ALLOWED_HOSTS</span><span class="p">:</span><span class="w"> </span><span class="m">127.0.0.1</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ADMINS</span><span class="p">:</span><span class="w"> </span><span class="l">admin@glympsevideo.com</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">DOMAIN</span><span class="p">:</span><span class="w"> </span><span class="l">glympse.glympsevideo.com</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">SQL_ENGINE</span><span class="p">:</span><span class="w"> </span><span class="l">django.db.backends.mysql</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">SQL_DATABASE</span><span class="p">:</span><span class="w"> </span><span class="l">glympse</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">SQL_USER</span><span class="p">:</span><span class="w"> </span><span class="l">glympse</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">SQL_PASSWORD</span><span class="p">:</span><span class="w"> </span><span class="l">insecure_password</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">SQL_HOST</span><span class="p">:</span><span class="w"> </span><span class="l">mysql</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">SQL_PORT</span><span class="p">:</span><span class="w"> </span><span class="m">3306</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">EMAIL_HOST</span><span class="p">:</span><span class="w"> </span><span class="l">mail.themainframe.co.uk</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">EMAIL_PORT</span><span class="p">:</span><span class="w"> </span><span class="m">587</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">EMAIL_USE_TLS</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">EMAIL_HOST_USER</span><span class="p">:</span><span class="w"> </span><span class="l">noreply@glympsevideo.com</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">EMAIL_HOST_PASSWORD</span><span class="p">:</span><span class="w"> </span><span class="l">insecure_password</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">DEFAULT_FROM_EMAIL</span><span class="p">:</span><span class="w"> </span><span class="l">Glympse&lt;glympse@glympsevideo.com&gt;</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ALLOWED_EMAIL_DOMAINS</span><span class="p">:</span><span class="w"> </span><span class="l">glympsevideo.com</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">REDIS_HOST</span><span class="p">:</span><span class="w"> </span><span class="l">redis://redis:6379</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">RABBITMQ_URL</span><span class="p">:</span><span class="w"> </span><span class="l">amqp://glympse:insecure_password@rabbitmq:5672/glympse</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ADMIN_USERNAME</span><span class="p">:</span><span class="w"> </span><span class="l">hub</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ADMIN_EMAIL</span><span class="p">:</span><span class="w"> </span><span class="l">admin@glympsevideo.com</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ADMIN_PASSWORD</span><span class="p">:</span><span class="w"> </span><span class="l">insecure_password</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">LOG_LEVEL</span><span class="p">:</span><span class="w"> </span><span class="l">DEBUG</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">TIMEZONE</span><span class="p">:</span><span class="w"> </span><span class="l">Europe/London</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">MICROSOFT_AUTH_CLIENT_ID</span><span class="p">:</span><span class="w"> </span><span class="l">None</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">MICROSOFT_AUTH_CLIENT_SECRET</span><span class="p">:</span><span class="w"> </span><span class="l">None</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">MICROSOFT_AUTH_TENANT_ID</span><span class="p">:</span><span class="w"> </span><span class="l">None</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">MEMCACHED</span><span class="p">:</span><span class="w"> </span><span class="l">memcached:11211</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">CUDA_DEVICE</span><span class="p">:</span><span class="w"> </span><span class="l">cuda:0</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">DEBUG</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;True&#34;</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">REMOTE_WORKER</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;False&#34;</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">REMOTE_PRODUCTION</span><span class="p">:</span><span class="w"> </span><span class="l">None</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">volumes</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">/opt/glympse/logs:/Glympse/logs</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">/media:/media</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">/rushes:/rushes:ro</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">deploy</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">resources</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">reservations</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">devices</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">driver</span><span class="p">:</span><span class="w"> </span><span class="l">nvidia</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">device_ids</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="m">00000000</span><span class="p">:</span><span class="m">01</span><span class="p">:</span><span class="m">00.0</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">capabilities</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">gpu</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">networks</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">glympse_net</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">memcached</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">memcached:latest</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">container_name</span><span class="p">:</span><span class="w"> </span><span class="l">memcached</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">entrypoint</span><span class="p">:</span><span class="w"> </span><span class="l">memcached -m 256</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">restart</span><span class="p">:</span><span class="w"> </span><span class="l">unless-stopped</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">networks</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">glympse_net</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">networks</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">glympse_net</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">external</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-8"> - <button - class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50" - title="Copy code" - > - <div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"></div> - <div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"></div> - </button> -</div> - - -</div> -<p>If you are install Glympse on a second system or a system other than where the raw camera files are stored you can use the following to mount the volumes as smb shares:</p> -<div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"> - - -<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">volumes</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">rushes</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">driver</span><span class="p">:</span><span class="w"> </span><span class="l">local</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">driver_opts</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l">cifs</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">o</span><span class="p">:</span><span class="w"> </span><span class="l">username=&lt;sbm_username&gt;,password=&lt;smb_password&gt;,ro,domain=localhost</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">device</span><span class="p">:</span><span class="w"> </span><span class="l">\\smb\share\path</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"> - <button - class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50" - title="Copy code" - > - <div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"></div> - <div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"></div> - </button> -</div> - - -</div> -<p>Alternatively you can use a nfs share:</p> -<div class="hextra-code-block hx-relative hx-mt-6 first:hx-mt-0 hx-group/code"> - - -<div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">volumes</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">rushes</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">driver_opts</span><span class="p">:</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l">nfs</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">o</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;addr=&lt;nfs-server-ip&gt;,nolock,soft,rw&#34;</span><span class="w"> -</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">device</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;:/full/share/path&#34;</span></span></span></code></pre></div></div><div class="hextra-code-copy-btn-container hx-opacity-0 hx-transition group-hover/code:hx-opacity-100 hx-flex hx-gap-1 hx-absolute hx-m-[11px] hx-right-0 hx-top-0"> - <button - class="hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50" - title="Copy code" - > - <div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"></div> - <div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"></div> - </button> -</div> - - -</div> -<p>You will need to make sure that if you are mounting the raw rushes volume that you mount this as <code>ro</code> or read only so Glympse can not make any changes to the raw rushes.</p> -<p>If you are mounting the glympse mediafiles or logs, you will need to mount this as <code>rw</code> or read write so Glympse can create the files.</p> - - - - - - diff --git a/isableFastRender/docs/installation/install_glympse/index.html b/isableFastRender/docs/installation/install_glympse/index.html deleted file mode 100644 index 1c07ed2..0000000 --- a/isableFastRender/docs/installation/install_glympse/index.html +++ /dev/null @@ -1,665 +0,0 @@ - - - - - - - - - - - - - - Install Glympse – Glympse - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - -
-
- -
- -
Install Glympse
-
- -
-

Install Glympse

-

To install glympse we first need to create a docker compose file and then an env file. These two files will allow you to configure most out of the box settings. Once you’re set these up, you will be able to change more setting from the webui.

-

Services default to enabled, to disable a service, change yes to no in the environment section of the compose file. To enable a service, either change the environment variable to yes or delete/comment the line.

-

UWSGI and NGINX are required for the webui service

-

The following compose file will enable all services in a single container. This will work but it is possible that the transcoding and transcribing tasks can slow down the webui if you’re running on a slower machine.

-

If you are going to be running the transcoder or the transcription engine, you will need an Nvidia GPU. To find the device ID run nvidia_smi on the system you will be installing the container. -This will give you an output that looks like this:

-
- - -
+-----------------------------------------------------------------------------------------+
-| NVIDIA-SMI 565.57.02              Driver Version: 566.03         CUDA Version: 12.7     |
-|-----------------------------------------+------------------------+----------------------+
-| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
-| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
-|                                         |                        |               MIG M. |
-|=========================================+========================+======================|
-|   0  NVIDIA GeForce GTX 1080        On  |   00000000:01:00.0  On |                  N/A |
-| 27%   38C    P8              8W /  180W |     893MiB /   8192MiB |      1%      Default |
-|                                         |                        |                  N/A |
-+-----------------------------------------+------------------------+----------------------+
-                                                                                         
-+-----------------------------------------------------------------------------------------+
-| Processes:                                                                              |
-|  GPU   GI   CI        PID   Type   Process name                              GPU Memory |
-|        ID   ID                                                               Usage      |
-|=========================================================================================|
-|    0   N/A  N/A        26      G   /Xwayland                                   N/A      |
-+-----------------------------------------------------------------------------------------+
- -
- - -
-

The device id is in the third row, just above the memory:

-
- - -
+========================+
-|   00000000:01:00.0  On |
-|     893MiB /   8192MiB |
-|                        |
-+------------------------+
- -
- - -
-

In this case the device id is: 00000000:01:00.0

-

Add this to your compose file. A file that runs all services with a gpu looks like:

-
- - -
compose.yml
services:
-  Glympse_net:
-    image: git.themainframe.co.uk/josh/glympse
-    container_name: Glympse
-    restart: unless-stopped
-    ports:
-      - 8080:80
-    environment:
-      TZ: Europe/London
-      ENABLE_UWSGI: yes
-      ENABLE_NGINX: yes
-      ENABLE_CELERY_BEAT: yes
-      ENABLE_PROCESSING: yes
-      ENABLE_MIGRATIONS: yes
-      ENABLE_TRANSCRIBER: yes
-      ENABLE_TRANSCODER: yes
-      DJANGO_SETTINGS_MODULE: Glympse.settings.production
-      SECRET_KEY: "super_secret_key"
-      SECRET_ADMIN_URL: random_string
-      CSRF_TRUSTED_ORIGINS: http://127.0.0.1
-      ALLOWED_HOSTS: 127.0.0.1
-      ADMINS: admin@glympsevideo.com
-      DOMAIN: glympse.glympsevideo.com
-      SQL_ENGINE: django.db.backends.mysql
-      SQL_DATABASE: glympse
-      SQL_USER: glympse
-      SQL_PASSWORD: insecure_password
-      SQL_HOST: mysql
-      SQL_PORT: 3306
-      EMAIL_HOST: mail.themainframe.co.uk
-      EMAIL_PORT: 587
-      EMAIL_USE_TLS: true
-      EMAIL_HOST_USER: noreply@glympsevideo.com
-      EMAIL_HOST_PASSWORD: insecure_password
-      DEFAULT_FROM_EMAIL: Glympse<glympse@glympsevideo.com>
-      ALLOWED_EMAIL_DOMAINS: glympsevideo.com
-      REDIS_HOST: redis://redis:6379
-      RABBITMQ_URL: amqp://glympse:insecure_password@rabbitmq:5672/glympse
-      ADMIN_USERNAME: hub
-      ADMIN_EMAIL: admin@glympsevideo.com
-      ADMIN_PASSWORD: insecure_password
-      LOG_LEVEL: DEBUG
-      TIMEZONE: Europe/London
-      MICROSOFT_AUTH_CLIENT_ID: None
-      MICROSOFT_AUTH_CLIENT_SECRET: None
-      MICROSOFT_AUTH_TENANT_ID: None
-      MEMCACHED: memcached:11211
-      CUDA_DEVICE: cuda:0
-      DEBUG: "True"
-      REMOTE_WORKER: "False"
-      REMOTE_PRODUCTION: None
-    volumes:
-      - /opt/glympse/logs:/Glympse/logs
-      - /media:/media
-      - /rushes:/rushes:ro
-    deploy:
-      resources:
-        reservations:
-          devices:
-            - driver: nvidia
-              device_ids:
-                - 00000000:01:00.0
-              capabilities:
-                - gpu
-    networks:
-      glympse_net: null
-  memcached:
-    image: memcached:latest
-    container_name: memcached
-    entrypoint: memcached -m 256
-    restart: unless-stopped
-    networks:
-      glympse_net: null
-networks:
-  glympse_net:
-    external: true
- -
- - -
-

If you are install Glympse on a second system or a system other than where the raw camera files are stored you can use the following to mount the volumes as smb shares:

-
- - -
volumes:
-  rushes:
-    driver: local
-    driver_opts:
-      type: cifs
-      o: username=<sbm_username>,password=<smb_password>,ro,domain=localhost
-      device: \\smb\share\path
- -
- - -
-

Alternatively you can use a nfs share:

-
- - -
volumes:
-  rushes:
-    driver_opts:
-      type: nfs
-      o: "addr=<nfs-server-ip>,nolock,soft,rw"
-      device: ":/full/share/path"
- -
- - -
-

You will need to make sure that if you are mounting the raw rushes volume that you mount this as ro or read only so Glympse can not make any changes to the raw rushes.

-

If you are mounting the glympse mediafiles or logs, you will need to mount this as rw or read write so Glympse can create the files.

- -
-
- - -
-
-
- - - - - - - - - - - - diff --git a/isableFastRender/docs/installation/services/index.html b/isableFastRender/docs/installation/services/index.html deleted file mode 100644 index 8c0daba..0000000 --- a/isableFastRender/docs/installation/services/index.html +++ /dev/null @@ -1,518 +0,0 @@ - - - - - - - - - - - - - - Glympse Services – Glympse - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - -
-
- -
- -
Glympse Services
-
- -
-

Glympse Services

-

Glympse is split into multiple services so you can split the workload between multiple machines.

-

The available services are as follows:

-
    -
  • -

    Celery Beat
    -You should only have one of these running across all your containers. This is responsible for managing the scheduled tasks. Without this, the scheduled tasks will not run. For ease, I usually run this in the same container as the webui.

    -
  • -
  • -

    WebUI
    -This is the webui front end. The reverse proxy needs to point to the machine that is running this service. It is possible to run more than one frontend for load balancing purposes.

    -
  • -
  • -

    Processing
    -This service is responsible for scanning the rushes drives and inserting the rushes into the Glympse database. It is also responsible for other background tasks such as sending emails etc. This worker will run 16 simultaneous tasks.

    -
  • -
  • -

    Transcoding - Prefers Nvidia GPU
    -This is the transcoding engine. It takes the raw rushes and transcodes them to lower resolution proxy files that can be streamed. The transcoder will try use cuda hardware acceleration but will fall back to software if it is unavailable. This worker will run 4 simultaneous tasks.

    -
  • -
  • -

    Long Transcoding
    -This was set up to create the thumbnail preview for the video player when you hover over the video play bar to allow for scrubbing. This worker will run 16 simultaneous tasks.

    -
  • -
  • -

    Transcribing - Requires Nvidia GPU
    -This is responsible for transcribing clips. A modern Nvidia GPU is required for this to work. It is possible to select a different model that may better suit the available hardware. A GPU with more VRAM can support a larger model. This worker will run a single task at a time.

    -
  • -
-

It is possible to run one or more services in a single docker container. the running services are managed through the environment settings in the compose file.

- -
-
- - -
-
-
- - - - - - - - - - - - diff --git a/isableFastRender/docs/setup/admin_frontend/index.html b/isableFastRender/docs/setup/admin_frontend/index.html deleted file mode 100644 index ff8a5fa..0000000 --- a/isableFastRender/docs/setup/admin_frontend/index.html +++ /dev/null @@ -1,627 +0,0 @@ - - - - - - - - - - - - - - Glympse Admin – Glympse - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - -
-
- -
- -
Glympse Admin
-
- -
-

Glympse Admin

-

You can manage most of the admin settings from the front end. When a user is assigned admin permissions or is joined to the “hub” group they will have access to the admin menu on the webUI.

-

Dashboard -

Access the dashboard page. This give you an overview of the system. It will show some figures like how many clips are waiting to be transcoded or how many clips have been transcribed. It also shows you all running tasks and will also show who is currently online.

-

You can also trigger the periodic tasks from the bottom of this page.

-

Logs -

View the system logs.

-

Add Production -

This brings up the add production modal where you can add a production. This is the same interface as pressing the add production button on the home page.

-

Edit Production -

Here you can edit productions.

-

Production Admin -

This is who is responsible for the production. It’s likely that this should be the edit assistant assigned to the production. You can change this here, this person will receive the emails after the production has been scanned.

-

Cover Image -

Click the image to upload a new thumbnail image for the production. Or reset it.

-

Active -

An active production will be scanned for new rushes. A deactivated production will still be available to users.

-

Archive -

This will remove the production from being able to be viewed. All files will remain, they will just be hidden.

-

Export -

This will export a json file containing the database entries for this production that can be archived to another system along with the media files. The media files will have to be manually backed up from your server. Once you have backed up the json file and the media, you can delete the production.

-

Delete -

This will delete the production and all the clips associated with it.

-

Manage Users -

Edit Users -

Select a user from the dropdown menu and you can assign the user to a group. You can also deactivate the user which will keep the account but not allow the user to log in. Or you can delete the user which will delete their account completely.

-

If the user was created by logging in via SSO, they will still be able to log in once they have been deleted. But they will have no permissions and won’t be assigned to a group so will not have access to any productions.

-

You can enable the ability for users to scan or start a production transcoder. They will only be able to scan or transcode the productions they have access to.

-

Clicking on the number beside their name at the top will enter the impersonation for this user. This is useful if you need to check a user has the correct permissions.

-

You can add a local user by clicking the blue + button at the top.

-

Edit Group Permissions -

When a base production is added, a new group of the same name will be created.

-

From this page you can select a group and assign productions to it. Users assigned to this group will then be able to access these productions.

-

You can add a new group by clicking the blue + button at the top right.

-

From this page you can

-

Settings -

This will open the django admin setting page.

-

Send Email -

Here you can send an email to registered users. -Either select an existing email draft or click new to create a new one.

-

This will take you to the editor page. Set the Subject at the top, then select a date and time to send the email. Not setting this will send immediately.

-

Select the recipients of the email and draft the email below.

-

The editor is a WYSIWYG editor so the email body will appear exactly as it does in this editor. You can add images and graphics to the email body should you wish.

-

Click save and preview. This will show you a copy of what the email will look like when sent. You will be able to either schedule the send or edit the email again after this point.

-

Click Delete to delete the email draft.

-

Clear Cache -

This clears the cache of the system. Useful if there have been large database changes. By default the system caches data for around 10 minutes.

-

Users may have to force refresh their browser to clear their local cache if the changes aren’t appearing for them.

- -
-
- - -
-
-
- - - - - - - - - - - - diff --git a/isableFastRender/docs/setup/admin_settings/index.html b/isableFastRender/docs/setup/admin_settings/index.html deleted file mode 100644 index 385d064..0000000 --- a/isableFastRender/docs/setup/admin_settings/index.html +++ /dev/null @@ -1,746 +0,0 @@ - - - - - - - - - - - - - - Django Admin Settings – Glympse - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - -
-
- -
- -
Django Admin Settings
-
- -
-

Django Admin Settings

-

The admin settings page is where you can change almost everything. If it’s in the database, it’s likely you can make changes here.

-

System Settings -

Whisper Model

See here for more information
-Default: small

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SizeParametersEnglish-only modelMultilingual modelRequired VRAMRelative speed
tiny39 Mtiny.entiny~1 GB~10x
base74 Mbase.enbase~1 GB~7x
small244 Msmall.ensmall~2 GB~4x
medium769 Mmedium.enmedium~5 GB~2x
large1550 MN/Alarge~10 GB1x
turbo809 MN/Aturbo~6 GB~8x
-

Authentication and Authorization -

Here you can manage the advanced settings of the users and Groups. Most of these settings can be changed from the front end without coming into the Django Admin page.

-

Impersonate -

Here you can view the logs for the impersonation.

-

Periodic Tasks. -

These are created when installed. Should you wish to change the time the tasks run, you would do so in the Periodic Tasks section.

-

Clocked -

These run once at a specific date and time.

-

Cron Tabs -

This is where you can set advanced schedules using cron. See here for more information about Cron

-

Intervals -

These will allow you to let a task run at specific intervals, e.g. run once every hour.

-

Periodic Tasks -

This is where you register or change the tasks, To change the schedule, you will need to create the schedule using one of the above options and then select it in this page.

-

You can also enable and disable tasks here as well as override the priority of the task.

-

Review -

Review Files -

This is where you can see all the files that have been uploaded for review. You can retranscode or delete the files from here.

-

Share Links -

Add, edit or delete the share links for files here.

-

Rushes Management -

You can make changes to the metadata of the clips or add or remove the productions here. But most of these tasks can and should be done in the front end.

-

Base Productions -

Add or edit the base productions. You can also change the group that the Base Production is assigned to.

-

Production -

Here you can make changes to the production such as the name, friendly name, filepath etc. You can also trigger some tasks from this page such as the file scan or the transcoder.

-

clips -

Here you can see and edit all the metadata for the clips in the Glympse database.

-

Transcribe -

Clips for Transcription -

Here you can see all of the clips that have been sent to the transcription engine. You can trigger tasks such as re-transcribe or delete the files from here.

- -
-
- - -
-
-
- - - - - - - - - - - - diff --git a/isableFastRender/docs/setup/index.html b/isableFastRender/docs/setup/index.html deleted file mode 100644 index 2725a2a..0000000 --- a/isableFastRender/docs/setup/index.html +++ /dev/null @@ -1,457 +0,0 @@ - - - - - - - - - - - - - - System Setup – Glympse - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - -
-
- -
-
System Setup
-
- -
-

System Setup

-

There are two main ways to change settings for Glympse. The first is the env file, the second is to change some settings from within the application. This can be done whilst the server is up and running from a central point, whereas changes to the env file will need to be replicated on each docker container.

- -
-
- - -
-
-
- - - - - - - - - - - - diff --git a/isableFastRender/docs/setup/index.xml b/isableFastRender/docs/setup/index.xml deleted file mode 100644 index 2724a19..0000000 --- a/isableFastRender/docs/setup/index.xml +++ /dev/null @@ -1,188 +0,0 @@ - - - Glympse – System Setup - http://localhost:1313/docs/setup/ - Recent content in System Setup on Glympse - Hugo -- gohugo.io - en-gb - - - - - - - - - - - Django Admin Settings - http://localhost:1313/docs/setup/admin_settings/ - Mon, 01 Jan 0001 00:00:00 +0000 - - http://localhost:1313/docs/setup/admin_settings/ - - - - <p>The admin settings page is where you can change almost everything. If it&rsquo;s in the database, it&rsquo;s likely you can make changes here.</p> -<h2>System Settings<span class="hx-absolute -hx-mt-20" id="system-settings"></span> - <a href="#system-settings" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><h1>Whisper Model</h1><p><a href="https://github.com/openai/whisper?tab=readme-ov-file#available-models-and-languages" target="_blank" rel="noopener">See here for more information</a><br> -Default: small</p> -<table> - <thead> - <tr> - <th>Size</th> - <th>Parameters</th> - <th>English-only model</th> - <th>Multilingual model</th> - <th>Required VRAM</th> - <th>Relative speed</th> - </tr> - </thead> - <tbody> - <tr> - <td>tiny</td> - <td>39 M</td> - <td>tiny.en</td> - <td>tiny</td> - <td>~1 GB</td> - <td>~10x</td> - </tr> - <tr> - <td>base</td> - <td>74 M</td> - <td>base.en</td> - <td>base</td> - <td>~1 GB</td> - <td>~7x</td> - </tr> - <tr> - <td>small</td> - <td>244 M</td> - <td>small.en</td> - <td>small</td> - <td>~2 GB</td> - <td>~4x</td> - </tr> - <tr> - <td>medium</td> - <td>769 M</td> - <td>medium.en</td> - <td>medium</td> - <td>~5 GB</td> - <td>~2x</td> - </tr> - <tr> - <td>large</td> - <td>1550 M</td> - <td>N/A</td> - <td>large</td> - <td>~10 GB</td> - <td>1x</td> - </tr> - <tr> - <td>turbo</td> - <td>809 M</td> - <td>N/A</td> - <td>turbo</td> - <td>~6 GB</td> - <td>~8x</td> - </tr> - </tbody> -</table> -<h2>Authentication and Authorization<span class="hx-absolute -hx-mt-20" id="authentication-and-authorization"></span> - <a href="#authentication-and-authorization" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Here you can manage the advanced settings of the users and Groups. Most of these settings can be changed from the front end without coming into the Django Admin page.</p> -<h2>Impersonate<span class="hx-absolute -hx-mt-20" id="impersonate"></span> - <a href="#impersonate" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Here you can view the logs for the impersonation.</p> -<h2>Periodic Tasks.<span class="hx-absolute -hx-mt-20" id="periodic-tasks"></span> - <a href="#periodic-tasks" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>These are created when installed. Should you wish to change the time the tasks run, you would do so in the Periodic Tasks section.</p> -<h3>Clocked<span class="hx-absolute -hx-mt-20" id="clocked"></span> - <a href="#clocked" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>These run once at a specific date and time.</p> -<h3>Cron Tabs<span class="hx-absolute -hx-mt-20" id="cron-tabs"></span> - <a href="#cron-tabs" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>This is where you can set advanced schedules using cron. <a href="https://crontab.guru/" target="_blank" rel="noopener">See here for more information about Cron</a></p> -<h3>Intervals<span class="hx-absolute -hx-mt-20" id="intervals"></span> - <a href="#intervals" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>These will allow you to let a task run at specific intervals, e.g. run once every hour.</p> -<h3>Periodic Tasks<span class="hx-absolute -hx-mt-20" id="periodic-tasks-1"></span> - <a href="#periodic-tasks-1" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>This is where you register or change the tasks, To change the schedule, you will need to create the schedule using one of the above options and then select it in this page.</p> -<p>You can also enable and disable tasks here as well as override the priority of the task.</p> -<h2>Review<span class="hx-absolute -hx-mt-20" id="review"></span> - <a href="#review" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><h3>Review Files<span class="hx-absolute -hx-mt-20" id="review-files"></span> - <a href="#review-files" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>This is where you can see all the files that have been uploaded for review. You can retranscode or delete the files from here.</p> -<h3>Share Links<span class="hx-absolute -hx-mt-20" id="share-links"></span> - <a href="#share-links" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Add, edit or delete the share links for files here.</p> -<h2>Rushes Management<span class="hx-absolute -hx-mt-20" id="rushes-management"></span> - <a href="#rushes-management" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>You can make changes to the metadata of the clips or add or remove the productions here. But most of these tasks can and should be done in the front end.</p> -<h3>Base Productions<span class="hx-absolute -hx-mt-20" id="base-productions"></span> - <a href="#base-productions" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Add or edit the base productions. You can also change the group that the Base Production is assigned to.</p> -<h3>Production<span class="hx-absolute -hx-mt-20" id="production"></span> - <a href="#production" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Here you can make changes to the production such as the name, friendly name, filepath etc. You can also trigger some tasks from this page such as the file scan or the transcoder.</p> -<h3>clips<span class="hx-absolute -hx-mt-20" id="clips"></span> - <a href="#clips" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Here you can see and edit all the metadata for the clips in the Glympse database.</p> -<h2>Transcribe<span class="hx-absolute -hx-mt-20" id="transcribe"></span> - <a href="#transcribe" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><h3>Clips for Transcription<span class="hx-absolute -hx-mt-20" id="clips-for-transcription"></span> - <a href="#clips-for-transcription" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Here you can see all of the clips that have been sent to the transcription engine. You can trigger tasks such as re-transcribe or delete the files from here.</p> - - - - - - Glympse Admin - http://localhost:1313/docs/setup/admin_frontend/ - Mon, 01 Jan 0001 00:00:00 +0000 - - http://localhost:1313/docs/setup/admin_frontend/ - - - - <p>You can manage most of the admin settings from the front end. When a user is assigned admin permissions or is joined to the &ldquo;hub&rdquo; group they will have access to the admin menu on the webUI.</p> -<h2>Dashboard<span class="hx-absolute -hx-mt-20" id="dashboard"></span> - <a href="#dashboard" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Access the dashboard page. This give you an overview of the system. It will show some figures like how many clips are waiting to be transcoded or how many clips have been transcribed. It also shows you all running tasks and will also show who is currently online.</p> -<p>You can also trigger the periodic tasks from the bottom of this page.</p> -<h2>Logs<span class="hx-absolute -hx-mt-20" id="logs"></span> - <a href="#logs" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>View the system logs.</p> -<h2>Add Production<span class="hx-absolute -hx-mt-20" id="add-production"></span> - <a href="#add-production" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>This brings up the add production modal where you can add a production. This is the same interface as pressing the add production button on the home page.</p> -<h2>Edit Production<span class="hx-absolute -hx-mt-20" id="edit-production"></span> - <a href="#edit-production" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Here you can edit productions.</p> -<h4>Production Admin<span class="hx-absolute -hx-mt-20" id="production-admin"></span> - <a href="#production-admin" class="subheading-anchor" aria-label="Permalink for this section"></a></h4><p>This is who is responsible for the production. It&rsquo;s likely that this should be the edit assistant assigned to the production. You can change this here, this person will receive the emails after the production has been scanned.</p> -<h4>Cover Image<span class="hx-absolute -hx-mt-20" id="cover-image"></span> - <a href="#cover-image" class="subheading-anchor" aria-label="Permalink for this section"></a></h4><p>Click the image to upload a new thumbnail image for the production. Or reset it.</p> -<h4>Active<span class="hx-absolute -hx-mt-20" id="active"></span> - <a href="#active" class="subheading-anchor" aria-label="Permalink for this section"></a></h4><p>An active production will be scanned for new rushes. A deactivated production will still be available to users.</p> -<h4>Archive<span class="hx-absolute -hx-mt-20" id="archive"></span> - <a href="#archive" class="subheading-anchor" aria-label="Permalink for this section"></a></h4><p>This will remove the production from being able to be viewed. All files will remain, they will just be hidden.</p> -<h4>Export<span class="hx-absolute -hx-mt-20" id="export"></span> - <a href="#export" class="subheading-anchor" aria-label="Permalink for this section"></a></h4><p>This will export a json file containing the database entries for this production that can be archived to another system along with the media files. The media files will have to be manually backed up from your server. Once you have backed up the json file and the media, you can delete the production.</p> -<h4>Delete<span class="hx-absolute -hx-mt-20" id="delete"></span> - <a href="#delete" class="subheading-anchor" aria-label="Permalink for this section"></a></h4><p>This will delete the production and all the clips associated with it.</p> -<h2>Manage Users<span class="hx-absolute -hx-mt-20" id="manage-users"></span> - <a href="#manage-users" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><h3>Edit Users<span class="hx-absolute -hx-mt-20" id="edit-users"></span> - <a href="#edit-users" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>Select a user from the dropdown menu and you can assign the user to a group. You can also deactivate the user which will keep the account but not allow the user to log in. Or you can delete the user which will delete their account completely.</p> -<p>If the user was created by logging in via SSO, they will still be able to log in once they have been deleted. But they will have no permissions and won&rsquo;t be assigned to a group so will not have access to any productions.</p> -<p>You can enable the ability for users to scan or start a production transcoder. They will only be able to scan or transcode the productions they have access to.</p> -<p>Clicking on the number beside their name at the top will enter the impersonation for this user. This is useful if you need to check a user has the correct permissions.</p> -<p>You can add a local user by clicking the blue + button at the top.</p> -<h3>Edit Group Permissions<span class="hx-absolute -hx-mt-20" id="edit-group-permissions"></span> - <a href="#edit-group-permissions" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>When a base production is added, a new group of the same name will be created.</p> -<p>From this page you can select a group and assign productions to it. Users assigned to this group will then be able to access these productions.</p> -<p>You can add a new group by clicking the blue + button at the top right.</p> -<p>From this page you can</p> -<h2>Settings<span class="hx-absolute -hx-mt-20" id="settings"></span> - <a href="#settings" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>This will open the django admin setting page.</p> -<h2>Send Email<span class="hx-absolute -hx-mt-20" id="send-email"></span> - <a href="#send-email" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Here you can send an email to registered users. -Either select an existing email draft or click new to create a new one.</p> -<p>This will take you to the editor page. Set the Subject at the top, then select a date and time to send the email. Not setting this will send immediately.</p> -<p>Select the recipients of the email and draft the email below.</p> -<p>The editor is a WYSIWYG editor so the email body will appear exactly as it does in this editor. You can add images and graphics to the email body should you wish.</p> -<p>Click save and preview. This will show you a copy of what the email will look like when sent. You will be able to either schedule the send or edit the email again after this point.</p> -<p>Click Delete to delete the email draft.</p> -<h2>Clear Cache<span class="hx-absolute -hx-mt-20" id="clear-cache"></span> - <a href="#clear-cache" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>This clears the cache of the system. Useful if there have been large database changes. By default the system caches data for around 10 minutes.</p> -<p>Users may have to force refresh their browser to clear their local cache if the changes aren&rsquo;t appearing for them.</p> - - - - - - diff --git a/isableFastRender/en.search-data.json b/isableFastRender/en.search-data.json deleted file mode 100644 index f433955..0000000 --- a/isableFastRender/en.search-data.json +++ /dev/null @@ -1 +0,0 @@ -{"/about/":{"data":{"":"This is the about page."},"title":"About"},"/docs/":{"data":{"":"","#":"This is the documentation for the admin of a Glympse server.\nGlympse is supplied as a docker container exclusively.\nPrerequisites: docker docker compose Nvidia GPU for transcribing (preferred for transcoding tasks) "},"title":"Server Admin"},"/docs/installation/":{"data":{"":"To install Glympse, you will need a database, a redis cache and a rabbitmq queue all of which must be accessible by all of the Glympse containers you deploy. For that reason it is recommended to keep this as a separate compose file.\nDatabase Install Services Glympse Install "},"title":"Installation"},"/docs/installation/database/":{"data":{"":"To install you will first need the database and queue manager running. Every instance of Glympse you run will need to connect to these containers.\nFirst create your docker network. docker network create glympse_net\nThen create a a directory and compose file:\nmkdir /opt/glympse_database cd /opt/glympse_database nano /opt/glympse_database/compose.yml Paste the following, be sure to change the passwords and any other personal details before saving.\ncompose.ymlservices: redis: image: redis:alpine container_name: redis restart: always ports: - 6379:6379 volumes: - /opt/glympse_database/redis_data:/data healthcheck: test: - CMD - redis-cli - ping interval: 30s timeout: 10s retries: 3 networks: glympse_net: null rabbitmq: image: rabbitmq:3.13.4-management container_name: rabbitmq volumes: - type: bind source: /opt/glympse_database/rabbitmq.conf target: /etc/rabbitmq/conf.d/10-defaults.conf ports: - 15672:15672 - 5672:5672 networks: glympse_net: null mysql: image: mysql:8.0 container_name: mysql environment: MYSQL_ROOT_PASSWORD: \u003croot password\u003e MYSQL_DATABASE: glympse MYSQL_USER: glympse MYSQL_PASSWORD: \u003cglympse password\u003e volumes: - /opt/glympse/mysql:/var/lib/mysql - type: bind source: /opt/glympse_database/my.cnf target: /etc/my.cnf ports: - 6033:6033 - 3306:3306 networks: glympse_net: null networks: glympse_net: external: true There are two more files that you need to create and save before running the compose file.\nFirst is the mysql config file.\nCreate a file called my.cnf in the glympse_database directory: nano my.cnf and paste the following:\nmy.cnf# For advice on how to change settings please see # http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html [mysqld] # # Remove leading # and set to the amount of RAM for the most important data # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. # innodb_buffer_pool_size = 128M # # Remove leading # to turn on a very important data integrity option: logging # changes to the binary log between backups. # log_bin # # Remove leading # to set options mainly useful for reporting servers. # The server defaults are faster for transactions and fast SELECTs. # Adjust sizes as needed, experiment to find the optimal values. # join_buffer_size = 128M # sort_buffer_size = 2M # read_rnd_buffer_size = 2M # Remove leading # to revert to previous value for default_authentication_plugin, # this will increase compatibility with older clients. For background, see: # https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin # default-authentication-plugin=mysql_native_password skip-host-cache skip-name-resolve datadir=/var/lib/mysql socket=/var/run/mysqld/mysqld.sock secure-file-priv=/var/lib/mysql-files user=mysql connect_timeout = 600 net_read_timeout = 30 wait_timeout = 28800 interactive_timeout = 28800 pid-file=/var/run/mysqld/mysqld.pid [client] socket=/var/run/mysqld/mysqld.sock !includedir /etc/mysql/conf.d/ Finally create a config file for rabbitmq: nano rabbitmq.conf and paste the following:\nbe sure to change the password for something secure and keep note of it as you will need it for your compose env files.\nrabbitmq.confdefault_vhost = glympse default_user = glympse default_pass = \u003center password\u003e default_permissions.configure = .* default_permissions.read = .* default_permissions.write = .* default_user_tags.administrator = true default_user_tags.management = true default_user_tags.glympse = true consumer_timeout = 31622400000 "},"title":"Database Installation"},"/docs/installation/install_glympse/":{"data":{"":"To install glympse we first need to create a docker compose file and then an env file. These two files will allow you to configure most out of the box settings. Once you’re set these up, you will be able to change more setting from the webui.\nServices default to enabled, to disable a service, change yes to no in the environment section of the compose file. To enable a service, either change the environment variable to yes or delete/comment the line.\nUWSGI and NGINX are required for the webui service\nThe following compose file will enable all services in a single container. This will work but it is possible that the transcoding and transcribing tasks can slow down the webui if you’re running on a slower machine.\nIf you are going to be running the transcoder or the transcription engine, you will need an Nvidia GPU. To find the device ID run nvidia_smi on the system you will be installing the container. This will give you an output that looks like this:\n+-----------------------------------------------------------------------------------------+ | NVIDIA-SMI 565.57.02 Driver Version: 566.03 CUDA Version: 12.7 | |-----------------------------------------+------------------------+----------------------+ | GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |=========================================+========================+======================| | 0 NVIDIA GeForce GTX 1080 On | 00000000:01:00.0 On | N/A | | 27% 38C P8 8W / 180W | 893MiB / 8192MiB | 1% Default | | | | N/A | +-----------------------------------------+------------------------+----------------------+ +-----------------------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=========================================================================================| | 0 N/A N/A 26 G /Xwayland N/A | +-----------------------------------------------------------------------------------------+ The device id is in the third row, just above the memory:\n+========================+ | 00000000:01:00.0 On | | 893MiB / 8192MiB | | | +------------------------+ In this case the device id is: 00000000:01:00.0\nAdd this to your compose file. A file that runs all services with a gpu looks like:\ncompose.ymlservices: Glympse_net: image: git.themainframe.co.uk/josh/glympse container_name: Glympse restart: unless-stopped ports: - 8080:80 environment: TZ: Europe/London ENABLE_UWSGI: yes ENABLE_NGINX: yes ENABLE_CELERY_BEAT: yes ENABLE_PROCESSING: yes ENABLE_MIGRATIONS: yes ENABLE_TRANSCRIBER: yes ENABLE_TRANSCODER: yes DJANGO_SETTINGS_MODULE: Glympse.settings.production SECRET_KEY: \"super_secret_key\" SECRET_ADMIN_URL: random_string CSRF_TRUSTED_ORIGINS: http://127.0.0.1 ALLOWED_HOSTS: 127.0.0.1 ADMINS: admin@glympsevideo.com DOMAIN: glympse.glympsevideo.com SQL_ENGINE: django.db.backends.mysql SQL_DATABASE: glympse SQL_USER: glympse SQL_PASSWORD: insecure_password SQL_HOST: mysql SQL_PORT: 3306 EMAIL_HOST: mail.themainframe.co.uk EMAIL_PORT: 587 EMAIL_USE_TLS: true EMAIL_HOST_USER: noreply@glympsevideo.com EMAIL_HOST_PASSWORD: insecure_password DEFAULT_FROM_EMAIL: Glympse\u003cglympse@glympsevideo.com\u003e ALLOWED_EMAIL_DOMAINS: glympsevideo.com REDIS_HOST: redis://redis:6379 RABBITMQ_URL: amqp://glympse:insecure_password@rabbitmq:5672/glympse ADMIN_USERNAME: hub ADMIN_EMAIL: admin@glympsevideo.com ADMIN_PASSWORD: insecure_password LOG_LEVEL: DEBUG TIMEZONE: Europe/London MICROSOFT_AUTH_CLIENT_ID: None MICROSOFT_AUTH_CLIENT_SECRET: None MICROSOFT_AUTH_TENANT_ID: None MEMCACHED: memcached:11211 CUDA_DEVICE: cuda:0 DEBUG: \"True\" REMOTE_WORKER: \"False\" REMOTE_PRODUCTION: None volumes: - /opt/glympse/logs:/Glympse/logs - /media:/media - /rushes:/rushes:ro deploy: resources: reservations: devices: - driver: nvidia device_ids: - 00000000:01:00.0 capabilities: - gpu networks: glympse_net: null memcached: image: memcached:latest container_name: memcached entrypoint: memcached -m 256 restart: unless-stopped networks: glympse_net: null networks: glympse_net: external: true If you are install Glympse on a second system or a system other than where the raw camera files are stored you can use the following to mount the volumes as smb shares:\nvolumes: rushes: driver: local driver_opts: type: cifs o: username=\u003csbm_username\u003e,password=\u003csmb_password\u003e,ro,domain=localhost device: \\\\smb\\share\\path Alternatively you can use a nfs share:\nvolumes: rushes: driver_opts: type: nfs o: \"addr=\u003cnfs-server-ip\u003e,nolock,soft,rw\" device: \":/full/share/path\" You will need to make sure that if you are mounting the raw rushes volume that you mount this as ro or read only so Glympse can not make any changes to the raw rushes.\nIf you are mounting the glympse mediafiles or logs, you will need to mount this as rw or read write so Glympse can create the files."},"title":"Install Glympse"},"/docs/installation/services/":{"data":{"":"Glympse is split into multiple services so you can split the workload between multiple machines.\nThe available services are as follows:\nCelery Beat\nYou should only have one of these running across all your containers. This is responsible for managing the scheduled tasks. Without this, the scheduled tasks will not run. For ease, I usually run this in the same container as the webui.\nWebUI\nThis is the webui front end. The reverse proxy needs to point to the machine that is running this service. It is possible to run more than one frontend for load balancing purposes.\nProcessing\nThis service is responsible for scanning the rushes drives and inserting the rushes into the Glympse database. It is also responsible for other background tasks such as sending emails etc. This worker will run 16 simultaneous tasks.\nTranscoding - Prefers Nvidia GPU\nThis is the transcoding engine. It takes the raw rushes and transcodes them to lower resolution proxy files that can be streamed. The transcoder will try use cuda hardware acceleration but will fall back to software if it is unavailable. This worker will run 4 simultaneous tasks.\nLong Transcoding\nThis was set up to create the thumbnail preview for the video player when you hover over the video play bar to allow for scrubbing. This worker will run 16 simultaneous tasks.\nTranscribing - Requires Nvidia GPU\nThis is responsible for transcribing clips. A modern Nvidia GPU is required for this to work. It is possible to select a different model that may better suit the available hardware. A GPU with more VRAM can support a larger model. This worker will run a single task at a time.\nIt is possible to run one or more services in a single docker container. the running services are managed through the environment settings in the compose file."},"title":"Glympse Services"},"/docs/setup/":{"data":{"":"There are two main ways to change settings for Glympse. The first is the env file, the second is to change some settings from within the application. This can be done whilst the server is up and running from a central point, whereas changes to the env file will need to be replicated on each docker container."},"title":"System Setup"},"/docs/setup/admin_frontend/":{"data":{"":"You can manage most of the admin settings from the front end. When a user is assigned admin permissions or is joined to the “hub” group they will have access to the admin menu on the webUI.","add-production#Add Production":"This brings up the add production modal where you can add a production. This is the same interface as pressing the add production button on the home page.","clear-cache#Clear Cache":"This clears the cache of the system. Useful if there have been large database changes. By default the system caches data for around 10 minutes.\nUsers may have to force refresh their browser to clear their local cache if the changes aren’t appearing for them.","dashboard#Dashboard":"Access the dashboard page. This give you an overview of the system. It will show some figures like how many clips are waiting to be transcoded or how many clips have been transcribed. It also shows you all running tasks and will also show who is currently online.\nYou can also trigger the periodic tasks from the bottom of this page.","edit-production#Edit Production":"Here you can edit productions.\nProduction Admin This is who is responsible for the production. It’s likely that this should be the edit assistant assigned to the production. You can change this here, this person will receive the emails after the production has been scanned.\nCover Image Click the image to upload a new thumbnail image for the production. Or reset it.\nActive An active production will be scanned for new rushes. A deactivated production will still be available to users.\nArchive This will remove the production from being able to be viewed. All files will remain, they will just be hidden.\nExport This will export a json file containing the database entries for this production that can be archived to another system along with the media files. The media files will have to be manually backed up from your server. Once you have backed up the json file and the media, you can delete the production.\nDelete This will delete the production and all the clips associated with it.","logs#Logs":"View the system logs.","manage-users#Manage Users":"Edit Users Select a user from the dropdown menu and you can assign the user to a group. You can also deactivate the user which will keep the account but not allow the user to log in. Or you can delete the user which will delete their account completely.\nIf the user was created by logging in via SSO, they will still be able to log in once they have been deleted. But they will have no permissions and won’t be assigned to a group so will not have access to any productions.\nYou can enable the ability for users to scan or start a production transcoder. They will only be able to scan or transcode the productions they have access to.\nClicking on the number beside their name at the top will enter the impersonation for this user. This is useful if you need to check a user has the correct permissions.\nYou can add a local user by clicking the blue + button at the top.\nEdit Group Permissions When a base production is added, a new group of the same name will be created.\nFrom this page you can select a group and assign productions to it. Users assigned to this group will then be able to access these productions.\nYou can add a new group by clicking the blue + button at the top right.\nFrom this page you can","send-email#Send Email":"Here you can send an email to registered users. Either select an existing email draft or click new to create a new one.\nThis will take you to the editor page. Set the Subject at the top, then select a date and time to send the email. Not setting this will send immediately.\nSelect the recipients of the email and draft the email below.\nThe editor is a WYSIWYG editor so the email body will appear exactly as it does in this editor. You can add images and graphics to the email body should you wish.\nClick save and preview. This will show you a copy of what the email will look like when sent. You will be able to either schedule the send or edit the email again after this point.\nClick Delete to delete the email draft.","settings#Settings":"This will open the django admin setting page."},"title":"Glympse Admin"},"/docs/setup/admin_settings/":{"data":{"":"","authentication-and-authorization#Authentication and Authorization":"","impersonate#Impersonate":"","periodic-tasks#Periodic Tasks.":"The admin settings page is where you can change almost everything. If it’s in the database, it’s likely you can make changes here.\nSystem Settings Whisper ModelSee here for more information\nDefault: small\nSize Parameters English-only model Multilingual model Required VRAM Relative speed tiny 39 M tiny.en tiny ~1 GB ~10x base 74 M base.en base ~1 GB ~7x small 244 M small.en small ~2 GB ~4x medium 769 M medium.en medium ~5 GB ~2x large 1550 M N/A large ~10 GB 1x turbo 809 M N/A turbo ~6 GB ~8x Authentication and Authorization Here you can manage the advanced settings of the users and Groups. Most of these settings can be changed from the front end without coming into the Django Admin page.\nImpersonate Here you can view the logs for the impersonation.\nPeriodic Tasks. These are created when installed. Should you wish to change the time the tasks run, you would do so in the Periodic Tasks section.\nClocked These run once at a specific date and time.\nCron Tabs This is where you can set advanced schedules using cron. See here for more information about Cron\nIntervals These will allow you to let a task run at specific intervals, e.g. run once every hour.\nPeriodic Tasks This is where you register or change the tasks, To change the schedule, you will need to create the schedule using one of the above options and then select it in this page.\nYou can also enable and disable tasks here as well as override the priority of the task.","review#Review":"Review Files This is where you can see all the files that have been uploaded for review. You can retranscode or delete the files from here.\nShare Links Add, edit or delete the share links for files here.","rushes-management#Rushes Management":"You can make changes to the metadata of the clips or add or remove the productions here. But most of these tasks can and should be done in the front end.\nBase Productions Add or edit the base productions. You can also change the group that the Base Production is assigned to.\nProduction Here you can make changes to the production such as the name, friendly name, filepath etc. You can also trigger some tasks from this page such as the file scan or the transcoder.\nclips Here you can see and edit all the metadata for the clips in the Glympse database.","system-settings#System Settings":"","transcribe#Transcribe":"Clips for Transcription Here you can see all of the clips that have been sent to the transcription engine. You can trigger tasks such as re-transcribe or delete the files from here.","whisper-model#Whisper Model":""},"title":"Django Admin Settings"},"/user_docs/":{"data":{"":"Welcome to the user documentation of Glympse.\nGlympse is designed to be as intuitive as possible, so hopefully you won’t need to read this but its here if you need."},"title":"User Documentation"},"/user_docs/edit_metadata/":{"data":{"":"It is possible to edit some of the metadata for the clips within Glympse.\nAny metadata changes apply only to the Glympse database and are not carried over to the clips themselves.\nTo edit the metadata of the clips, click “Edit Clips” in the top right. This will look like the home page where you can select your production. Click the Edit button to edit the clip metadata."},"title":"Metadata"},"/user_docs/edit_metadata/editing_metadata/":{"data":{"":"When you click Edit on the metadata page you will be taken to the edit page. This shows a table with all the clips for that production. You can see whether a clip has been transcoded, is marked as hidden or edit the metadata of the clip(s)\nThere are limited options for editing the metadata. You can edit only the roll, the date and the shooter aswell as hide or unhide a clip.\nTo edit a clip select it by checking the checkbox of the clip row. At the bottom of the table you can enter a new roll/date/shooter then click save to save the edits.\nWhatever you entered in all three boxes will be applied to the selected clips. Leave the box empty to leave the current details unchanged.\nYou can also hide/unhide clips by checking the hide checkbox. As soon as you click the checkbox it will be immediately hidden. It is possible that the clips may still appear until the cache has ben flushed. This process can take 10-15 minutes.\nFrom this page you can also send multiple clips to the transcription engine.\nSelect the clips by checking the checkbox and click transcribe. This w3ill send the selected clips to be transcribed.\nYou can also delete clips from the Glympse database.\nGlympse has read only access to the raw camera files, by deleting clips from Glympse, the original camera files will be unaffected."},"title":"Editing Metadata"},"/user_docs/review/":{"data":{"":"Glympse has the ability to upload files for review and approval. Once you upload a file to Glympse, you can add markers and send the file to people within your team using and internal link or to anyone using the create link function."},"title":"Review"},"/user_docs/review/upload_and_manage_files/":{"data":{"":"","upload#Upload":"Upload To upload a file, navigate to the review section of Glympse and click upload in the top right. "},"title":"Upload and Manage Files"},"/user_docs/watching-clips/":{"data":{"":" Once You have been added to a production(s). You will see all your available productions on your home page. Under the thumbnail for each production you will see a list of buttons. The fist will let you view all the rushes from every shooter.\nUnder that you will see a list of the shooters from that project. Clicking on these will allow you to filter the production by that shooter.\nIf we were to click on John Snow from either the home page or at the top of the rushes page. We will filter the rushes to show only those shot by John Snow.\nAt the top of the page, you can also click on the name of the shooter to filter the clips. Clicking on the shooter will only return results shot by the selected shooter. Clicking All or Reset will show all the rushes again.\nIn the search bar, you can search for a card or date. The results will be filtered live as you type.\nOnce you select a card, you’ll be taken to the video player screen."},"title":"Watching Clips"},"/user_docs/watching-clips/add_production/":{"data":{"":"To add a production click the “Add Production” button in the top right of the home page.\nThis will bring up the dialogue to add a new production. A production consists of two parts. The Base Production and the Production.\nFor example your Base Production may be “Game of Thrones” then the Production could be “Game of Thrones Series 1”","base-production#Base Production":"Select the Base Production, if it doesn’t exist create it by clicking the button next to the select dropdown. Enter the new name of your production and click submit. The name you entered will be automatically selected.","friendly-name#Friendly Name":"Enter a short friendly name for the series. This is what will appear on the default thumbnail. In this example we will enter GOTS1","priority#Priority":"Most productions can be left as the default of 20. But if you have a smaller production or one where the transcodes need to be run before others you can change the priority here. 0 = lowest priority 100 = highest priority.","production-owner#Production Owner":"This is who will be responsible for the production. They will get the emails to say that the production has been scanned etc. This will usually be the edit assistant assigned to the project. The user must exist in the Glympse system.\nIf left empty, this will default to the admin user.\nClick submit and the production will be added to Glympse and the Processing engine will start scanning for new clips. ","production-series#Production Series":"Enter the series of the production you are adding. This must be an integer.","select-the-location-of-the-camera-rushes#Select the location of the camera rushes.":"Click on a directory to open it and select it by clicking the radio check mark on the left. "},"title":"Adding A Production"},"/user_docs/watching-clips/user_settings/":{"data":{"":"From the User Settings menu you can change some personal settings. ","auto-addremove-tags#Auto Add/Remove Tags":"When checked, this will automatically add or remove tags on any related clips. When unchecked this, any tags you add or remove, will only be apply to the clips you have selected.","auto-expand-related-clips#Auto Expand related clips":"This will automatically expand the related clips accordion oin the right next to the player. If it is enabled, the related clips will be shown automatically. If disabled you would need to manually open the accordion to display them.","marker-colour#Marker Colour":"Change the colour of your markers, this only really applies to the Review section.","receive-admin-emails#Receive Admin Emails":"If you are set as a production owner, this enables/disables the email updates.","reset-timecode-position#Reset Timecode Position":"It is possible that the timecode box may disappear off the ege of the video player. Especially if you use multiple devices with different resolution screens. If that happens, you can reset it to the top left corner here.","show-timecode-heading#Show Timecode Heading":"This enables/disables the timecode box in the video player. Is is enabled by default, should you wish to disable it, you would do so here.","timecode-size#Timecode Size":"Default: 16\nYou can change the font size for the timecode box here. Increase to make the timecode larger, decrease to make it smaller."},"title":"User Settings"},"/user_docs/watching-clips/watch/":{"data":{"":"","#":" This is where you will watch through the clips in Glympse.\nWhen the page loads, it will automatically load the first clip into the player. To start playing you can press the big play button in the centre.\nThe video Player Timecode Glympse uses the timecode from the media files. This is so that it matches the timecode that your editor sees within Avid or their NLE of choice.\nIt is possible that the timecode in Glympse may be a frame off, this is because the timecodes must be calculated rather than read from the file. It will never be more that one frame off the timecode in the NLE.\nThe timecode of the clip is displayed in two places. The seek bar: And there is a timecode box in the top left: This timecode box can be moved anywhere in the player window by dragging it to where you’d like it to be. You can reset the position of the timecode or disable the timecode box using the user settings menu.\nAudio Selection For clips that have more than one track of audio, you can select the track to play back by clicking on the headphone icon on the playbar and selecting the audio track. Glympse by default creates a full mix of all the audio channels and plays this by default. Theatre Mode Clicking the theatre mode button will expand the player to take 100% the width of the browser window. Clicking the theatre mode button again will return the player back to its normal size.\nFull Screen Click this button for full screen playback Rotate Some clips like GoPro files can be the wrong orientation. Click the rotate button to rotate the clip by 180° Click the restore rotate to return the clip to its original orientation. Keyboard shortcuts When on this page there are a number of keyboard shortcuts you can use. J, K, L are shuttle controls to speed up or change the direction of play. You may have to click in the player window to enable these controls. Holding the Shift Key will also increase the amount the play is sped up or slowed down.\nM will add a marker at the current time of the clip. Markers will appear for everyone who has access to the production.\nSelecting Clips You can select the clip you’d like to view from the table at the bottom of the screen. Click the title of the clip to load it into the player.\nYou can also navigate through the clips by pressing the Next/Prev buttons at the bottom of the player. This will load the next or previous clip.\nThe title of the currently playing clip is shown at the bottom of the player and the middle of the menu bar at the top.\nRelated Clips When clips are loaded into Glympse, the system will scan for the start timecode and the end timecode of a clip. This allows it to show all the related clips of the clip you are playing. The related clips box onthe right of the player will update whenever the source of the video player changes. You can automatically hide or show the related clips dropdown using the user settings menu.\nIn this example the clip being played belongs to the Main camera and there are two GoPro cameras that have clips with overlapping timecodes.\nClicking on the title of these related clips will play it in the current page, allowing you to quickly view clips from the other cameras. When you’re viewing a related clip, the title in the menu bar and below the player will change showing you that it’s playing a related clip then it will list the card followed by the clip title. As well as this, the prev/next buttons will disappear from below the player. You can select the next related clip by clicking on the clip title or you can return to the original clip by selecting it in the table at the bottom again. This will re-enable the next prev buttons and you can resume watching the camera clips as normal.\nYou can also navigate to any related cards from the related menu in the manu bar. This will show you camera cards from the same camera operator shot on the same day.\nMarkers and Tags You can add markers or tags to any clip within Glympse.\nMarkers Markers allow you to mark a specific place in a clip. They will be displayed in the marker window next to the player and clicking on them will take you to the correct position in the clip.\nMarkers are shown to everyone who has access to the clip.\nTags Tags are to tag an entire clip. You can tag more than one clip at a time. There is also a setting in the user settings menu that will automatically add the tags to any related clips.\nTags are available to everyone who has access to the clips.","menu-bar#Menu Bar":" The menu bar may show different options depending on what permissions you have. For example, the Download button will only appear if you have been give download permission for your production.\nFile From the file menu you can send a clip to be transcribed, edit the metadata of the card, submit the card for re-transcode or report issues with the card.\nTranscribe Select the clip or clips you would like to transcribe by checking the box in the table and click file then transcribe. This will send the selected clip(s) to the transcription engine. You can learn more about how this works here.\nEdit metadata From this menu you can change some of the metadata for the card. Anything you change here will be applied to every clip in the card.\nYou can change the date, the card name, or the shooter. You can also hide the card which will stop it from showing on the rushes page. Anyone with a link to the card would still be able to access the clips. This will only stop the card from appearing in the rushes page. Users with access to the production can also unhide any card from the metadata edit pages.\nRequest Retranscode This will send the entire card back through the transcode engine. It allows you to report any issues with the card and manually submit the clips to the transcoder. The transcode will only work if the original clips are still available.\nReport Issues This allows you to report issues with the current card. But this option will not automatically retranscode the clips. They would need to be manually transcoded by the admin team.\nRelated This will show any cards that were shot by the same camera operator on the same day as the current card. Clicking one of these will take you load that current card.\nDownload If you have been given the download permissions for your production, you can download the original clip by selecting the clips from the table with the checkbox and clicking download. These files can be very large and may take a long time to download.\nHelp This will open these help pages.\nSettings This will open the user settings menu. Click here to learn more.\nIn the centre of the menu bar, the title of the currently loaded clip will be displayed."},"title":"Watching clips"}} \ No newline at end of file diff --git a/isableFastRender/en.search.js b/isableFastRender/en.search.js deleted file mode 100644 index c2d0d67..0000000 --- a/isableFastRender/en.search.js +++ /dev/null @@ -1,425 +0,0 @@ -// Search functionality using FlexSearch. - -// Change shortcut key to cmd+k on Mac, iPad or iPhone. -document.addEventListener("DOMContentLoaded", function () { - if (/iPad|iPhone|Macintosh/.test(navigator.userAgent)) { - // select the kbd element under the .search-wrapper class - const keys = document.querySelectorAll(".search-wrapper kbd"); - keys.forEach(key => { - key.innerHTML = 'K'; - }); - } -}); - -// Render the search data as JSON. -// -// -// -// - -(function () { - const searchDataURL = '/en.search-data.json'; - - const inputElements = document.querySelectorAll('.search-input'); - for (const el of inputElements) { - el.addEventListener('focus', init); - el.addEventListener('keyup', search); - el.addEventListener('keydown', handleKeyDown); - el.addEventListener('input', handleInputChange); - } - - const shortcutElements = document.querySelectorAll('.search-wrapper kbd'); - - function setShortcutElementsOpacity(opacity) { - shortcutElements.forEach(el => { - el.style.opacity = opacity; - }); - } - - function handleInputChange(e) { - const opacity = e.target.value.length > 0 ? 0 : 100; - setShortcutElementsOpacity(opacity); - } - - // Get the search wrapper, input, and results elements. - function getActiveSearchElement() { - const inputs = Array.from(document.querySelectorAll('.search-wrapper')).filter(el => el.clientHeight > 0); - if (inputs.length === 1) { - return { - wrapper: inputs[0], - inputElement: inputs[0].querySelector('.search-input'), - resultsElement: inputs[0].querySelector('.search-results') - }; - } - return undefined; - } - - const INPUTS = ['input', 'select', 'button', 'textarea'] - - // Focus the search input when pressing ctrl+k/cmd+k or /. - document.addEventListener('keydown', function (e) { - const { inputElement } = getActiveSearchElement(); - if (!inputElement) return; - - const activeElement = document.activeElement; - const tagName = activeElement && activeElement.tagName; - if ( - inputElement === activeElement || - !tagName || - INPUTS.includes(tagName) || - (activeElement && activeElement.isContentEditable)) - return; - - if ( - e.key === '/' || - (e.key === 'k' && - (e.metaKey /* for Mac */ || /* for non-Mac */ e.ctrlKey)) - ) { - e.preventDefault(); - inputElement.focus(); - } else if (e.key === 'Escape' && inputElement.value) { - inputElement.blur(); - } - }); - - // Dismiss the search results when clicking outside the search box. - document.addEventListener('mousedown', function (e) { - const { inputElement, resultsElement } = getActiveSearchElement(); - if (!inputElement || !resultsElement) return; - if ( - e.target !== inputElement && - e.target !== resultsElement && - !resultsElement.contains(e.target) - ) { - setShortcutElementsOpacity(100); - hideSearchResults(); - } - }); - - // Get the currently active result and its index. - function getActiveResult() { - const { resultsElement } = getActiveSearchElement(); - if (!resultsElement) return { result: undefined, index: -1 }; - - const result = resultsElement.querySelector('.active'); - if (!result) return { result: undefined, index: -1 }; - - const index = parseInt(result.dataset.index, 10); - return { result, index }; - } - - // Set the active result by index. - function setActiveResult(index) { - const { resultsElement } = getActiveSearchElement(); - if (!resultsElement) return; - - const { result: activeResult } = getActiveResult(); - activeResult && activeResult.classList.remove('active'); - const result = resultsElement.querySelector(`[data-index="${index}"]`); - if (result) { - result.classList.add('active'); - result.focus(); - } - } - - // Get the number of search results from the DOM. - function getResultsLength() { - const { resultsElement } = getActiveSearchElement(); - if (!resultsElement) return 0; - return resultsElement.dataset.count; - } - - // Finish the search by hiding the results and clearing the input. - function finishSearch() { - const { inputElement } = getActiveSearchElement(); - if (!inputElement) return; - hideSearchResults(); - inputElement.value = ''; - inputElement.blur(); - } - - function hideSearchResults() { - const { resultsElement } = getActiveSearchElement(); - if (!resultsElement) return; - resultsElement.classList.add('hx-hidden'); - } - - // Handle keyboard events. - function handleKeyDown(e) { - const { inputElement } = getActiveSearchElement(); - if (!inputElement) return; - - const resultsLength = getResultsLength(); - const { result: activeResult, index: activeIndex } = getActiveResult(); - - switch (e.key) { - case 'ArrowUp': - e.preventDefault(); - if (activeIndex > 0) setActiveResult(activeIndex - 1); - break; - case 'ArrowDown': - e.preventDefault(); - if (activeIndex + 1 < resultsLength) setActiveResult(activeIndex + 1); - break; - case 'Enter': - e.preventDefault(); - if (activeResult) { - activeResult.click(); - } - finishSearch(); - case 'Escape': - e.preventDefault(); - hideSearchResults(); - // Clear the input when pressing escape - inputElement.value = ''; - inputElement.dispatchEvent(new Event('input')); - // Remove focus from the input - inputElement.blur(); - break; - } - } - - // Initializes the search. - function init(e) { - e.target.removeEventListener('focus', init); - if (!(window.pageIndex && window.sectionIndex)) { - preloadIndex(); - } - } - - /** - * Preloads the search index by fetching data and adding it to the FlexSearch index. - * @returns {Promise} A promise that resolves when the index is preloaded. - */ - async function preloadIndex() { - const tokenize = 'forward'; - window.pageIndex = new FlexSearch.Document({ - tokenize, - cache: 100, - document: { - id: 'id', - store: ['title', 'crumb'], - index: "content" - } - }); - - window.sectionIndex = new FlexSearch.Document({ - tokenize, - cache: 100, - document: { - id: 'id', - store: ['title', 'content', 'url', 'display', 'crumb'], - index: "content", - tag: 'pageId' - } - }); - - const resp = await fetch(searchDataURL); - const data = await resp.json(); - let pageId = 0; - for (const route in data) { - let pageContent = ''; - ++pageId; - const urlParts = route.split('/').filter(x => x != "" && !x.startsWith('#')); - - let crumb = ''; - let searchUrl = '/' - for (let i = 0; i < urlParts.length; i++) { - const urlPart = urlParts[i]; - searchUrl += urlPart + '/' - - const crumbData = data[searchUrl]; - if (!crumbData) { - console.warn('Excluded page', searchUrl, '- will not be included for search result breadcrumb for', route); - continue; - } - - let title = data[searchUrl].title; - if (title == "_index") { - title = urlPart.split("-").map(x => x).join(" "); - } - crumb += title; - - if (i < urlParts.length - 1) { - crumb += ' > '; - } - } - - for (const heading in data[route].data) { - const [hash, text] = heading.split('#'); - const url = route.trimEnd('/') + (hash ? '#' + hash : ''); - const title = text || data[route].title; - - const content = data[route].data[heading] || ''; - const paragraphs = content.split('\n').filter(Boolean); - - sectionIndex.add({ - id: url, - url, - title, - crumb, - pageId: `page_${pageId}`, - content: title, - ...(paragraphs[0] && { display: paragraphs[0] }) - }); - - for (let i = 0; i < paragraphs.length; i++) { - sectionIndex.add({ - id: `${url}_${i}`, - url, - title, - crumb, - pageId: `page_${pageId}`, - content: paragraphs[i] - }); - } - - pageContent += ` ${title} ${content}`; - } - - window.pageIndex.add({ - id: pageId, - title: data[route].title, - crumb, - content: pageContent - }); - - } - } - - /** - * Performs a search based on the provided query and displays the results. - * @param {Event} e - The event object. - */ - function search(e) { - const query = e.target.value; - if (!e.target.value) { - hideSearchResults(); - return; - } - - const { resultsElement } = getActiveSearchElement(); - while (resultsElement.firstChild) { - resultsElement.removeChild(resultsElement.firstChild); - } - resultsElement.classList.remove('hx-hidden'); - - const pageResults = window.pageIndex.search(query, 5, { enrich: true, suggest: true })[0]?.result || []; - - const results = []; - const pageTitleMatches = {}; - - for (let i = 0; i < pageResults.length; i++) { - const result = pageResults[i]; - pageTitleMatches[i] = 0; - - // Show the top 5 results for each page - const sectionResults = window.sectionIndex.search(query, 5, { enrich: true, suggest: true, tag: `page_${result.id}` })[0]?.result || []; - let isFirstItemOfPage = true - const occurred = {} - - for (let j = 0; j < sectionResults.length; j++) { - const { doc } = sectionResults[j] - const isMatchingTitle = doc.display !== undefined - if (isMatchingTitle) { - pageTitleMatches[i]++ - } - const { url, title } = doc - const content = doc.display || doc.content - - if (occurred[url + '@' + content]) continue - occurred[url + '@' + content] = true - results.push({ - _page_rk: i, - _section_rk: j, - route: url, - prefix: isFirstItemOfPage ? result.doc.crumb : undefined, - children: { title, content } - }) - isFirstItemOfPage = false - } - } - const sortedResults = results - .sort((a, b) => { - // Sort by number of matches in the title. - if (a._page_rk === b._page_rk) { - return a._section_rk - b._section_rk - } - if (pageTitleMatches[a._page_rk] !== pageTitleMatches[b._page_rk]) { - return pageTitleMatches[b._page_rk] - pageTitleMatches[a._page_rk] - } - return a._page_rk - b._page_rk - }) - .map(res => ({ - id: `${res._page_rk}_${res._section_rk}`, - route: res.route, - prefix: res.prefix, - children: res.children - })); - displayResults(sortedResults, query); - } - - /** - * Displays the search results on the page. - * - * @param {Array} results - The array of search results. - * @param {string} query - The search query. - */ - function displayResults(results, query) { - const { resultsElement } = getActiveSearchElement(); - if (!resultsElement) return; - - if (!results.length) { - resultsElement.innerHTML = `No results found.`; - return; - } - - // Highlight the query in the result text. - function highlightMatches(text, query) { - const escapedQuery = query.replace(/[-\\^$*+?.()|[\]{}]/g, '\\$&'); - const regex = new RegExp(escapedQuery, 'gi'); - return text.replace(regex, (match) => `${match}`); - } - - // Create a DOM element from the HTML string. - function createElement(str) { - const div = document.createElement('div'); - div.innerHTML = str.trim(); - return div.firstChild; - } - - function handleMouseMove(e) { - const target = e.target.closest('a'); - if (target) { - const active = resultsElement.querySelector('a.active'); - if (active) { - active.classList.remove('active'); - } - target.classList.add('active'); - } - } - - const fragment = document.createDocumentFragment(); - for (let i = 0; i < results.length; i++) { - const result = results[i]; - if (result.prefix) { - fragment.appendChild(createElement(` -
${result.prefix}
`)); - } - let li = createElement(` -
  • - -
    `+ highlightMatches(result.children.title, query) + `
    ` + - (result.children.content ? - `
    ` + highlightMatches(result.children.content, query) + `
    ` : '') + ` -
    -
  • `); - li.addEventListener('mousemove', handleMouseMove); - li.addEventListener('keydown', handleKeyDown); - li.querySelector('a').addEventListener('click', finishSearch); - fragment.appendChild(li); - } - resultsElement.appendChild(fragment); - resultsElement.dataset.count = results.length; - } -})(); diff --git a/isableFastRender/favicon-16x16.png b/isableFastRender/favicon-16x16.png deleted file mode 100644 index 0f2dd2b..0000000 Binary files a/isableFastRender/favicon-16x16.png and /dev/null differ diff --git a/isableFastRender/favicon-32x32.png b/isableFastRender/favicon-32x32.png deleted file mode 100644 index 5c1aea5..0000000 Binary files a/isableFastRender/favicon-32x32.png and /dev/null differ diff --git a/isableFastRender/favicon-dark.svg b/isableFastRender/favicon-dark.svg deleted file mode 100644 index 3b49e35..0000000 --- a/isableFastRender/favicon-dark.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - diff --git a/isableFastRender/favicon.ico b/isableFastRender/favicon.ico deleted file mode 100644 index 553fa15..0000000 Binary files a/isableFastRender/favicon.ico and /dev/null differ diff --git a/isableFastRender/favicon.svg b/isableFastRender/favicon.svg deleted file mode 100644 index 6a08d10..0000000 --- a/isableFastRender/favicon.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - diff --git a/isableFastRender/images/add_base.png b/isableFastRender/images/add_base.png deleted file mode 100644 index 592843a..0000000 Binary files a/isableFastRender/images/add_base.png and /dev/null differ diff --git a/isableFastRender/images/add_note.png b/isableFastRender/images/add_note.png deleted file mode 100644 index c4b92f8..0000000 Binary files a/isableFastRender/images/add_note.png and /dev/null differ diff --git a/isableFastRender/images/add_production.png b/isableFastRender/images/add_production.png deleted file mode 100644 index 4f9a752..0000000 Binary files a/isableFastRender/images/add_production.png and /dev/null differ diff --git a/isableFastRender/images/all_rushes.png b/isableFastRender/images/all_rushes.png deleted file mode 100644 index 008d823..0000000 Binary files a/isableFastRender/images/all_rushes.png and /dev/null differ diff --git a/isableFastRender/images/audio_select.png b/isableFastRender/images/audio_select.png deleted file mode 100644 index 3cf7dc8..0000000 Binary files a/isableFastRender/images/audio_select.png and /dev/null differ diff --git a/isableFastRender/images/blur_marker.png b/isableFastRender/images/blur_marker.png deleted file mode 100644 index 35b13d3..0000000 Binary files a/isableFastRender/images/blur_marker.png and /dev/null differ diff --git a/isableFastRender/images/cancel_upload.png b/isableFastRender/images/cancel_upload.png deleted file mode 100644 index 7e286a6..0000000 Binary files a/isableFastRender/images/cancel_upload.png and /dev/null differ diff --git a/isableFastRender/images/change_marker_type.png b/isableFastRender/images/change_marker_type.png deleted file mode 100644 index 63e3a18..0000000 Binary files a/isableFastRender/images/change_marker_type.png and /dev/null differ diff --git a/isableFastRender/images/change_marker_type_btn.png b/isableFastRender/images/change_marker_type_btn.png deleted file mode 100644 index e3d6469..0000000 Binary files a/isableFastRender/images/change_marker_type_btn.png and /dev/null differ diff --git a/isableFastRender/images/change_marker_type_marker.png b/isableFastRender/images/change_marker_type_marker.png deleted file mode 100644 index 0b1b1a9..0000000 Binary files a/isableFastRender/images/change_marker_type_marker.png and /dev/null differ diff --git a/isableFastRender/images/created_links.png b/isableFastRender/images/created_links.png deleted file mode 100644 index c5c6493..0000000 Binary files a/isableFastRender/images/created_links.png and /dev/null differ diff --git a/isableFastRender/images/delete_marker.png b/isableFastRender/images/delete_marker.png deleted file mode 100644 index 4ed2f50..0000000 Binary files a/isableFastRender/images/delete_marker.png and /dev/null differ diff --git a/isableFastRender/images/edit_metadata.png b/isableFastRender/images/edit_metadata.png deleted file mode 100644 index c995a51..0000000 Binary files a/isableFastRender/images/edit_metadata.png and /dev/null differ diff --git a/isableFastRender/images/edit_metadata_select.png b/isableFastRender/images/edit_metadata_select.png deleted file mode 100644 index c311a88..0000000 Binary files a/isableFastRender/images/edit_metadata_select.png and /dev/null differ diff --git a/isableFastRender/images/full_screen.png b/isableFastRender/images/full_screen.png deleted file mode 100644 index 42ef0a5..0000000 Binary files a/isableFastRender/images/full_screen.png and /dev/null differ diff --git a/isableFastRender/images/home.png b/isableFastRender/images/home.png deleted file mode 100644 index c802871..0000000 Binary files a/isableFastRender/images/home.png and /dev/null differ diff --git a/isableFastRender/images/link_options.png b/isableFastRender/images/link_options.png deleted file mode 100644 index eed2815..0000000 Binary files a/isableFastRender/images/link_options.png and /dev/null differ diff --git a/isableFastRender/images/logo-dark.svg b/isableFastRender/images/logo-dark.svg deleted file mode 100644 index 2857264..0000000 --- a/isableFastRender/images/logo-dark.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/isableFastRender/images/logo.png b/isableFastRender/images/logo.png deleted file mode 100644 index cde00ae..0000000 Binary files a/isableFastRender/images/logo.png and /dev/null differ diff --git a/isableFastRender/images/logo.svg b/isableFastRender/images/logo.svg deleted file mode 100644 index 1ed7daf..0000000 --- a/isableFastRender/images/logo.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/isableFastRender/images/markers.png b/isableFastRender/images/markers.png deleted file mode 100644 index 33911fa..0000000 Binary files a/isableFastRender/images/markers.png and /dev/null differ diff --git a/isableFastRender/images/menu.png b/isableFastRender/images/menu.png deleted file mode 100644 index a1c47aa..0000000 Binary files a/isableFastRender/images/menu.png and /dev/null differ diff --git a/isableFastRender/images/move_file_modal.png b/isableFastRender/images/move_file_modal.png deleted file mode 100644 index c9f2fa3..0000000 Binary files a/isableFastRender/images/move_file_modal.png and /dev/null differ diff --git a/isableFastRender/images/move_files.png b/isableFastRender/images/move_files.png deleted file mode 100644 index 49813a1..0000000 Binary files a/isableFastRender/images/move_files.png and /dev/null differ diff --git a/isableFastRender/images/production_added.png b/isableFastRender/images/production_added.png deleted file mode 100644 index d79b30f..0000000 Binary files a/isableFastRender/images/production_added.png and /dev/null differ diff --git a/isableFastRender/images/related.png b/isableFastRender/images/related.png deleted file mode 100644 index 182d112..0000000 Binary files a/isableFastRender/images/related.png and /dev/null differ diff --git a/isableFastRender/images/related_clip.png b/isableFastRender/images/related_clip.png deleted file mode 100644 index a3f120c..0000000 Binary files a/isableFastRender/images/related_clip.png and /dev/null differ diff --git a/isableFastRender/images/restore_rotate.png b/isableFastRender/images/restore_rotate.png deleted file mode 100644 index 5043135..0000000 Binary files a/isableFastRender/images/restore_rotate.png and /dev/null differ diff --git a/isableFastRender/images/review.png b/isableFastRender/images/review.png deleted file mode 100644 index 1410062..0000000 Binary files a/isableFastRender/images/review.png and /dev/null differ diff --git a/isableFastRender/images/review_add_prod.png b/isableFastRender/images/review_add_prod.png deleted file mode 100644 index 9ea54d9..0000000 Binary files a/isableFastRender/images/review_add_prod.png and /dev/null differ diff --git a/isableFastRender/images/review_add_prod2.png b/isableFastRender/images/review_add_prod2.png deleted file mode 100644 index 07ee5ce..0000000 Binary files a/isableFastRender/images/review_add_prod2.png and /dev/null differ diff --git a/isableFastRender/images/review_file.png b/isableFastRender/images/review_file.png deleted file mode 100644 index 5bb61b9..0000000 Binary files a/isableFastRender/images/review_file.png and /dev/null differ diff --git a/isableFastRender/images/review_folder_added.png b/isableFastRender/images/review_folder_added.png deleted file mode 100644 index fe97e84..0000000 Binary files a/isableFastRender/images/review_folder_added.png and /dev/null differ diff --git a/isableFastRender/images/review_new_fodler.png b/isableFastRender/images/review_new_fodler.png deleted file mode 100644 index 3b0907b..0000000 Binary files a/isableFastRender/images/review_new_fodler.png and /dev/null differ diff --git a/isableFastRender/images/review_new_folder.png b/isableFastRender/images/review_new_folder.png deleted file mode 100644 index 3b0907b..0000000 Binary files a/isableFastRender/images/review_new_folder.png and /dev/null differ diff --git a/isableFastRender/images/review_new_folder_name.png b/isableFastRender/images/review_new_folder_name.png deleted file mode 100644 index 2d27b2a..0000000 Binary files a/isableFastRender/images/review_new_folder_name.png and /dev/null differ diff --git a/isableFastRender/images/review_production_added.png b/isableFastRender/images/review_production_added.png deleted file mode 100644 index 1d7cd67..0000000 Binary files a/isableFastRender/images/review_production_added.png and /dev/null differ diff --git a/isableFastRender/images/review_upload.png b/isableFastRender/images/review_upload.png deleted file mode 100644 index 2d83e6c..0000000 Binary files a/isableFastRender/images/review_upload.png and /dev/null differ diff --git a/isableFastRender/images/review_upload_existing02.png b/isableFastRender/images/review_upload_existing02.png deleted file mode 100644 index 5cbfd75..0000000 Binary files a/isableFastRender/images/review_upload_existing02.png and /dev/null differ diff --git a/isableFastRender/images/review_upload_existing_file01.png b/isableFastRender/images/review_upload_existing_file01.png deleted file mode 100644 index 617d055..0000000 Binary files a/isableFastRender/images/review_upload_existing_file01.png and /dev/null differ diff --git a/isableFastRender/images/rotate.png b/isableFastRender/images/rotate.png deleted file mode 100644 index a59dab3..0000000 Binary files a/isableFastRender/images/rotate.png and /dev/null differ diff --git a/isableFastRender/images/series_select.png b/isableFastRender/images/series_select.png deleted file mode 100644 index b357b70..0000000 Binary files a/isableFastRender/images/series_select.png and /dev/null differ diff --git a/isableFastRender/images/share_link.png b/isableFastRender/images/share_link.png deleted file mode 100644 index f5a0cbd..0000000 Binary files a/isableFastRender/images/share_link.png and /dev/null differ diff --git a/isableFastRender/images/shooter_filter.png b/isableFastRender/images/shooter_filter.png deleted file mode 100644 index 2c6f289..0000000 Binary files a/isableFastRender/images/shooter_filter.png and /dev/null differ diff --git a/isableFastRender/images/theatre_mode.png b/isableFastRender/images/theatre_mode.png deleted file mode 100644 index b11e810..0000000 Binary files a/isableFastRender/images/theatre_mode.png and /dev/null differ diff --git a/isableFastRender/images/timecode1.png b/isableFastRender/images/timecode1.png deleted file mode 100644 index 5b84657..0000000 Binary files a/isableFastRender/images/timecode1.png and /dev/null differ diff --git a/isableFastRender/images/timecode2.png b/isableFastRender/images/timecode2.png deleted file mode 100644 index 35adabd..0000000 Binary files a/isableFastRender/images/timecode2.png and /dev/null differ diff --git a/isableFastRender/images/user_settings.png b/isableFastRender/images/user_settings.png deleted file mode 100644 index 20de4cf..0000000 Binary files a/isableFastRender/images/user_settings.png and /dev/null differ diff --git a/isableFastRender/images/watch_clips.png b/isableFastRender/images/watch_clips.png deleted file mode 100644 index 67495c9..0000000 Binary files a/isableFastRender/images/watch_clips.png and /dev/null differ diff --git a/isableFastRender/index.html b/isableFastRender/index.html deleted file mode 100644 index aded154..0000000 --- a/isableFastRender/index.html +++ /dev/null @@ -1,389 +0,0 @@ - - - - - - - - - - - - - - - Glympse - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - -
    -
    -

    Glympse

    -
    -

    Glympse is a your solution to a hybrid production. Access your rushes from across the globe and view in a web browser. Allow your teams to work where they want when they need to.

    -

    Documentation -

    - - -
    -
    -
    -
    - - - - - - - - - - - - diff --git a/isableFastRender/index.xml b/isableFastRender/index.xml deleted file mode 100644 index d2a2ce6..0000000 --- a/isableFastRender/index.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - Glympse – Glympse - http://localhost:1313/ - Recent content on Glympse - Hugo -- gohugo.io - en-gb - - - - - - - - - - diff --git a/isableFastRender/js/main.js b/isableFastRender/js/main.js deleted file mode 100644 index 8365e03..0000000 --- a/isableFastRender/js/main.js +++ /dev/null @@ -1,299 +0,0 @@ -// Light / Dark theme toggle -(function () { - const defaultTheme = 'system' - - const themeToggleButtons = document.querySelectorAll(".theme-toggle"); - - // Change the icons of the buttons based on previous settings or system theme - if ( - localStorage.getItem("color-theme") === "dark" || - (!("color-theme" in localStorage) && - ((window.matchMedia("(prefers-color-scheme: dark)").matches && defaultTheme === "system") || defaultTheme === "dark")) - ) { - themeToggleButtons.forEach((el) => el.dataset.theme = "dark"); - } else { - themeToggleButtons.forEach((el) => el.dataset.theme = "light"); - } - - // Add click event handler to the buttons - themeToggleButtons.forEach((el) => { - el.addEventListener("click", function () { - if (localStorage.getItem("color-theme")) { - if (localStorage.getItem("color-theme") === "light") { - setDarkTheme(); - localStorage.setItem("color-theme", "dark"); - } else { - setLightTheme(); - localStorage.setItem("color-theme", "light"); - } - } else { - if (document.documentElement.classList.contains("dark")) { - setLightTheme(); - localStorage.setItem("color-theme", "light"); - } else { - setDarkTheme(); - localStorage.setItem("color-theme", "dark"); - } - } - el.dataset.theme = document.documentElement.classList.contains("dark") ? "dark" : "light"; - }); - }); - - // Listen for system theme changes - window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", (e) => { - if (defaultTheme === "system" && !("color-theme" in localStorage)) { - e.matches ? setDarkTheme() : setLightTheme(); - themeToggleButtons.forEach((el) => - el.dataset.theme = document.documentElement.classList.contains("dark") ? "dark" : "light" - ); - } - }); -})(); - -; -// Hamburger menu for mobile navigation - -document.addEventListener('DOMContentLoaded', function () { - const menu = document.querySelector('.hamburger-menu'); - const overlay = document.querySelector('.mobile-menu-overlay'); - const sidebarContainer = document.querySelector('.sidebar-container'); - - // Initialize the overlay - const overlayClasses = ['hx-fixed', 'hx-inset-0', 'hx-z-10', 'hx-bg-black/80', 'dark:hx-bg-black/60']; - overlay.classList.add('hx-bg-transparent'); - overlay.classList.remove("hx-hidden", ...overlayClasses); - - function toggleMenu() { - // Toggle the hamburger menu - menu.querySelector('svg').classList.toggle('open'); - - // When the menu is open, we want to show the navigation sidebar - sidebarContainer.classList.toggle('max-md:[transform:translate3d(0,-100%,0)]'); - sidebarContainer.classList.toggle('max-md:[transform:translate3d(0,0,0)]'); - - // When the menu is open, we want to prevent the body from scrolling - document.body.classList.toggle('hx-overflow-hidden'); - document.body.classList.toggle('md:hx-overflow-auto'); - } - - menu.addEventListener('click', (e) => { - e.preventDefault(); - toggleMenu(); - - if (overlay.classList.contains('hx-bg-transparent')) { - // Show the overlay - overlay.classList.add(...overlayClasses); - overlay.classList.remove('hx-bg-transparent'); - } else { - // Hide the overlay - overlay.classList.remove(...overlayClasses); - overlay.classList.add('hx-bg-transparent'); - } - }); - - overlay.addEventListener('click', (e) => { - e.preventDefault(); - toggleMenu(); - - // Hide the overlay - overlay.classList.remove(...overlayClasses); - overlay.classList.add('hx-bg-transparent'); - }); -}); - -; -// Copy button for code blocks - -document.addEventListener('DOMContentLoaded', function () { - const getCopyIcon = () => { - const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); - svg.innerHTML = ` - - `; - svg.setAttribute('fill', 'none'); - svg.setAttribute('viewBox', '0 0 24 24'); - svg.setAttribute('stroke', 'currentColor'); - svg.setAttribute('stroke-width', '2'); - return svg; - } - - const getSuccessIcon = () => { - const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); - svg.innerHTML = ` - - `; - svg.setAttribute('fill', 'none'); - svg.setAttribute('viewBox', '0 0 24 24'); - svg.setAttribute('stroke', 'currentColor'); - svg.setAttribute('stroke-width', '2'); - return svg; - } - - document.querySelectorAll('.hextra-code-copy-btn').forEach(function (button) { - // Add copy and success icons - button.querySelector('.copy-icon')?.appendChild(getCopyIcon()); - button.querySelector('.success-icon')?.appendChild(getSuccessIcon()); - - // Add click event listener for copy button - button.addEventListener('click', function (e) { - e.preventDefault(); - // Get the code target - const target = button.parentElement.previousElementSibling; - let codeElement; - if (target.tagName === 'CODE') { - codeElement = target; - } else { - // Select the last code element in case line numbers are present - const codeElements = target.querySelectorAll('code'); - codeElement = codeElements[codeElements.length - 1]; - } - if (codeElement) { - let code = codeElement.innerText; - // Replace double newlines with single newlines in the innerText - // as each line inside has trailing newline '\n' - if ("lang" in codeElement.dataset) { - code = code.replace(/\n\n/g, '\n'); - } - navigator.clipboard.writeText(code).then(function () { - button.classList.add('copied'); - setTimeout(function () { - button.classList.remove('copied'); - }, 1000); - }).catch(function (err) { - console.error('Failed to copy text: ', err); - }); - } else { - console.error('Target element not found'); - } - }); - }); -}); - -; -document.querySelectorAll('.hextra-tabs-toggle').forEach(function (button) { - button.addEventListener('click', function (e) { - // set parent tabs to unselected - const tabs = Array.from(e.target.parentElement.querySelectorAll('.hextra-tabs-toggle')); - tabs.map(tab => tab.dataset.state = ''); - - // set current tab to selected - e.target.dataset.state = 'selected'; - - // set all panels to unselected - const panelsContainer = e.target.parentElement.parentElement.nextElementSibling; - Array.from(panelsContainer.children).forEach(function (panel) { - panel.dataset.state = ''; - }); - - const panelId = e.target.getAttribute('aria-controls'); - const panel = panelsContainer.querySelector(`#${panelId}`); - panel.dataset.state = 'selected'; - }); -}); - -; -(function () { - const languageSwitchers = document.querySelectorAll('.language-switcher'); - languageSwitchers.forEach((switcher) => { - switcher.addEventListener('click', (e) => { - e.preventDefault(); - switcher.dataset.state = switcher.dataset.state === 'open' ? 'closed' : 'open'; - const optionsElement = switcher.nextElementSibling; - optionsElement.classList.toggle('hx-hidden'); - - // Calculate position of language options element - const switcherRect = switcher.getBoundingClientRect(); - const translateY = switcherRect.top - window.innerHeight - 15; - optionsElement.style.transform = `translate3d(${switcherRect.left}px, ${translateY}px, 0)`; - optionsElement.style.minWidth = `${Math.max(switcherRect.width, 50)}px`; - }); - }); - - // Dismiss language switcher when clicking outside - document.addEventListener('click', (e) => { - if (e.target.closest('.language-switcher') === null) { - languageSwitchers.forEach((switcher) => { - switcher.dataset.state = 'closed'; - const optionsElement = switcher.nextElementSibling; - optionsElement.classList.add('hx-hidden'); - }); - } - }); -})(); - -; -// Script for filetree shortcode collapsing/expanding folders used in the theme -// ====================================================================== -document.addEventListener("DOMContentLoaded", function () { - const folders = document.querySelectorAll(".hextra-filetree-folder"); - folders.forEach(function (folder) { - folder.addEventListener("click", function () { - Array.from(folder.children).forEach(function (el) { - el.dataset.state = el.dataset.state === "open" ? "closed" : "open"; - }); - folder.nextElementSibling.dataset.state = folder.nextElementSibling.dataset.state === "open" ? "closed" : "open"; - }); - }); -}); - -; -document.addEventListener("DOMContentLoaded", function () { - scrollToActiveItem(); - enableCollapsibles(); -}); - -function enableCollapsibles() { - const buttons = document.querySelectorAll(".hextra-sidebar-collapsible-button"); - buttons.forEach(function (button) { - button.addEventListener("click", function (e) { - e.preventDefault(); - const list = button.parentElement.parentElement; - if (list) { - list.classList.toggle("open") - } - }); - }); -} - -function scrollToActiveItem() { - const sidebarScrollbar = document.querySelector("aside.sidebar-container > .hextra-scrollbar"); - const activeItems = document.querySelectorAll(".sidebar-active-item"); - const visibleActiveItem = Array.from(activeItems).find(function (activeItem) { - return activeItem.getBoundingClientRect().height > 0; - }); - - if (!visibleActiveItem) { - return; - } - - const yOffset = visibleActiveItem.clientHeight; - const yDistance = visibleActiveItem.getBoundingClientRect().top - sidebarScrollbar.getBoundingClientRect().top; - sidebarScrollbar.scrollTo({ - behavior: "instant", - top: yDistance - yOffset - }); -} - -; -// Back to top button - -document.addEventListener("DOMContentLoaded", function () { - const backToTop = document.querySelector("#backToTop"); - if (backToTop) { - document.addEventListener("scroll", (e) => { - if (window.scrollY > 300) { - backToTop.classList.remove("hx-opacity-0"); - } else { - backToTop.classList.add("hx-opacity-0"); - } - }); - } -}); - -function scrollUp() { - window.scroll({ - top: 0, - left: 0, - behavior: "smooth", - }); -} diff --git a/isableFastRender/lib/flexsearch/flexsearch.bundle.min.0425860527cc9968f9f049421c7a56b39327d475e2e3a8f550416be3a9134327.js b/isableFastRender/lib/flexsearch/flexsearch.bundle.min.0425860527cc9968f9f049421c7a56b39327d475e2e3a8f550416be3a9134327.js deleted file mode 100644 index 4ebf76e..0000000 --- a/isableFastRender/lib/flexsearch/flexsearch.bundle.min.0425860527cc9968f9f049421c7a56b39327d475e2e3a8f550416be3a9134327.js +++ /dev/null @@ -1,39 +0,0 @@ -/** - * Skipped minification because the original files appears to be already minified. - * Original file: /npm/flexsearch@0.7.31/dist/flexsearch.bundle.js - * - * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files - */ -/**! - * FlexSearch.js v0.7.31 (Bundle) - * Copyright 2018-2022 Nextapps GmbH - * Author: Thomas Wilkerling - * Licence: Apache-2.0 - * https://github.com/nextapps-de/flexsearch - */ -(function _f(self){'use strict';try{if(module)self=module}catch(e){}self._factory=_f;var t;function u(a){return"undefined"!==typeof a?a:!0}function aa(a){const b=Array(a);for(let c=0;c=this.B&&(w||!n[l])){var f=L(q,d,r),g="";switch(this.G){case "full":if(2f;h--)if(h-f>=this.B){var k=L(q,d,r,e,f);g=l.substring(f,h);M(this,n,g,k,a,c)}break}case "reverse":if(1=this.B&&M(this,n, -g,L(q,d,r,e,h),a,c);g=""}case "forward":if(1=this.B&&M(this,n,g,f,a,c);break}default:if(this.C&&(f=Math.min(f/this.C(b,l,r)|0,q-1)),M(this,n,l,f,a,c),w&&1=this.B&&!e[l]){e[l]=1;const p=this.l&&l>f;M(this,m,p?f:l,L(g+(d/2>g?0:1),d,r,h-1,k-1),a,c,p?l:f)}}}}this.m||(this.register[a]=1)}}return this}; -function L(a,b,c,d,e){return c&&1=this.B&&!c[q])if(this.s||f||this.map[q])k[w++]=q,c[q]=1;else return d;a=k;e=a.length}if(!e)return d;b||(b=100);h=this.depth&&1=d)))break;if(n){if(f)return ta(k,d,0);b[b.length]=k;return}}return!c&&k}function ta(a,b,c){a=1===a.length?a[0]:[].concat.apply([],a);return c||a.length>b?a.slice(c,c+b):a} -function ua(a,b,c,d){c?(d=d&&b>c,a=(a=a[d?b:c])&&a[d?c:b]):a=a[b];return a}t.contain=function(a){return!!this.register[a]};t.update=function(a,b){return this.remove(a).add(a,b)}; -t.remove=function(a,b){const c=this.register[a];if(c){if(this.m)for(let d=0,e;db||c)e=e.slice(c,c+b);d&&(e=za.call(this,e));return{tag:a,result:e}}}function za(a){const b=Array(a.length);for(let c=0,d;c - - - http://localhost:1313/docs/installation/ - - http://localhost:1313/user_docs/watching-clips/ - - http://localhost:1313/user_docs/edit_metadata/ - - http://localhost:1313/docs/setup/ - - http://localhost:1313/user_docs/watching-clips/watch/ - - http://localhost:1313/user_docs/watching-clips/add_production/ - - http://localhost:1313/user_docs/watching-clips/user_settings/ - - http://localhost:1313/about/ - - http://localhost:1313/categories/ - - http://localhost:1313/docs/installation/database/ - - http://localhost:1313/docs/setup/admin_settings/ - - http://localhost:1313/user_docs/edit_metadata/editing_metadata/ - - http://localhost:1313/ - - http://localhost:1313/docs/setup/admin_frontend/ - - http://localhost:1313/docs/installation/services/ - - http://localhost:1313/docs/installation/install_glympse/ - - http://localhost:1313/user_docs/review/ - - http://localhost:1313/docs/ - - http://localhost:1313/tags/ - - http://localhost:1313/user_docs/review/upload_and_manage_files/ - - http://localhost:1313/user_docs/ - - diff --git a/isableFastRender/tags/index.html b/isableFastRender/tags/index.html deleted file mode 100644 index 9fde12c..0000000 --- a/isableFastRender/tags/index.html +++ /dev/null @@ -1,381 +0,0 @@ - - - - - - - - - - - - - - Tags – Glympse - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - -
    -
    -
    -

    Tags

    - -
    -
    -
    - -
    -
    -
    - -
    -
    © 2024 Joshua Kirkcaldy
    -
    -
    -
    - - - - - - - - - - diff --git a/isableFastRender/tags/index.xml b/isableFastRender/tags/index.xml deleted file mode 100644 index 5feaa9c..0000000 --- a/isableFastRender/tags/index.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - Glympse – Tags - http://localhost:1313/tags/ - Recent content in Tags on Glympse - Hugo -- gohugo.io - en-gb - - - - - - - - - - - diff --git a/isableFastRender/user_docs/edit_metadata/editing_metadata/index.html b/isableFastRender/user_docs/edit_metadata/editing_metadata/index.html deleted file mode 100644 index 8b0c622..0000000 --- a/isableFastRender/user_docs/edit_metadata/editing_metadata/index.html +++ /dev/null @@ -1,486 +0,0 @@ - - - - - - - - - - - - - - Editing Metadata – Glympse - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - -
    -
    - -
    - -
    - Metadata -
    Editing Metadata
    -
    - -
    -

    Editing Metadata

    -

    When you click Edit on the metadata page you will be taken to the edit page. This shows a table with all the clips for that production. You can see whether a clip has been transcoded, is marked as hidden or edit the metadata of the clip(s)

    -

    Edit Metadata

    -

    There are limited options for editing the metadata. You can edit only the roll, the date and the shooter aswell as hide or unhide a clip.

    -

    To edit a clip select it by checking the checkbox of the clip row. At the bottom of the table you can enter a new roll/date/shooter then click save to save the edits.

    -

    Whatever you entered in all three boxes will be applied to the selected clips. Leave the box empty to leave the current details unchanged.

    -

    You can also hide/unhide clips by checking the hide checkbox. As soon as you click the checkbox it will be immediately hidden. It is possible that the clips may still appear until the cache has ben flushed. This process can take 10-15 minutes.

    -

    From this page you can also send multiple clips to the transcription engine.

    -

    Select the clips by checking the checkbox and click transcribe. This w3ill send the selected clips to be transcribed.

    -

    You can also delete clips from the Glympse database.

    -

    Glympse has read only access to the raw camera files, by deleting clips from Glympse, the original camera files will be unaffected.

    - -
    -
    - - -
    -
    -
    - -
    -
    © 2024 Joshua Kirkcaldy
    -
    -
    -
    - - - - - - - - - - diff --git a/isableFastRender/user_docs/edit_metadata/index.html b/isableFastRender/user_docs/edit_metadata/index.html deleted file mode 100644 index d614024..0000000 --- a/isableFastRender/user_docs/edit_metadata/index.html +++ /dev/null @@ -1,477 +0,0 @@ - - - - - - - - - - - - - - Metadata – Glympse - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - -
    -
    - -
    -
    Metadata
    -
    - -
    -

    Metadata

    -

    It is possible to edit some of the metadata for the clips within Glympse.

    -

    Any metadata changes apply only to the Glympse database and are not carried over to the clips themselves.

    -

    To edit the metadata of the clips, click “Edit Clips” in the top right. This will look like the home page where you can select your production. -Click the Edit button to edit the clip metadata.

    -

    Edit Metadata

    - -
    -
    - - -
    -
    -
    - -
    -
    © 2024 Joshua Kirkcaldy
    -
    -
    -
    - - - - - - - - - - diff --git a/isableFastRender/user_docs/edit_metadata/index.xml b/isableFastRender/user_docs/edit_metadata/index.xml deleted file mode 100644 index 8976b1f..0000000 --- a/isableFastRender/user_docs/edit_metadata/index.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - Glympse – Metadata - http://localhost:1313/user_docs/edit_metadata/ - Recent content in Metadata on Glympse - Hugo -- gohugo.io - en-gb - - - - - - - - - - - Editing Metadata - http://localhost:1313/user_docs/edit_metadata/editing_metadata/ - Mon, 01 Jan 0001 00:00:00 +0000 - - http://localhost:1313/user_docs/edit_metadata/editing_metadata/ - - - - <p>When you click Edit on the metadata page you will be taken to the edit page. This shows a table with all the clips for that production. You can see whether a clip has been transcoded, is marked as hidden or edit the metadata of the clip(s)</p> -<p><img src="http://localhost:1313/images/edit_metadata.png" alt="Edit Metadata" loading="lazy" /></p> -<p>There are limited options for editing the metadata. You can edit only the roll, the date and the shooter aswell as hide or unhide a clip.</p> -<p>To edit a clip select it by checking the checkbox of the clip row. At the bottom of the table you can enter a new roll/date/shooter then click save to save the edits.</p> -<p>Whatever you entered in all three boxes will be applied to the selected clips. Leave the box empty to leave the current details unchanged.</p> -<p>You can also hide/unhide clips by checking the hide checkbox. As soon as you click the checkbox it will be immediately hidden. It is possible that the clips may still appear until the cache has ben flushed. This process can take 10-15 minutes.</p> -<p>From this page you can also send multiple clips to the transcription engine.</p> -<p>Select the clips by checking the checkbox and click transcribe. This w3ill send the selected clips to be transcribed.</p> -<p>You can also delete clips from the Glympse database.</p> -<p>Glympse has read only access to the raw camera files, by deleting clips from Glympse, the original camera files will be unaffected.</p> - - - - - - diff --git a/isableFastRender/user_docs/index.html b/isableFastRender/user_docs/index.html deleted file mode 100644 index 8c198e0..0000000 --- a/isableFastRender/user_docs/index.html +++ /dev/null @@ -1,460 +0,0 @@ - - - - - - - - - - - - - - User Documentation – Glympse - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - -
    -
    -
    -

    User Documentation

    -

    Welcome to the user documentation of Glympse.

    -

    Glympse is designed to be as intuitive as possible, so hopefully you won’t need to read this but its here if you need.

    - -
    -
    -
    - -
    -
    -
    - -
    -
    © 2024 Joshua Kirkcaldy
    -
    -
    -
    - - - - - - - - - - diff --git a/isableFastRender/user_docs/index.xml b/isableFastRender/user_docs/index.xml deleted file mode 100644 index b6e720e..0000000 --- a/isableFastRender/user_docs/index.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - Glympse – User Documentation - http://localhost:1313/user_docs/ - Recent content in User Documentation on Glympse - Hugo -- gohugo.io - en-gb - - - - - - - - - - - Upload and Manage Files - http://localhost:1313/user_docs/review/upload_and_manage_files/ - Mon, 01 Jan 0001 00:00:00 +0000 - - http://localhost:1313/user_docs/review/upload_and_manage_files/ - - - - <h2>Upload<span class="hx-absolute -hx-mt-20" id="upload"></span> - <a href="#upload" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>To upload a file, navigate to the review section of Glympse and click upload in the top right. -<img src="http://localhost:1313/images/review_upload.png" alt="upload" loading="lazy" /></p> - - - - - - diff --git a/isableFastRender/user_docs/review/folders/index.html b/isableFastRender/user_docs/review/folders/index.html deleted file mode 100644 index 502fa96..0000000 --- a/isableFastRender/user_docs/review/folders/index.html +++ /dev/null @@ -1,539 +0,0 @@ - - - - - - - - - - - - - - Folders – Glympse - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - -
    -
    - -
    - -
    - Review -
    Folders
    -
    - -
    -

    Folders

    -

    By default when you upload a file, they will be in the root of the review table. This may be preferable when there are one or two files uploaded, but once you start to get more and more files uploaded, you may want to organise the files into subdirectories or folders.

    -

    To add a folder click the New Folder button and enter a name for the folder. -New folder -New folder

    -

    This will be added to the Home page, you can drag files into this folder, alternatively, if you enter a folder and then click upload, it will upload the file directly to this folder. -New folder

    -

    When you drag a file into a folder, the row of the folder you have selected will be highlighted green, release the file and it wil be added to this folder.

    -

    Alternatively you can use the menu for each folder or item to move files.

    -

    Click the dropdown menu button for the file or menu you wish to move and select Move. -Move Files -This will bring a folder tree where you can click on the folder you wish to move the files to.

    -

    Move Files

    -

    Click save changes and the file(s) will be moved.

    -

    From the dropdown menu you can also rename files/folders as well as move them to the bin. Files in the bin will permanently deleted after 30 days.

    - -
    -
    - - -
    -
    -
    - -
    -
    © 2024 Joshua Kirkcaldy
    -
    -
    -
    - - - - - - - - - - diff --git a/isableFastRender/user_docs/review/index.html b/isableFastRender/user_docs/review/index.html deleted file mode 100644 index aaa4fb5..0000000 --- a/isableFastRender/user_docs/review/index.html +++ /dev/null @@ -1,504 +0,0 @@ - - - - - - - - - - - - - - Review – Glympse - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - -
    -
    -
    -

    Review

    -

    Glympse has the ability to upload files for review and approval. Once you upload a file to Glympse, you can add markers and send the file to people within your team using and internal link or to anyone using the create link function.

    - -
    -
    -
    - -
    -
    -
    - -
    -
    © 2024 Joshua Kirkcaldy
    -
    -
    -
    - - - - - - - - - - diff --git a/isableFastRender/user_docs/review/index.xml b/isableFastRender/user_docs/review/index.xml deleted file mode 100644 index 67f187e..0000000 --- a/isableFastRender/user_docs/review/index.xml +++ /dev/null @@ -1,145 +0,0 @@ - - - Glympse – Review - http://localhost:1313/user_docs/review/ - Recent content in Review on Glympse - Hugo -- gohugo.io - en-gb - - - - - - - - - - - Folders - http://localhost:1313/user_docs/review/folders/ - Mon, 01 Jan 0001 00:00:00 +0000 - - http://localhost:1313/user_docs/review/folders/ - - - - <p>By default when you upload a file, they will be in the root of the review table. This may be preferable when there are one or two files uploaded, but once you start to get more and more files uploaded, you may want to organise the files into subdirectories or folders.</p> -<p>To add a folder click the New Folder button and enter a name for the folder. -<img src="http://localhost:1313/images/review_new_folder.png" alt="New folder" loading="lazy" /> -<img src="http://localhost:1313/images/review_new_folder_name.png" alt="New folder" loading="lazy" /></p> -<p>This will be added to the Home page, you can drag files into this folder, alternatively, if you enter a folder and then click upload, it will upload the file directly to this folder. -<img src="http://localhost:1313/images/review_folder_added.png" alt="New folder" loading="lazy" /></p> -<p>When you drag a file into a folder, the row of the folder you have selected will be highlighted green, release the file and it wil be added to this folder.</p> -<p>Alternatively you can use the menu for each folder or item to move files.</p> -<p>Click the dropdown menu button for the file or menu you wish to move and select Move. -<img src="http://localhost:1313/images/move_files.png" alt="Move Files" loading="lazy" /> -This will bring a folder tree where you can click on the folder you wish to move the files to.</p> -<p><img src="http://localhost:1313/images/move_file_modal.png" alt="Move Files" loading="lazy" /></p> -<p>Click save changes and the file(s) will be moved.</p> -<p>From the dropdown menu you can also rename files/folders as well as move them to the bin. Files in the bin will permanently deleted after 30 days.</p> - - - - - - Share File - http://localhost:1313/user_docs/review/share_file/ - Mon, 01 Jan 0001 00:00:00 +0000 - - http://localhost:1313/user_docs/review/share_file/ - - - - <p>It is posible to share the review file to anyone who is in the production group by simply copying the link from the browser.</p> -<p>If you want to share a link with someone who doesn&rsquo;t have access or is not a Glympse user, you will need to create a link using the share dialogue.</p> -<p>From the video review page, click share in the menu bar, then <code>generate share link</code></p> -<p>This will show you all the links for this file as well as the internal link that can be shared with Glympse users. -<img src="http://localhost:1313/images/share_link.png" alt="Share Links" loading="lazy" /></p> -<p>To create a new link, click Generate link. This will allow you to set some options for the link. -<img src="http://localhost:1313/images/create_share.png" alt="Share Links" loading="lazy" /></p> -<p>You can add a password, an expiry date and select whether the file should be downloadable from this link. -<img src="http://localhost:1313/images/link_options.png" alt="link options" loading="lazy" /></p> -<p>Click generate and a new link will be created with the selected options. -<img src="http://localhost:1313/images/created_links.png" alt="created Links" loading="lazy" /></p> -<p>You can copy or delete any created links for the file.</p> - - - - - - Upload Files - http://localhost:1313/user_docs/review/upload_and_manage_files/ - Mon, 01 Jan 0001 00:00:00 +0000 - - http://localhost:1313/user_docs/review/upload_and_manage_files/ - - - - <h2>Upload<span class="hx-absolute -hx-mt-20" id="upload"></span> - <a href="#upload" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>To upload a file, navigate to the review section of Glympse and click upload in the top right. -<img src="http://localhost:1313/images/review_upload.png" alt="upload" loading="lazy" /></p> -<p>This will take you to the upload form.</p> -<p>Every file you upload must belong to a production.</p> -<h3>Existing Production<span class="hx-absolute -hx-mt-20" id="existing-production"></span> - <a href="#existing-production" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>To upload to an existing production simply select it from the drop down menu.</p> -<p>Next either select the file to upload or give it a title. If you leave the File Name field blank, by default it will use the filename of your selected file.</p> -<p>Select the file you&rsquo;d like to upload by either dragging and dropping it into the upload box or clicking inside the box to bring the file select dialogue.</p> -<p><img src="http://localhost:1313/images/review_upload_existing_file01.png" alt="upload" loading="lazy" /></p> -<p><img src="http://localhost:1313/images/review_upload_existing02.png" alt="upload" loading="lazy" /></p> -<p>Once you have selected your file click upload and it will start uploading.</p> -<h3>New Production<span class="hx-absolute -hx-mt-20" id="new-production"></span> - <a href="#new-production" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>To upload a file to a new production, you will first need to create the Production. From the review upload page, click the blue + button. -<img src="http://localhost:1313/images/review_add_prod.png" alt="upload" loading="lazy" /></p> -<p>This will open the Add Production Modal. This is similar to adding a normal production, only here you don&rsquo;t need to select a directory to scan for rushes or add a priority. -<img src="http://localhost:1313/images/review_add_prod2.png" alt="upload" loading="lazy" /></p> -<p>Once you click submit, the production will be created and automatically selected on the upload form. -<img src="http://localhost:1313/images/review_production_added.png" alt="upload" loading="lazy" /></p> -<p>Select or drag and drop your file and click upload.</p> -<h2>Cancel upload<span class="hx-absolute -hx-mt-20" id="cancel-upload"></span> - <a href="#cancel-upload" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>If you need to cancel an upload, you can stop and remove it by pressing the red X icon that shows when you hover your mouse over the progress bar. -<img src="http://localhost:1313/images/cancel_upload.png" alt="Cancel upload" loading="lazy" /></p> -<h2>Resume upload<span class="hx-absolute -hx-mt-20" id="resume-upload"></span> - <a href="#resume-upload" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>If for whatever reason the upload fails, you can resume the upload by submitting the same file with the same information and it will continue the upload from where it left off.</p> - - - - - - Watch and Review Files - http://localhost:1313/user_docs/review/watch_review/ - Mon, 01 Jan 0001 00:00:00 +0000 - - http://localhost:1313/user_docs/review/watch_review/ - - - - <p>When you click on a file title from the review page, you will be taken the file viewing page. The viewing experience is similar to that of watching rushes, however with review files, multiple qualities are created. This allows for higher resolution viewing of a file.</p> -<p>It is also possible for anyone with download access to download the original file. Download access is given to all users in the production group or is specifically given when creating a download link.</p> -<p><img src="http://localhost:1313/images/review_file.png" alt="Review File" loading="lazy" /></p> -<p>You can play the video file and add markers as you watch.</p> -<h2>Add Markers<span class="hx-absolute -hx-mt-20" id="add-markers"></span> - <a href="#add-markers" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Whilst the video is playing, you can add a marker by clicking in the box that says &ldquo;Enter your notes here&rdquo;. This will pause the video whilst you add your text.</p> -<p>You can change the type of marker by pressing the change marker button: -<img src="http://localhost:1313/images/change_marker_type_btn.png" alt="Change Marker" loading="lazy" /></p> -<p>This will bring up a menu with the available marker types. Select the type you want to add and the marker button will change colour.</p> -<p><img src="http://localhost:1313/images/change_marker_type.png" alt="marker menu" loading="lazy" /></p> -<p>When you have entered your text in the box, click the save button or press <code>enter</code> -<img src="http://localhost:1313/images/blur_marker.png" alt="blur marker" loading="lazy" /></p> -<p>The marker will be added to the right hand side of the video player. -<img src="http://localhost:1313/images/markers.png" alt="Markers" loading="lazy" /></p> -<p>Any markers added by you or others will appear here. MArkers will be added live if there are others reviewing the file at the same time.</p> -<p>Clicking on the timecode of the marker will navigate the player to that timecode.</p> -<p>It is also possible to change the marker type after it has been added. The process is the same, click the change marker type button on the marker itself and select a new marker type.</p> -<p><img src="http://localhost:1313/images/change_marker_type_marker.png" alt="Change Marker Type" loading="lazy" /></p> -<p>If you added the marker, it&rsquo;s also possible to change the marker text. It is also only possible for the person who added a marker to delete it.</p> -<p>Hover over the marker and the delete button will appear. -<img src="http://localhost:1313/images/delete_marker.png" alt="delete marker" loading="lazy" /></p> -<p>You can reply to any marker by pressing the reply button on a marker. This will allow you to add a reply to the markers. -<img src="http://localhost:1313/images/add_note.png" alt="add note" loading="lazy" /></p> -<p>Again, only the person who adds the note can delete it. Unless the marker it&rsquo;s applied to is deleted by someone else.</p> - - - - - - diff --git a/isableFastRender/user_docs/review/share_file/index.html b/isableFastRender/user_docs/review/share_file/index.html deleted file mode 100644 index f9fd931..0000000 --- a/isableFastRender/user_docs/review/share_file/index.html +++ /dev/null @@ -1,548 +0,0 @@ - - - - - - - - - - - - - - Share File – Glympse - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - -
    -
    - -
    - -
    - Review -
    Share File
    -
    - -
    -

    Share File

    -

    It is posible to share the review file to anyone who is in the production group by simply copying the link from the browser.

    -

    If you want to share a link with someone who doesn’t have access or is not a Glympse user, you will need to create a link using the share dialogue.

    -

    From the video review page, click share in the menu bar, then generate share link

    -

    This will show you all the links for this file as well as the internal link that can be shared with Glympse users. -Share Links

    -

    To create a new link, click Generate link. This will allow you to set some options for the link. -Share Links

    -

    You can add a password, an expiry date and select whether the file should be downloadable from this link. -link options

    -

    Click generate and a new link will be created with the selected options. -created Links

    -

    You can copy or delete any created links for the file.

    - -
    -
    - - -
    -
    -
    - -
    -
    © 2024 Joshua Kirkcaldy
    -
    -
    -
    - - - - - - - - - - diff --git a/isableFastRender/user_docs/review/upload_and_manage_files/index.html b/isableFastRender/user_docs/review/upload_and_manage_files/index.html deleted file mode 100644 index 556ee74..0000000 --- a/isableFastRender/user_docs/review/upload_and_manage_files/index.html +++ /dev/null @@ -1,604 +0,0 @@ - - - - - - - - - - - - - - Upload Files – Glympse - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - -
    -
    - -
    - -
    - Review -
    Upload Files
    -
    - -
    -

    Upload Files

    -

    Upload -

    To upload a file, navigate to the review section of Glympse and click upload in the top right. -upload

    -

    This will take you to the upload form.

    -

    Every file you upload must belong to a production.

    -

    Existing Production -

    To upload to an existing production simply select it from the drop down menu.

    -

    Next either select the file to upload or give it a title. If you leave the File Name field blank, by default it will use the filename of your selected file.

    -

    Select the file you’d like to upload by either dragging and dropping it into the upload box or clicking inside the box to bring the file select dialogue.

    -

    upload

    -

    upload

    -

    Once you have selected your file click upload and it will start uploading.

    -

    New Production -

    To upload a file to a new production, you will first need to create the Production. From the review upload page, click the blue + button. -upload

    -

    This will open the Add Production Modal. This is similar to adding a normal production, only here you don’t need to select a directory to scan for rushes or add a priority. -upload

    -

    Once you click submit, the production will be created and automatically selected on the upload form. -upload

    -

    Select or drag and drop your file and click upload.

    -

    Cancel upload -

    If you need to cancel an upload, you can stop and remove it by pressing the red X icon that shows when you hover your mouse over the progress bar. -Cancel upload

    -

    Resume upload -

    If for whatever reason the upload fails, you can resume the upload by submitting the same file with the same information and it will continue the upload from where it left off.

    - -
    -
    - - -
    -
    -
    - -
    -
    © 2024 Joshua Kirkcaldy
    -
    -
    -
    - - - - - - - - - - diff --git a/isableFastRender/user_docs/review/watch_review/index.html b/isableFastRender/user_docs/review/watch_review/index.html deleted file mode 100644 index 7e17f77..0000000 --- a/isableFastRender/user_docs/review/watch_review/index.html +++ /dev/null @@ -1,563 +0,0 @@ - - - - - - - - - - - - - - Watch and Review Files – Glympse - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - -
    -
    - -
    - -
    - Review -
    Watch and Review Files
    -
    - -
    -

    Watch and Review Files

    -

    When you click on a file title from the review page, you will be taken the file viewing page. The viewing experience is similar to that of watching rushes, however with review files, multiple qualities are created. This allows for higher resolution viewing of a file.

    -

    It is also possible for anyone with download access to download the original file. Download access is given to all users in the production group or is specifically given when creating a download link.

    -

    Review File

    -

    You can play the video file and add markers as you watch.

    -

    Add Markers -

    Whilst the video is playing, you can add a marker by clicking in the box that says “Enter your notes here”. This will pause the video whilst you add your text.

    -

    You can change the type of marker by pressing the change marker button: -Change Marker

    -

    This will bring up a menu with the available marker types. Select the type you want to add and the marker button will change colour.

    -

    marker menu

    -

    When you have entered your text in the box, click the save button or press enter -blur marker

    -

    The marker will be added to the right hand side of the video player. -Markers

    -

    Any markers added by you or others will appear here. MArkers will be added live if there are others reviewing the file at the same time.

    -

    Clicking on the timecode of the marker will navigate the player to that timecode.

    -

    It is also possible to change the marker type after it has been added. The process is the same, click the change marker type button on the marker itself and select a new marker type.

    -

    Change Marker Type

    -

    If you added the marker, it’s also possible to change the marker text. It is also only possible for the person who added a marker to delete it.

    -

    Hover over the marker and the delete button will appear. -delete marker

    -

    You can reply to any marker by pressing the reply button on a marker. This will allow you to add a reply to the markers. -add note

    -

    Again, only the person who adds the note can delete it. Unless the marker it’s applied to is deleted by someone else.

    - -
    -
    - - -
    -
    -
    - -
    -
    © 2024 Joshua Kirkcaldy
    -
    -
    -
    - - - - - - - - - - diff --git a/isableFastRender/user_docs/watching-clips/add_production/index.html b/isableFastRender/user_docs/watching-clips/add_production/index.html deleted file mode 100644 index 6a99608..0000000 --- a/isableFastRender/user_docs/watching-clips/add_production/index.html +++ /dev/null @@ -1,579 +0,0 @@ - - - - - - - - - - - - - - Adding A Production – Glympse - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - -
    -
    - -
    - -
    Adding A Production
    -
    - -
    -

    Adding A Production

    -

    To add a production click the “Add Production” button in the top right of the home page.

    -

    This will bring up the dialogue to add a new production. -Add Production Modal -A production consists of two parts. The Base Production and the Production.

    -

    For example your Base Production may be “Game of Thrones” then the Production could be “Game of Thrones Series 1”

    -

    Base Production -

    Select the Base Production, if it doesn’t exist create it by clicking the button next to the select dropdown. -Enter the new name of your production and click submit. -Add Production Base -The name you entered will be automatically selected.

    -

    Production Series -

    Enter the series of the production you are adding. This must be an integer.

    -

    Friendly Name -

    Enter a short friendly name for the series. This is what will appear on the default thumbnail. In this example we will enter GOTS1

    -

    Select the location of the camera rushes. -

    Click on a directory to open it and select it by clicking the radio check mark on the left. -Select Series

    -

    Priority -

    Most productions can be left as the default of 20. But if you have a smaller production or one where the transcodes need to be run before others you can change the priority here. 0 = lowest priority 100 = highest priority.

    -

    Production Owner -

    This is who will be responsible for the production. They will get the emails to say that the production has been scanned etc. This will usually be the edit assistant assigned to the project. The user must exist in the Glympse system.

    -

    If left empty, this will default to the admin user.

    -

    Click submit and the production will be added to Glympse and the Processing engine will start scanning for new clips. -production Added

    - -
    -
    - - -
    -
    -
    - -
    -
    © 2024 Joshua Kirkcaldy
    -
    -
    -
    - - - - - - - - - - diff --git a/isableFastRender/user_docs/watching-clips/index.html b/isableFastRender/user_docs/watching-clips/index.html deleted file mode 100644 index ac54f0b..0000000 --- a/isableFastRender/user_docs/watching-clips/index.html +++ /dev/null @@ -1,478 +0,0 @@ - - - - - - - - - - - - - - Watching Clips – Glympse - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - -
    -
    - -
    -
    Watching Clips
    -
    - -
    -

    Watching Clips

    -

    Home Page -Once You have been added to a production(s). You will see all your available productions on your home page. Under the thumbnail for each production you will see a list of buttons. The fist will let you view all the rushes from every shooter.

    -

    All Rushes

    -

    Under that you will see a list of the shooters from that project. Clicking on these will allow you to filter the production by that shooter.

    -

    If we were to click on John Snow from either the home page or at the top of the rushes page. We will filter the rushes to show only those shot by John Snow.

    -

    Shooter Filter

    -

    At the top of the page, you can also click on the name of the shooter to filter the clips. Clicking on the shooter will only return results shot by the selected shooter. Clicking All or Reset will show all the rushes again.

    -

    In the search bar, you can search for a card or date. The results will be filtered live as you type.

    -

    Once you select a card, you’ll be taken to the video player screen.

    - -
    -
    - - -
    -
    -
    - -
    -
    © 2024 Joshua Kirkcaldy
    -
    -
    -
    - - - - - - - - - - diff --git a/isableFastRender/user_docs/watching-clips/index.xml b/isableFastRender/user_docs/watching-clips/index.xml deleted file mode 100644 index a2844f3..0000000 --- a/isableFastRender/user_docs/watching-clips/index.xml +++ /dev/null @@ -1,171 +0,0 @@ - - - Glympse – Watching Clips - http://localhost:1313/user_docs/watching-clips/ - Recent content in Watching Clips on Glympse - Hugo -- gohugo.io - en-gb - - - - - - - - - - - Watching clips - http://localhost:1313/user_docs/watching-clips/watch/ - Mon, 01 Jan 0001 00:00:00 +0000 - - http://localhost:1313/user_docs/watching-clips/watch/ - - - - <p><img src="http://localhost:1313/images/watch_clips.png" alt="Watch Clips" loading="lazy" /> -This is where you will watch through the clips in Glympse.</p> -<p>When the page loads, it will automatically load the first clip into the player. To start playing you can press the big play button in the centre.</p> -<h3>The video Player<span class="hx-absolute -hx-mt-20" id="the-video-player"></span> - <a href="#the-video-player" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><h4>Timecode<span class="hx-absolute -hx-mt-20" id="timecode"></span> - <a href="#timecode" class="subheading-anchor" aria-label="Permalink for this section"></a></h4><p>Glympse uses the timecode from the media files. This is so that it matches the timecode that your editor sees within Avid or their NLE of choice.</p> -<p><em>It is possible that the timecode in Glympse may be a frame off, this is because the timecodes must be calculated rather than read from the file. It will never be more that one frame off the timecode in the NLE.</em></p> -<p>The timecode of the clip is displayed in two places. The seek bar: -<img src="http://localhost:1313/images/timecode1.png" alt="Timecode 1" loading="lazy" /></p> -<p>And there is a timecode box in the top left: -<img src="http://localhost:1313/images/timecode2.png" alt="Timecode 2" loading="lazy" /></p> -<p>This timecode box can be moved anywhere in the player window by dragging it to where you&rsquo;d like it to be. You can reset the position of the timecode or disable the timecode box using the <a href="http://localhost:1313/user_docs/user_settings" >user settings menu.</a></p> -<h4>Audio Selection<span class="hx-absolute -hx-mt-20" id="audio-selection"></span> - <a href="#audio-selection" class="subheading-anchor" aria-label="Permalink for this section"></a></h4><p>For clips that have more than one track of audio, you can select the track to play back by clicking on the headphone icon on the playbar and selecting the audio track. Glympse by default creates a full mix of all the audio channels and plays this by default. -<img src="http://localhost:1313/images/audio_select.png" alt="Audio Tracks" loading="lazy" /></p> -<h4>Theatre Mode<span class="hx-absolute -hx-mt-20" id="theatre-mode"></span> - <a href="#theatre-mode" class="subheading-anchor" aria-label="Permalink for this section"></a></h4><p><img src="http://localhost:1313/images/theatre_mode.png" alt="Theatre Mode" loading="lazy" /> -Clicking the theatre mode button will expand the player to take 100% the width of the browser window. Clicking the theatre mode button again will return the player back to its normal size.</p> -<h4>Full Screen<span class="hx-absolute -hx-mt-20" id="full-screen"></span> - <a href="#full-screen" class="subheading-anchor" aria-label="Permalink for this section"></a></h4><p>Click this button for full screen playback -<img src="http://localhost:1313/images/full_screen.png" alt="Full Screen" loading="lazy" /></p> -<h4>Rotate<span class="hx-absolute -hx-mt-20" id="rotate"></span> - <a href="#rotate" class="subheading-anchor" aria-label="Permalink for this section"></a></h4><p>Some clips like GoPro files can be the wrong orientation. Click the rotate button to rotate the clip by 180° -<img src="http://localhost:1313/images/rotate.png" alt="Rotate" loading="lazy" /></p> -<p>Click the restore rotate to return the clip to its original orientation. -<img src="http://localhost:1313/images/restore_rotate.png" alt="Restore Rotate" loading="lazy" /></p> -<h4>Keyboard shortcuts<span class="hx-absolute -hx-mt-20" id="keyboard-shortcuts"></span> - <a href="#keyboard-shortcuts" class="subheading-anchor" aria-label="Permalink for this section"></a></h4><p>When on this page there are a number of keyboard shortcuts you can use. -J, K, L are shuttle controls to speed up or change the direction of play. You may have to click in the player window to enable these controls. Holding the Shift Key will also increase the amount the play is sped up or slowed down.</p> -<p>M will add a marker at the current time of the clip. Markers will appear for everyone who has access to the production.</p> -<h3>Selecting Clips<span class="hx-absolute -hx-mt-20" id="selecting-clips"></span> - <a href="#selecting-clips" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>You can select the clip you&rsquo;d like to view from the table at the bottom of the screen. Click the title of the clip to load it into the player.</p> -<p>You can also navigate through the clips by pressing the Next/Prev buttons at the bottom of the player. This will load the next or previous clip.</p> -<p>The title of the currently playing clip is shown at the bottom of the player and the middle of the menu bar at the top.</p> -<h3>Related Clips<span class="hx-absolute -hx-mt-20" id="related-clips"></span> - <a href="#related-clips" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>When clips are loaded into Glympse, the system will scan for the start timecode and the end timecode of a clip. This allows it to show all the related clips of the clip you are playing. The related clips box onthe right of the player will update whenever the source of the video player changes. You can automatically hide or show the related clips dropdown using the <a href="http://localhost:1313/user_docs/user_settings" >user settings menu.</a></p> -<p>In this example the clip being played belongs to the Main camera and there are two GoPro cameras that have clips with overlapping timecodes.</p> -<p><img src="http://localhost:1313/images/related.png" alt="Related" loading="lazy" /></p> -<p>Clicking on the title of these related clips will play it in the current page, allowing you to quickly view clips from the other cameras. When you&rsquo;re viewing a related clip, the title in the menu bar and below the player will change showing you that it&rsquo;s playing a related clip then it will list the card followed by the clip title. -<img src="http://localhost:1313/images/related_clip.png" alt="Related" loading="lazy" /> -As well as this, the prev/next buttons will disappear from below the player. You can select the next related clip by clicking on the clip title or you can return to the original clip by selecting it in the table at the bottom again. This will re-enable the next prev buttons and you can resume watching the camera clips as normal.</p> -<p>You can also navigate to any related cards from the related menu in the manu bar. This will show you camera cards from the same camera operator shot on the same day.</p> -<h3>Markers and Tags<span class="hx-absolute -hx-mt-20" id="markers-and-tags"></span> - <a href="#markers-and-tags" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>You can add markers or tags to any clip within Glympse.</p> -<h4>Markers<span class="hx-absolute -hx-mt-20" id="markers"></span> - <a href="#markers" class="subheading-anchor" aria-label="Permalink for this section"></a></h4><p>Markers allow you to mark a specific place in a clip. They will be displayed in the marker window next to the player and clicking on them will take you to the correct position in the clip.</p> -<p>Markers are shown to everyone who has access to the clip.</p> -<h4>Tags<span class="hx-absolute -hx-mt-20" id="tags"></span> - <a href="#tags" class="subheading-anchor" aria-label="Permalink for this section"></a></h4><p>Tags are to tag an entire clip. You can tag more than one clip at a time. There is also a setting in the user settings menu that will automatically add the tags to any related clips.</p> -<p>Tags are available to everyone who has access to the clips.</p> -<h2>Menu Bar<span class="hx-absolute -hx-mt-20" id="menu-bar"></span> - <a href="#menu-bar" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p><img src="http://localhost:1313/images/menu.png" alt="Menu" loading="lazy" /> -The menu bar may show different options depending on what permissions you have. For example, the Download button will only appear if you have been give download permission for your production.</p> -<h3>File<span class="hx-absolute -hx-mt-20" id="file"></span> - <a href="#file" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>From the file menu you can send a clip to be transcribed, edit the metadata of the card, submit the card for re-transcode or report issues with the card.</p> -<h4>Transcribe<span class="hx-absolute -hx-mt-20" id="transcribe"></span> - <a href="#transcribe" class="subheading-anchor" aria-label="Permalink for this section"></a></h4><p>Select the clip or clips you would like to transcribe by checking the box in the table and click file then transcribe. This will send the selected clip(s) to the transcription engine. You can learn more about how this works <a href="http://localhost:1313/user_docs/transcription" >here.</a></p> -<h4>Edit metadata<span class="hx-absolute -hx-mt-20" id="edit-metadata"></span> - <a href="#edit-metadata" class="subheading-anchor" aria-label="Permalink for this section"></a></h4><p>From this menu you can change some of the metadata for the card. Anything you change here will be applied to every clip in the card.</p> -<p>You can change the date, the card name, or the shooter. You can also hide the card which will stop it from showing on the rushes page. Anyone with a link to the card would still be able to access the clips. This will <em>only</em> stop the card from appearing in the rushes page. Users with access to the production can also unhide any card from the metadata edit pages.</p> -<h4>Request Retranscode<span class="hx-absolute -hx-mt-20" id="request-retranscode"></span> - <a href="#request-retranscode" class="subheading-anchor" aria-label="Permalink for this section"></a></h4><p>This will send the entire card back through the transcode engine. It allows you to report any issues with the card and manually submit the clips to the transcoder. The transcode will only work if the original clips are still available.</p> -<h4>Report Issues<span class="hx-absolute -hx-mt-20" id="report-issues"></span> - <a href="#report-issues" class="subheading-anchor" aria-label="Permalink for this section"></a></h4><p>This allows you to report issues with the current card. But this option will not automatically retranscode the clips. They would need to be manually transcoded by the admin team.</p> -<h3>Related<span class="hx-absolute -hx-mt-20" id="related"></span> - <a href="#related" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>This will show any cards that were shot by the same camera operator on the same day as the current card. Clicking one of these will take you load that current card.</p> -<h3>Download<span class="hx-absolute -hx-mt-20" id="download"></span> - <a href="#download" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>If you have been given the download permissions for your production, you can download the original clip by selecting the clips from the table with the checkbox and clicking download. These files can be very large and may take a long time to download.</p> -<h3>Help<span class="hx-absolute -hx-mt-20" id="help"></span> - <a href="#help" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>This will open these help pages.</p> -<h3>Settings<span class="hx-absolute -hx-mt-20" id="settings"></span> - <a href="#settings" class="subheading-anchor" aria-label="Permalink for this section"></a></h3><p>This will open the user settings menu. <a href="http://localhost:1313/user_docs/user_settings" >Click here to learn more.</a></p> -<p>In the centre of the menu bar, the title of the currently loaded clip will be displayed.</p> - - - - - - Adding A Production - http://localhost:1313/user_docs/watching-clips/add_production/ - Mon, 01 Jan 0001 00:00:00 +0000 - - http://localhost:1313/user_docs/watching-clips/add_production/ - - - - <p>To add a production click the &ldquo;Add Production&rdquo; button in the top right of the home page.</p> -<p>This will bring up the dialogue to add a new production. -<img src="http://localhost:1313/images/add_production.png" alt="Add Production Modal" loading="lazy" /> -A production consists of two parts. The Base Production and the Production.</p> -<p>For example your Base Production may be &ldquo;Game of Thrones&rdquo; then the Production could be &ldquo;Game of Thrones Series 1&rdquo;</p> -<h2>Base Production<span class="hx-absolute -hx-mt-20" id="base-production"></span> - <a href="#base-production" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Select the Base Production, if it doesn&rsquo;t exist create it by clicking the button next to the select dropdown. -Enter the new name of your production and click submit. -<img src="http://localhost:1313/images/add_base.png" alt="Add Production Base" loading="lazy" /> -The name you entered will be automatically selected.</p> -<h2>Production Series<span class="hx-absolute -hx-mt-20" id="production-series"></span> - <a href="#production-series" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Enter the series of the production you are adding. This must be an integer.</p> -<h2>Friendly Name<span class="hx-absolute -hx-mt-20" id="friendly-name"></span> - <a href="#friendly-name" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Enter a short friendly name for the series. This is what will appear on the default thumbnail. In this example we will enter <code>GOTS1</code></p> -<h2>Select the location of the camera rushes.<span class="hx-absolute -hx-mt-20" id="select-the-location-of-the-camera-rushes"></span> - <a href="#select-the-location-of-the-camera-rushes" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Click on a directory to open it and select it by clicking the radio check mark on the left. -<img src="http://localhost:1313/images/series_select.png" alt="Select Series" loading="lazy" /></p> -<h2>Priority<span class="hx-absolute -hx-mt-20" id="priority"></span> - <a href="#priority" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Most productions can be left as the default of 20. But if you have a smaller production or one where the transcodes need to be run before others you can change the priority here. 0 = lowest priority 100 = highest priority.</p> -<h2>Production Owner<span class="hx-absolute -hx-mt-20" id="production-owner"></span> - <a href="#production-owner" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>This is who will be responsible for the production. They will get the emails to say that the production has been scanned etc. This will usually be the edit assistant assigned to the project. The user must exist in the Glympse system.</p> -<p>If left empty, this will default to the admin user.</p> -<p>Click submit and the production will be added to Glympse and the Processing engine will start scanning for new clips. -<img src="http://localhost:1313/images/production_added.png" alt="production Added" loading="lazy" /></p> - - - - - - User Settings - http://localhost:1313/user_docs/watching-clips/user_settings/ - Mon, 01 Jan 0001 00:00:00 +0000 - - http://localhost:1313/user_docs/watching-clips/user_settings/ - - - - <p>From the User Settings menu you can change some personal settings. -<img src="http://localhost:1313/images/user_settings.png" alt="User Settings" loading="lazy" /></p> -<h2>Auto Add/Remove Tags<span class="hx-absolute -hx-mt-20" id="auto-addremove-tags"></span> - <a href="#auto-addremove-tags" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>When checked, this will automatically add or remove tags on any related clips. When unchecked this, any tags you add or remove, will only be apply to the clips you have selected.</p> -<h2>Show Timecode Heading<span class="hx-absolute -hx-mt-20" id="show-timecode-heading"></span> - <a href="#show-timecode-heading" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>This enables/disables the timecode box in the video player. Is is enabled by default, should you wish to disable it, you would do so here.</p> -<h2>Timecode Size<span class="hx-absolute -hx-mt-20" id="timecode-size"></span> - <a href="#timecode-size" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Default: 16</p> -<p>You can change the font size for the timecode box here. Increase to make the timecode larger, decrease to make it smaller.</p> -<h2>Reset Timecode Position<span class="hx-absolute -hx-mt-20" id="reset-timecode-position"></span> - <a href="#reset-timecode-position" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>It is possible that the timecode box may disappear off the ege of the video player. Especially if you use multiple devices with different resolution screens. If that happens, you can reset it to the top left corner here.</p> -<h2>Auto Expand related clips<span class="hx-absolute -hx-mt-20" id="auto-expand-related-clips"></span> - <a href="#auto-expand-related-clips" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>This will automatically expand the related clips accordion oin the right next to the player. If it is enabled, the related clips will be shown automatically. If disabled you would need to manually open the accordion to display them.</p> -<h2>Marker Colour<span class="hx-absolute -hx-mt-20" id="marker-colour"></span> - <a href="#marker-colour" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>Change the colour of your markers, this only really applies to the Review section.</p> -<h2>Receive Admin Emails<span class="hx-absolute -hx-mt-20" id="receive-admin-emails"></span> - <a href="#receive-admin-emails" class="subheading-anchor" aria-label="Permalink for this section"></a></h2><p>If you are set as a production owner, this enables/disables the email updates.</p> - - - - - - diff --git a/isableFastRender/user_docs/watching-clips/user_settings/index.html b/isableFastRender/user_docs/watching-clips/user_settings/index.html deleted file mode 100644 index c5f6bef..0000000 --- a/isableFastRender/user_docs/watching-clips/user_settings/index.html +++ /dev/null @@ -1,568 +0,0 @@ - - - - - - - - - - - - - - User Settings – Glympse - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - -
    -
    - -
    - -
    User Settings
    -
    - -
    -

    User Settings

    -

    From the User Settings menu you can change some personal settings. -User Settings

    -

    Auto Add/Remove Tags -

    When checked, this will automatically add or remove tags on any related clips. When unchecked this, any tags you add or remove, will only be apply to the clips you have selected.

    -

    Show Timecode Heading -

    This enables/disables the timecode box in the video player. Is is enabled by default, should you wish to disable it, you would do so here.

    -

    Timecode Size -

    Default: 16

    -

    You can change the font size for the timecode box here. Increase to make the timecode larger, decrease to make it smaller.

    -

    Reset Timecode Position -

    It is possible that the timecode box may disappear off the ege of the video player. Especially if you use multiple devices with different resolution screens. If that happens, you can reset it to the top left corner here.

    -

    Auto Expand related clips -

    This will automatically expand the related clips accordion oin the right next to the player. If it is enabled, the related clips will be shown automatically. If disabled you would need to manually open the accordion to display them.

    -

    Marker Colour -

    Change the colour of your markers, this only really applies to the Review section.

    -

    Receive Admin Emails -

    If you are set as a production owner, this enables/disables the email updates.

    - -
    -
    - - -
    -
    -
    - -
    -
    © 2024 Joshua Kirkcaldy
    -
    -
    -
    - - - - - - - - - - diff --git a/isableFastRender/user_docs/watching-clips/watch/index.html b/isableFastRender/user_docs/watching-clips/watch/index.html deleted file mode 100644 index abd73b9..0000000 --- a/isableFastRender/user_docs/watching-clips/watch/index.html +++ /dev/null @@ -1,707 +0,0 @@ - - - - - - - - - - - - - - Watching clips – Glympse - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - -
    -
    - -
    - -
    Watching clips
    -
    - -
    -

    Watching clips

    -

    Watch Clips -This is where you will watch through the clips in Glympse.

    -

    When the page loads, it will automatically load the first clip into the player. To start playing you can press the big play button in the centre.

    -

    The video Player -

    Timecode -

    Glympse uses the timecode from the media files. This is so that it matches the timecode that your editor sees within Avid or their NLE of choice.

    -

    It is possible that the timecode in Glympse may be a frame off, this is because the timecodes must be calculated rather than read from the file. It will never be more that one frame off the timecode in the NLE.

    -

    The timecode of the clip is displayed in two places. The seek bar: -Timecode 1

    -

    And there is a timecode box in the top left: -Timecode 2

    -

    This timecode box can be moved anywhere in the player window by dragging it to where you’d like it to be. You can reset the position of the timecode or disable the timecode box using the user settings menu.

    -

    It is possible to navigate to a specific timecode by simply entering it whilst the page is active.

    -

    If the timecode you want to go to is 10:03:05:00 pressing the 1 key will bring up the timecode navigation window. From there enter the rest of the timecode with no spaces or other punctuation. So you would enter: 10030500 and press enter. This will navigate to that timecode in the file.

    -

    Audio Selection -

    For clips that have more than one track of audio, you can select the track to play back by clicking on the headphone icon on the playbar and selecting the audio track. Glympse by default creates a full mix of all the audio channels and plays this by default. -Audio Tracks

    -

    Theatre Mode -

    Theatre Mode -Clicking the theatre mode button will expand the player to take 100% the width of the browser window. Clicking the theatre mode button again will return the player back to its normal size.

    -

    Full Screen -

    Click this button for full screen playback -Full Screen

    -

    Rotate -

    Some clips like GoPro files can be the wrong orientation. Click the rotate button to rotate the clip by 180° -Rotate

    -

    Click the restore rotate to return the clip to its original orientation. -Restore Rotate

    -

    Keyboard shortcuts -

    When on this page there are a number of keyboard shortcuts you can use. -J, K, L are shuttle controls to speed up or change the direction of play. You may have to click in the player window to enable these controls. Holding the Shift Key will also increase the amount the play is sped up or slowed down.

    -

    M will add a marker at the current time of the clip. Markers will appear for everyone who has access to the production.

    -

    Selecting Clips -

    You can select the clip you’d like to view from the table at the bottom of the screen. Click the title of the clip to load it into the player.

    -

    You can also navigate through the clips by pressing the Next/Prev buttons at the bottom of the player. This will load the next or previous clip.

    -

    The title of the currently playing clip is shown at the bottom of the player and the middle of the menu bar at the top.

    -

    Related Clips -

    When clips are loaded into Glympse, the system will scan for the start timecode and the end timecode of a clip. This allows it to show all the related clips of the clip you are playing. The related clips box onthe right of the player will update whenever the source of the video player changes. You can automatically hide or show the related clips dropdown using the user settings menu.

    -

    In this example the clip being played belongs to the Main camera and there are two GoPro cameras that have clips with overlapping timecodes.

    -

    Related

    -

    Clicking on the title of these related clips will play it in the current page, allowing you to quickly view clips from the other cameras. When you’re viewing a related clip, the title in the menu bar and below the player will change showing you that it’s playing a related clip then it will list the card followed by the clip title. -Related -As well as this, the prev/next buttons will disappear from below the player. You can select the next related clip by clicking on the clip title or you can return to the original clip by selecting it in the table at the bottom again. This will re-enable the next prev buttons and you can resume watching the camera clips as normal.

    -

    You can also navigate to any related cards from the related menu in the manu bar. This will show you camera cards from the same camera operator shot on the same day.

    -

    Markers and Tags -

    You can add markers or tags to any clip within Glympse.

    -

    Markers -

    Markers allow you to mark a specific place in a clip. They will be displayed in the marker window next to the player and clicking on them will take you to the correct position in the clip.

    -

    Markers are shown to everyone who has access to the clip.

    -

    Tags -

    Tags are to tag an entire clip. You can tag more than one clip at a time. There is also a setting in the user settings menu that will automatically add the tags to any related clips.

    -

    Tags are available to everyone who has access to the clips.

    -

    Menu Bar -

    Menu -The menu bar may show different options depending on what permissions you have. For example, the Download button will only appear if you have been give download permission for your production.

    -

    File -

    From the file menu you can send a clip to be transcribed, edit the metadata of the card, submit the card for re-transcode or report issues with the card.

    -

    Transcribe -

    Select the clip or clips you would like to transcribe by checking the box in the table and click file then transcribe. This will send the selected clip(s) to the transcription engine. You can learn more about how this works here.

    -

    Edit metadata -

    From this menu you can change some of the metadata for the card. Anything you change here will be applied to every clip in the card.

    -

    You can change the date, the card name, or the shooter. You can also hide the card which will stop it from showing on the rushes page. Anyone with a link to the card would still be able to access the clips. This will only stop the card from appearing in the rushes page. Users with access to the production can also unhide any card from the metadata edit pages.

    -

    Request Retranscode -

    This will send the entire card back through the transcode engine. It allows you to report any issues with the card and manually submit the clips to the transcoder. The transcode will only work if the original clips are still available.

    -

    Report Issues -

    This allows you to report issues with the current card. But this option will not automatically retranscode the clips. They would need to be manually transcoded by the admin team.

    -

    Related -

    This will show any cards that were shot by the same camera operator on the same day as the current card. Clicking one of these will take you load that current card.

    -

    Download -

    If you have been given the download permissions for your production, you can download the original clip by selecting the clips from the table with the checkbox and clicking download. These files can be very large and may take a long time to download.

    -

    Help -

    This will open these help pages.

    -

    Settings -

    This will open the user settings menu. Click here to learn more.

    -

    In the centre of the menu bar, the title of the currently loaded clip will be displayed.

    - -
    -
    - - -
    -
    -
    - -
    -
    © 2024 Joshua Kirkcaldy
    -
    -
    -
    - - - - - - - - - - diff --git a/static/images/select_transcribe.png b/static/images/select_transcribe.png new file mode 100644 index 0000000..68acc3f Binary files /dev/null and b/static/images/select_transcribe.png differ diff --git a/static/images/transcribe_menu.png b/static/images/transcribe_menu.png new file mode 100644 index 0000000..a7c94b7 Binary files /dev/null and b/static/images/transcribe_menu.png differ diff --git a/static/images/transcript_options.png b/static/images/transcript_options.png new file mode 100644 index 0000000..965ec39 Binary files /dev/null and b/static/images/transcript_options.png differ diff --git a/static/images/transcript_upload_options.png b/static/images/transcript_upload_options.png new file mode 100644 index 0000000..9cfce90 Binary files /dev/null and b/static/images/transcript_upload_options.png differ diff --git a/static/images/upload_transcript.png b/static/images/upload_transcript.png new file mode 100644 index 0000000..84ffe73 Binary files /dev/null and b/static/images/upload_transcript.png differ