From a04ab3daf30a228bea5b7ce7bfb309e7f2fbd5a9 Mon Sep 17 00:00:00 2001 From: Harpo Date: Thu, 18 Feb 2021 12:44:34 -0800 Subject: [PATCH 01/40] added basic magnussens form, front end only --- website/src/Form.js | 42 ++++++++++++++++++++++++++++++++++++++++++ website/src/Menu.js | 1 + website/src/index.js | 4 +++- 3 files changed, 46 insertions(+), 1 deletion(-) diff --git a/website/src/Form.js b/website/src/Form.js index 1da947d4..52553806 100644 --- a/website/src/Form.js +++ b/website/src/Form.js @@ -183,6 +183,48 @@ export function Form() { } } } +export function TextBox() { + return { + view: vnode => { + return [ + m('label.formlabel', {for: vnode.attrs.name}, vnode.attrs.name), + m('textarea', vnode.attrs), + m('br') + ] + } + } +} + +export function Magnussens() { + return { + view: (vnode) => { + return [ + m(Menu), + m('form#MagnussensForm', {}, [ + m(TextBox, { name: 'Car name' }), + m(TextBox, { name: 'Offer info' }, 'Offer info'), + m(TextBox, { name: 'Legal text' }, 'Legal text'), + m('input.button', {type: 'submit', name: 'save', value: 'render', + onclick: e => { + e.preventDefault() + let form = new FormData(document.getElementById('MagnussensForm')) + console.log('saving form', e, form) + message('rendering!') + m.request('/save', { + method: 'post', + params: { + project: 'Magnussens' + }, + body: form + }).then(e => { + // message('rendering!') + }) + }, + },), + ])] + } + } +} export function FormPage() { return { diff --git a/website/src/Menu.js b/website/src/Menu.js index bef1265d..0b9eb3b5 100644 --- a/website/src/Menu.js +++ b/website/src/Menu.js @@ -49,5 +49,6 @@ function Links() { } } }, User.username ? 'logout' : 'login'), + m(Link, {href:'/magnussens', id: 'magnussens-link'}, 'Magnussens'), ]}}} export { Menu, Links, Link } diff --git a/website/src/index.js b/website/src/index.js index 5a742a1b..dcc91845 100644 --- a/website/src/index.js +++ b/website/src/index.js @@ -19,11 +19,12 @@ import { Import } from './Import' import { Renders } from './Renders' import { OttoTimeline } from './OttoTimeline' import { Preview } from './Preview' -import { FormPage } from './Form' +import { FormPage, Magnussens} from './Form' import { Timecode } from './Timecode' import { Head } from './Head' import { Resolution, Aspect } from './Resolution' + var state = require("./Globals").state defaults.transition = "zoom" @@ -107,4 +108,5 @@ m.route(document.body, "/", { '/renders': Renders, '/login': Login, '/form': FormPage, + '/magnussens': Magnussens, } ); From 728a6faff6a836e73cd5588682661d8cd5ec0b23 Mon Sep 17 00:00:00 2001 From: Harpo Date: Fri, 19 Feb 2021 10:25:31 -0800 Subject: [PATCH 02/40] added alfred logo! --- website/src/al.svg | 90 ++++++++++++++++++++++++++++++++++++++++++ website/src/index.html | 1 + 2 files changed, 91 insertions(+) create mode 100644 website/src/al.svg diff --git a/website/src/al.svg b/website/src/al.svg new file mode 100644 index 00000000..1033ced5 --- /dev/null +++ b/website/src/al.svg @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/website/src/index.html b/website/src/index.html index bc10cb42..0611a3c5 100644 --- a/website/src/index.html +++ b/website/src/index.html @@ -2,6 +2,7 @@ + From c1be52009c238ccd7651319c8702cdd516e75c3c Mon Sep 17 00:00:00 2001 From: Harpo Date: Fri, 19 Feb 2021 10:53:16 -0800 Subject: [PATCH 03/40] added logo to menu! --- website/src/Menu.js | 2 +- website/src/al-white.svg | 90 ++++++++++++++++++++++++++++++++++++++++ website/src/al.svg | 12 +++--- website/src/style.css | 3 ++ 4 files changed, 100 insertions(+), 7 deletions(-) create mode 100644 website/src/al-white.svg diff --git a/website/src/Menu.js b/website/src/Menu.js index 0b9eb3b5..8efa4864 100644 --- a/website/src/Menu.js +++ b/website/src/Menu.js @@ -16,7 +16,7 @@ function Menu() { m('i.material-icons', {onclick: toggle}, 'close'), m(Links), ]), - m('i.material-icons', {onclick: toggle, style: {display: open ? 'none' : '' }}, 'menu'), + m('img.logo', {src: 'al-white.svg', onclick: toggle, style: {display: open ? 'none' : '' }}), ] } } diff --git a/website/src/al-white.svg b/website/src/al-white.svg new file mode 100644 index 00000000..8f57d372 --- /dev/null +++ b/website/src/al-white.svg @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/website/src/al.svg b/website/src/al.svg index 1033ced5..61f6a29d 100644 --- a/website/src/al.svg +++ b/website/src/al.svg @@ -52,9 +52,9 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="0.35" - inkscape:cx="400" - inkscape:cy="560" + inkscape:zoom="0.49497475" + inkscape:cx="812.25712" + inkscape:cy="482.30891" inkscape:document-units="mm" inkscape:current-layer="layer1" inkscape:document-rotation="0" @@ -73,7 +73,7 @@ image/svg+xml - + @@ -82,8 +82,8 @@ inkscape:groupmode="layer" id="layer1"> diff --git a/website/src/style.css b/website/src/style.css index 227928de..8f250edb 100644 --- a/website/src/style.css +++ b/website/src/style.css @@ -442,3 +442,6 @@ form select { .right { float: right; } + .logo { + width: 3em; + } From d3aefb95a5a01f31bfbdcb032e510a46238144a3 Mon Sep 17 00:00:00 2001 From: Harpo Date: Fri, 19 Feb 2021 13:07:45 -0800 Subject: [PATCH 04/40] updated render function to use renderMultitrack --- api/tasks.py | 4 ++-- website/src/Menu.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/api/tasks.py b/api/tasks.py index 22042e47..d8c369b2 100644 --- a/api/tasks.py +++ b/api/tasks.py @@ -1,5 +1,5 @@ from celery import Celery -from otto.render import renderEdl +from otto.render import renderMultitrack import config from logger import CeleryLogger from os.path import join @@ -11,6 +11,6 @@ @renderer.task(bind=True) def renderRemote(self, edl, media, audio, filename, moviesize): log = CeleryLogger(self) - renderEdl(edl, media, audio, join('videos', filename), moviesize, log) + renderMultitrack(edl, media, audio, join('videos', filename), moviesize, log) upload(filename, directory='videos') self.update_state(state='PROGRESS', meta={'status': 'uploaded'}) diff --git a/website/src/Menu.js b/website/src/Menu.js index 8efa4864..12732ae2 100644 --- a/website/src/Menu.js +++ b/website/src/Menu.js @@ -16,7 +16,7 @@ function Menu() { m('i.material-icons', {onclick: toggle}, 'close'), m(Links), ]), - m('img.logo', {src: 'al-white.svg', onclick: toggle, style: {display: open ? 'none' : '' }}), + m('img.logo', {src: '/al-white.svg', onclick: toggle, style: {display: open ? 'none' : '' }}), ] } } From 4582b77a3df157f77d2efc7f325854a747086273 Mon Sep 17 00:00:00 2001 From: Harpo Date: Fri, 19 Feb 2021 13:18:43 -0800 Subject: [PATCH 05/40] split magnussens into own file --- website/src/Form.js | 42 --------------------------- website/src/Magnussens.js | 61 +++++++++++++++++++++++++++++++++++++++ website/src/index.js | 3 +- 3 files changed, 63 insertions(+), 43 deletions(-) create mode 100644 website/src/Magnussens.js diff --git a/website/src/Form.js b/website/src/Form.js index 52553806..1da947d4 100644 --- a/website/src/Form.js +++ b/website/src/Form.js @@ -183,48 +183,6 @@ export function Form() { } } } -export function TextBox() { - return { - view: vnode => { - return [ - m('label.formlabel', {for: vnode.attrs.name}, vnode.attrs.name), - m('textarea', vnode.attrs), - m('br') - ] - } - } -} - -export function Magnussens() { - return { - view: (vnode) => { - return [ - m(Menu), - m('form#MagnussensForm', {}, [ - m(TextBox, { name: 'Car name' }), - m(TextBox, { name: 'Offer info' }, 'Offer info'), - m(TextBox, { name: 'Legal text' }, 'Legal text'), - m('input.button', {type: 'submit', name: 'save', value: 'render', - onclick: e => { - e.preventDefault() - let form = new FormData(document.getElementById('MagnussensForm')) - console.log('saving form', e, form) - message('rendering!') - m.request('/save', { - method: 'post', - params: { - project: 'Magnussens' - }, - body: form - }).then(e => { - // message('rendering!') - }) - }, - },), - ])] - } - } -} export function FormPage() { return { diff --git a/website/src/Magnussens.js b/website/src/Magnussens.js new file mode 100644 index 00000000..73e1b8cb --- /dev/null +++ b/website/src/Magnussens.js @@ -0,0 +1,61 @@ +import m from 'mithril' +import { Menu } from './Menu' +import { success, error, message } from 'alertifyjs' + +export function Form() { + return { + view: vnode => { + return m('form', vnode.attrs, vnode.children) + } + } +} + +export function TextBox() { + return { + view: vnode => { + return [ + m('label.formlabel', {for: vnode.attrs.name}, vnode.attrs.name), + m('textarea', vnode.attrs), + m('br') + ] + } + } +} +export function Button() { + return { + view: vnode => { + return m('input.button', {type: 'submit', ...vnode.attrs}, vnode.children) + } + } +} + +export function Magnussens() { + return { + view: (vnode) => { + return [ + m(Menu), + m(Form, {id: 'MagnussensForm'}, [ + m(TextBox, { name: 'Car name' }), + m(TextBox, { name: 'Offer info' }), + m(TextBox, { name: 'Legal text' }), + m(Button, { name: 'save', value: 'render', + onclick: e => { + e.preventDefault() + let form = new FormData(document.getElementById('MagnussensForm')) + console.log('saving form', e, form) + message('rendering!') + m.request('/save', { + method: 'post', + params: { + project: 'Magnussens' + }, + body: form + }).then(e => { + // message('rendering!') + }) + }, + },), + ])] + } + } +} \ No newline at end of file diff --git a/website/src/index.js b/website/src/index.js index dcc91845..2dc322a6 100644 --- a/website/src/index.js +++ b/website/src/index.js @@ -19,10 +19,11 @@ import { Import } from './Import' import { Renders } from './Renders' import { OttoTimeline } from './OttoTimeline' import { Preview } from './Preview' -import { FormPage, Magnussens} from './Form' +import { FormPage } from './Form' import { Timecode } from './Timecode' import { Head } from './Head' import { Resolution, Aspect } from './Resolution' +import { Magnussens } from './Magnussens' var state = require("./Globals").state From 4a02292e4dc5f6e2e6f72c3b0f3154ca892ba785 Mon Sep 17 00:00:00 2001 From: Harpo Date: Fri, 19 Feb 2021 18:58:10 -0800 Subject: [PATCH 06/40] upgrade otto, update docker image --- api/Dockerfile | 2 ++ api/otto | 2 +- api/requirements.txt | 2 ++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/api/Dockerfile b/api/Dockerfile index 80ac2430..83112a6b 100644 --- a/api/Dockerfile +++ b/api/Dockerfile @@ -11,7 +11,9 @@ RUN apk add g++ wget libffi-dev openssl-dev jpeg-dev cairo cairo-dev imagemagick COPY requirements.txt / RUN pip install -Ur /requirements.txt +COPY otto/requirements.txt / RUN pip install numpy gizeh pillow +RUN pip install -Ur /requirements.txt RUN pip install celery google-cloud-storage RUN pip uninstall amqplib RUN pip install librabbitmq diff --git a/api/otto b/api/otto index fd7ab944..ce3000c6 160000 --- a/api/otto +++ b/api/otto @@ -1 +1 @@ -Subproject commit fd7ab9447cd06ef5359bca3fb42d64d3b5e79794 +Subproject commit ce3000c6b267b75135b3a544105bba7932a0ad8e diff --git a/api/requirements.txt b/api/requirements.txt index 7a725bd9..bb8912cf 100644 --- a/api/requirements.txt +++ b/api/requirements.txt @@ -6,3 +6,5 @@ tinydb pyjwt passlib[bcrypt] pymongo +celery +google-cloud-storage \ No newline at end of file From c5849fdcccf41e5696ff6667237ac2c42acc7bff Mon Sep 17 00:00:00 2001 From: Harpo Date: Fri, 19 Feb 2021 18:59:43 -0800 Subject: [PATCH 07/40] breaking change: remove media field from api render call --- api/main.py | 17 ++++++++--------- api/tasks.py | 4 ++-- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/api/main.py b/api/main.py index 4b9d11da..698733f5 100644 --- a/api/main.py +++ b/api/main.py @@ -123,27 +123,26 @@ async def download_file(filename: str): @app.post('/render') -async def queueRender(prog: BackgroundTasks, edl: Edl, project: str, width: int = 1920, height: int = 1080): +async def queueRender(prog: BackgroundTasks, project: str, width: int = 1920, height: int = 1080, edl: Edl = Body(...)): ts = timestr() - duration = sum(c['duration'] for c in edl.edl) + duration = int(edl.time) filename = f'{project}_{width}x{height}_{duration}s_{ts}.mp4' - media = db.projects.find_one({'name': project}, ['form'])['form']['media'] - id = db.renders.insert_one({ + render = { 'project': project, 'filename': filename, 'duration': duration, 'resolution': (width, height), - 'media': media, 'edl': edl.edl, 'progress': 0, 'started': ts, 'link': join('https://storage.googleapis.com/', BUCKET_NAME, filename), } - ).inserted_id + # media = db.projects.find_one({'name': project}, ['form'])['form']['media'] + id = db.renders.insert_one(render).inserted_id proj = db.projects.find_one({'name': project}, ['form'])['form'] - print('rendering!', filename, proj) - media = [ download(m) for m in proj['media'] ] - task = renderRemote.delay(edl=edl.edl, media=media, audio=download(proj['audio'][0]), filename=filename, moviesize=(width, height)) + print('rendering!', render) + # media = [ download(m) for m in proj['media'] ] + task = renderRemote.delay(edl=edl.edl, audio=download(proj['audio'][0]), filename=filename, moviesize=(width, height)) def updateRenderProgress(progress): r = progress.get('result') # print('updating progress', r) diff --git a/api/tasks.py b/api/tasks.py index d8c369b2..ced728eb 100644 --- a/api/tasks.py +++ b/api/tasks.py @@ -9,8 +9,8 @@ @renderer.task(bind=True) -def renderRemote(self, edl, media, audio, filename, moviesize): +def renderRemote(self, edl, audio, filename, moviesize): log = CeleryLogger(self) - renderMultitrack(edl, media, audio, join('videos', filename), moviesize, log) + renderMultitrack(edl, audio, join('videos', filename), moviesize, log) upload(filename, directory='videos') self.update_state(state='PROGRESS', meta={'status': 'uploaded'}) From b2905e9b531ae6438c0b0a5aeba6a26915acfc88 Mon Sep 17 00:00:00 2001 From: Harpo Date: Fri, 19 Feb 2021 19:00:10 -0800 Subject: [PATCH 08/40] buildEdl in js after form submit --- website/src/Magnussens.js | 38 +++++++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/website/src/Magnussens.js b/website/src/Magnussens.js index 73e1b8cb..828c8c8a 100644 --- a/website/src/Magnussens.js +++ b/website/src/Magnussens.js @@ -42,20 +42,48 @@ export function Magnussens() { onclick: e => { e.preventDefault() let form = new FormData(document.getElementById('MagnussensForm')) - console.log('saving form', e, form) - message('rendering!') - m.request('/save', { + // form.forEach(f => {console.log('field', f.name, f)}) + message('assembling render') + let edl = buildEdl(form.get('Car name'), form.get('Offer info'), form.get('Legal text')) + console.log('saving form', e, edl, form) + + + m.request('/render', { method: 'post', params: { project: 'Magnussens' }, - body: form + body: edl }).then(e => { - // message('rendering!') + success('Rendering!') }) }, },), ])] } } +} + +function buildEdl(car, offer, legal) { + return { + time: 30, + edl: [ + { + type: 'video', + name: 'https://storage.googleapis.com/tower-bucket/alfred/car/Magnussens%20(check%20out%20offer).mp4', + duration: 30, + start: 0, + }, + { + type: 'template', + name: 'title', + duration: 6, + start: 17.5, + data: { + text: car, + clipsize: [1280,720], + }, + } + ] + } } \ No newline at end of file From 3fda94ef8e47fee5861189c78267d8da93bcdc63 Mon Sep 17 00:00:00 2001 From: Harpo Date: Fri, 19 Feb 2021 19:44:47 -0800 Subject: [PATCH 09/40] added offer and legal templates --- website/src/Magnussens.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/website/src/Magnussens.js b/website/src/Magnussens.js index 828c8c8a..0a6dff43 100644 --- a/website/src/Magnussens.js +++ b/website/src/Magnussens.js @@ -82,6 +82,28 @@ function buildEdl(car, offer, legal) { data: { text: car, clipsize: [1280,720], + position: 'top' + }, + }, + { + type: 'template', + name: 'initial', + duration: 6, + start: 17.5, + data: { + text: offer, + clipsize: [1280,720], + }, + }, + { + type: 'template', + name: 'initial', + duration: 6, + start: 17.5, + data: { + text: legal, + clipsize: [1280,720], + position: 'bottom' }, } ] From d75ea8352f9103a34ad1b3424172768f3696c971 Mon Sep 17 00:00:00 2001 From: Harpo Date: Fri, 19 Feb 2021 19:45:07 -0800 Subject: [PATCH 10/40] reroute to /renders after render button --- website/src/Magnussens.js | 1 + 1 file changed, 1 insertion(+) diff --git a/website/src/Magnussens.js b/website/src/Magnussens.js index 0a6dff43..ea0cefe4 100644 --- a/website/src/Magnussens.js +++ b/website/src/Magnussens.js @@ -56,6 +56,7 @@ export function Magnussens() { body: edl }).then(e => { success('Rendering!') + m.route.set('/renders') }) }, },), From 8626fdaa7149f292341609a938f7beb2f5681296 Mon Sep 17 00:00:00 2001 From: Harpo Date: Sat, 20 Feb 2021 09:46:52 -0800 Subject: [PATCH 11/40] updated edl.time to edl.duration --- api/main.py | 5 ++--- api/otto | 2 +- website/src/Magnussens.js | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/api/main.py b/api/main.py index 698733f5..d945ec41 100644 --- a/api/main.py +++ b/api/main.py @@ -125,12 +125,11 @@ async def download_file(filename: str): @app.post('/render') async def queueRender(prog: BackgroundTasks, project: str, width: int = 1920, height: int = 1080, edl: Edl = Body(...)): ts = timestr() - duration = int(edl.time) - filename = f'{project}_{width}x{height}_{duration}s_{ts}.mp4' + filename = f'{project}_{width}x{height}_{edl.duration}s_{ts}.mp4' render = { 'project': project, 'filename': filename, - 'duration': duration, + 'duration': edl.duration, 'resolution': (width, height), 'edl': edl.edl, 'progress': 0, diff --git a/api/otto b/api/otto index ce3000c6..567c7691 160000 --- a/api/otto +++ b/api/otto @@ -1 +1 @@ -Subproject commit ce3000c6b267b75135b3a544105bba7932a0ad8e +Subproject commit 567c769174cca93e2edd17692fc8c5ccdd54c09e diff --git a/website/src/Magnussens.js b/website/src/Magnussens.js index ea0cefe4..1d18f923 100644 --- a/website/src/Magnussens.js +++ b/website/src/Magnussens.js @@ -67,7 +67,7 @@ export function Magnussens() { function buildEdl(car, offer, legal) { return { - time: 30, + duration: 30, edl: [ { type: 'video', From 3a5da25f7335608edd307c63512536a5bad01e61 Mon Sep 17 00:00:00 2001 From: Harpo Date: Sat, 20 Feb 2021 15:22:44 -0800 Subject: [PATCH 12/40] added ./alfred reload to restart otto image --- alfred | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/alfred b/alfred index 9b4dace6..75e74ad9 100755 --- a/alfred +++ b/alfred @@ -96,4 +96,9 @@ elif [ $1 = "restore" ]; then docker container cp $1 alfred_db_1:/$1 docker-compose exec db sh -c "mongorestore --gzip --db alfred --archive=/$1 --drop" +elif [ $1 = "reload" ]; then + shift + # reload otto + docker-compose -f docker-compose.yml -f dev.yml up -d --build api + fi From 6f3b6b56a98109d14496a1196319d0336601e69e Mon Sep 17 00:00:00 2001 From: Harpo Date: Sat, 20 Feb 2021 15:49:57 -0800 Subject: [PATCH 13/40] reworked layout to copy from magnus --- website/src/Magnussens.js | 61 +++++++++++++++++++++++++++++++++++---- website/src/index.js | 4 +-- 2 files changed, 58 insertions(+), 7 deletions(-) diff --git a/website/src/Magnussens.js b/website/src/Magnussens.js index 1d18f923..62f7d6eb 100644 --- a/website/src/Magnussens.js +++ b/website/src/Magnussens.js @@ -24,21 +24,49 @@ export function TextBox() { export function Button() { return { view: vnode => { - return m('input.button', {type: 'submit', ...vnode.attrs}, vnode.children) + return m('input.button', vnode.attrs, vnode.children) + } + } +} + +export function Img() { + return { + view: vnode => { + return m('img', vnode.attrs, vnode.children) } } } export function Magnussens() { + let preview return { view: (vnode) => { return [ - m(Menu), - m(Form, {id: 'MagnussensForm'}, [ + m(Form, {id: 'MagnussensForm'}, [ m(TextBox, { name: 'Car name' }), m(TextBox, { name: 'Offer info' }), m(TextBox, { name: 'Legal text' }), - m(Button, { name: 'save', value: 'render', + m(Button, { name: 'preview', value: 'preview', onclick: e => { + let form = new FormData(document.getElementById('MagnussensForm')) + let edl = buildEdl(form.get('Car name'), form.get('Offer info'), form.get('Legal text')) + console.log('previewing ', edl, vnode.dom) + m.request('/otto/preview', { + params: { + t: 20, + // width: window.innerWidth, + // height: Math.floor(window.innerWidth*9/16) + }, + method: 'post', + body: edl, + }).then(res => { + console.log('preview available at', res) + preview = res + m.redraw() + }).catch(e => { + console.log('error previewing', e) + }) + }},), + m(Button, { name: 'save', type: 'submit', value: 'render', onclick: e => { e.preventDefault() let form = new FormData(document.getElementById('MagnussensForm')) @@ -57,10 +85,33 @@ export function Magnussens() { }).then(e => { success('Rendering!') m.route.set('/renders') + }).catch(e => { + console.log('error rendering', e) }) }, },), - ])] + m(Img, {src: preview, class: 'preview'}) + ]), + ] + } + } +} + +export function Section() { + return { + view: vnode => { + return m('section', vnode.attrs, vnode.children) + } + } +} + +export function Layout() { + return { + view: vnode => { + return [ + m(Menu), + m(Section, vnode.attrs, vnode.children) + ] } } } diff --git a/website/src/index.js b/website/src/index.js index 2dc322a6..8461da1d 100644 --- a/website/src/index.js +++ b/website/src/index.js @@ -23,7 +23,7 @@ import { FormPage } from './Form' import { Timecode } from './Timecode' import { Head } from './Head' import { Resolution, Aspect } from './Resolution' -import { Magnussens } from './Magnussens' +import { Magnussens, Layout } from './Magnussens' var state = require("./Globals").state @@ -109,5 +109,5 @@ m.route(document.body, "/", { '/renders': Renders, '/login': Login, '/form': FormPage, - '/magnussens': Magnussens, + '/magnussens': { render: () => m(Layout, m(Magnussens))}, } ); From aac7be24a40fa15920cac78cb9c14f3e850856f7 Mon Sep 17 00:00:00 2001 From: Harpo Date: Sat, 20 Feb 2021 15:50:27 -0800 Subject: [PATCH 14/40] working template preview and render for Magnussens!!! --- api/otto | 2 +- website/src/Magnussens.js | 53 +++++++++++++++++++++++++++++---------- 2 files changed, 41 insertions(+), 14 deletions(-) diff --git a/api/otto b/api/otto index 567c7691..315c8c1e 160000 --- a/api/otto +++ b/api/otto @@ -1 +1 @@ -Subproject commit 567c769174cca93e2edd17692fc8c5ccdd54c09e +Subproject commit 315c8c1e8cd8bb5059b982ae117957b8e185c5bb diff --git a/website/src/Magnussens.js b/website/src/Magnussens.js index 62f7d6eb..73de62b6 100644 --- a/website/src/Magnussens.js +++ b/website/src/Magnussens.js @@ -117,6 +117,8 @@ export function Layout() { } function buildEdl(car, offer, legal) { + let start = 17.5 + let duration = 6.2 return { duration: 30, edl: [ @@ -126,36 +128,61 @@ function buildEdl(car, offer, legal) { duration: 30, start: 0, }, + { + type: 'template', + name: 'makeColor', + duration: duration, + start: start, + data: { + size: [1920,1080], + color: [255,255,255], + opacity: 1, + } + }, { type: 'template', name: 'title', - duration: 6, - start: 17.5, + duration: duration, + start: start, data: { text: car, - clipsize: [1280,720], - position: 'top' + color: '#FF0000', + textsize: [1280,320], + fontsize: 100, + position: 'top', + opacity: 1, }, }, { type: 'template', - name: 'initial', - duration: 6, - start: 17.5, + name: 'textBox', + duration: duration, + start: start, data: { + color: '#000000', text: offer, - clipsize: [1280,720], + textsize: [1600,720], + fontsize: 50, + opacity: 1, + position: 'center', + align: 'west', + // duration: duration, }, }, { type: 'template', - name: 'initial', - duration: 6, - start: 17.5, + name: 'textBox', + duration: duration, + start: start, data: { + color: '#555555', text: legal, - clipsize: [1280,720], - position: 'bottom' + textsize: [1800,400], + fontsize: 25, + position: 'bottom', + align: 'west', + opacity: 1, + // duration: duration, }, } ] From f0fc3e556c61b20e679b2fc62aa10f1cb3494650 Mon Sep 17 00:00:00 2001 From: Harpo Date: Sun, 21 Feb 2021 15:02:09 -0800 Subject: [PATCH 15/40] working celery worker for prod! --- alfred | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/alfred b/alfred index 75e74ad9..d24370dd 100755 --- a/alfred +++ b/alfred @@ -82,7 +82,9 @@ elif [ $1 = "log" -o $1 = "logs" -o $1 = "l" ]; then elif [ $1 = "worker" -o $1 = "w" ]; then shift - celery worker --workdir api -A tasks:renderer -l debug -b pyamqp://192.168.192.13 --result-backend rpc:// + # . operator used in place of source + . ./.cred + celery -A tasks:renderer --workdir api/ -b pyamqp://192.168.192.52 --result-backend rpc:// worker elif [ $1 = "dump" ]; then shift From eda90251f523abcb50716212c9048b6a6c30b341 Mon Sep 17 00:00:00 2001 From: Harpo Date: Sun, 21 Feb 2021 20:10:22 -0800 Subject: [PATCH 16/40] partially working bezier fly in fx! --- api/otto | 2 +- website/src/Magnussens.js | 36 +++++++++++++++++++++++++----------- 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/api/otto b/api/otto index 315c8c1e..b2a43ec2 160000 --- a/api/otto +++ b/api/otto @@ -1 +1 @@ -Subproject commit 315c8c1e8cd8bb5059b982ae117957b8e185c5bb +Subproject commit b2a43ec257c604635c4e078d5d40b878c4d67609 diff --git a/website/src/Magnussens.js b/website/src/Magnussens.js index 73de62b6..70a9f18f 100644 --- a/website/src/Magnussens.js +++ b/website/src/Magnussens.js @@ -52,7 +52,7 @@ export function Magnussens() { console.log('previewing ', edl, vnode.dom) m.request('/otto/preview', { params: { - t: 20, + t: .5, // width: window.innerWidth, // height: Math.floor(window.innerWidth*9/16) }, @@ -117,17 +117,20 @@ export function Layout() { } function buildEdl(car, offer, legal) { - let start = 17.5 - let duration = 6.2 + // let start = 17.2 + // let duration = 7 + let start = 0 + let duration = 5 return { - duration: 30, + // duration: 30, + duration: 5, edl: [ - { - type: 'video', - name: 'https://storage.googleapis.com/tower-bucket/alfred/car/Magnussens%20(check%20out%20offer).mp4', - duration: 30, - start: 0, - }, + // { + // type: 'video', + // name: 'https://storage.googleapis.com/tower-bucket/alfred/car/Magnussens%20(check%20out%20offer).mp4', + // duration: 30, + // start: 0, + // }, { type: 'template', name: 'makeColor', @@ -141,7 +144,7 @@ function buildEdl(car, offer, legal) { }, { type: 'template', - name: 'title', + name: 'textBox', duration: duration, start: start, data: { @@ -151,6 +154,17 @@ function buildEdl(car, offer, legal) { fontsize: 100, position: 'top', opacity: 1, + fxs: [{ + name: 'bezier2', + data: { + c1x: 1, + c1y: 0, + ax: 0, + ay: 0, + c2x: 0, + c2y: 1, + } + }] }, }, { From b7e50d1352bbc1bac813e671d4c8bdedc1d8878a Mon Sep 17 00:00:00 2001 From: Harpo Date: Mon, 22 Feb 2021 00:17:36 -0800 Subject: [PATCH 17/40] working Magnussens template renderer!!! --- api/otto | 2 +- website/src/Magnussens.js | 46 ++++++++++++++++++++++----------------- 2 files changed, 27 insertions(+), 21 deletions(-) diff --git a/api/otto b/api/otto index b2a43ec2..0daf481d 160000 --- a/api/otto +++ b/api/otto @@ -1 +1 @@ -Subproject commit b2a43ec257c604635c4e078d5d40b878c4d67609 +Subproject commit 0daf481da54cbe1749bf4d4282a1e455c66764b7 diff --git a/website/src/Magnussens.js b/website/src/Magnussens.js index 70a9f18f..66b4c8c3 100644 --- a/website/src/Magnussens.js +++ b/website/src/Magnussens.js @@ -52,7 +52,7 @@ export function Magnussens() { console.log('previewing ', edl, vnode.dom) m.request('/otto/preview', { params: { - t: .5, + t: 1, // width: window.innerWidth, // height: Math.floor(window.innerWidth*9/16) }, @@ -117,20 +117,18 @@ export function Layout() { } function buildEdl(car, offer, legal) { - // let start = 17.2 - // let duration = 7 - let start = 0 - let duration = 5 + let start = 17.2 + let duration = 7 return { - // duration: 30, + duration: 30, duration: 5, edl: [ - // { - // type: 'video', - // name: 'https://storage.googleapis.com/tower-bucket/alfred/car/Magnussens%20(check%20out%20offer).mp4', - // duration: 30, - // start: 0, - // }, + { + type: 'video', + name: 'https://storage.googleapis.com/tower-bucket/alfred/car/Magnussens%20(check%20out%20offer).mp4', + duration: 30, + start: 0, + }, { type: 'template', name: 'makeColor', @@ -149,10 +147,11 @@ function buildEdl(car, offer, legal) { start: start, data: { text: car, - color: '#FF0000', + color: '#EB0A1E', textsize: [1280,320], fontsize: 100, - position: 'top', + // position: [.8, .5], + position: ['center',150], opacity: 1, fxs: [{ name: 'bezier2', @@ -172,15 +171,15 @@ function buildEdl(car, offer, legal) { name: 'textBox', duration: duration, start: start, + position: [.5, .8 ], data: { - color: '#000000', + color: '#EB0A1E', text: offer, - textsize: [1600,720], + textsize: [1700,600], fontsize: 50, opacity: 1, position: 'center', align: 'west', - // duration: duration, }, }, { @@ -189,15 +188,22 @@ function buildEdl(car, offer, legal) { duration: duration, start: start, data: { - color: '#555555', + color: '#333333', text: legal, textsize: [1800,400], fontsize: 25, position: 'bottom', align: 'west', opacity: 1, - // duration: duration, - }, + } + }, + { + type: 'image', + name: 'https://storage.googleapis.com/tower-bucket/alfred/car/magnussens-screengrab%20logo-fixed-with-toyota.png', + position: ['center', 'top'], + resize: .4, + start: start, + duration: duration, } ] } From 17e4ab55606a7f5c029c5b50e5e12ce271f028bc Mon Sep 17 00:00:00 2001 From: Harpo Date: Mon, 22 Feb 2021 00:39:07 -0800 Subject: [PATCH 18/40] quick fix to not render video as part of preview --- api/otto | 2 +- website/src/Magnussens.js | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/api/otto b/api/otto index 0daf481d..8bc7fc42 160000 --- a/api/otto +++ b/api/otto @@ -1 +1 @@ -Subproject commit 0daf481da54cbe1749bf4d4282a1e455c66764b7 +Subproject commit 8bc7fc425db8cf08629eca3aed6c1ad190c22f66 diff --git a/website/src/Magnussens.js b/website/src/Magnussens.js index 66b4c8c3..7f455c47 100644 --- a/website/src/Magnussens.js +++ b/website/src/Magnussens.js @@ -49,12 +49,11 @@ export function Magnussens() { m(Button, { name: 'preview', value: 'preview', onclick: e => { let form = new FormData(document.getElementById('MagnussensForm')) let edl = buildEdl(form.get('Car name'), form.get('Offer info'), form.get('Legal text')) + edl.edl.shift() console.log('previewing ', edl, vnode.dom) m.request('/otto/preview', { - params: { + params: { t: 1, - // width: window.innerWidth, - // height: Math.floor(window.innerWidth*9/16) }, method: 'post', body: edl, @@ -121,7 +120,6 @@ function buildEdl(car, offer, legal) { let duration = 7 return { duration: 30, - duration: 5, edl: [ { type: 'video', From 844c300539f96e48960113c2399003acea850c4b Mon Sep 17 00:00:00 2001 From: Harpo Date: Thu, 25 Feb 2021 16:23:19 -0800 Subject: [PATCH 19/40] split form field name from text --- website/src/Magnussens.js | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/website/src/Magnussens.js b/website/src/Magnussens.js index 7f455c47..303a6ed5 100644 --- a/website/src/Magnussens.js +++ b/website/src/Magnussens.js @@ -14,7 +14,7 @@ export function TextBox() { return { view: vnode => { return [ - m('label.formlabel', {for: vnode.attrs.name}, vnode.attrs.name), + m('label.formlabel', {for: vnode.attrs.name}, vnode.attrs.text), m('textarea', vnode.attrs), m('br') ] @@ -42,10 +42,10 @@ export function Magnussens() { return { view: (vnode) => { return [ - m(Form, {id: 'MagnussensForm'}, [ - m(TextBox, { name: 'Car name' }), - m(TextBox, { name: 'Offer info' }), - m(TextBox, { name: 'Legal text' }), + m(Form, {id: 'MagnussensForm'}, [ + m(TextBox, { name: 'carname', text: 'Car Name' }), + m(TextBox, { name: 'offerinfo', text: 'Offer Info' }), + m(TextBox, { name: 'legaltext', text: 'Legal Text' }), m(Button, { name: 'preview', value: 'preview', onclick: e => { let form = new FormData(document.getElementById('MagnussensForm')) let edl = buildEdl(form.get('Car name'), form.get('Offer info'), form.get('Legal text')) @@ -71,8 +71,9 @@ export function Magnussens() { let form = new FormData(document.getElementById('MagnussensForm')) // form.forEach(f => {console.log('field', f.name, f)}) message('assembling render') - let edl = buildEdl(form.get('Car name'), form.get('Offer info'), form.get('Legal text')) - console.log('saving form', e, edl, form) + let data = Object.fromEntries(form.entries()) + let edl = buildEdl(data) + console.log('saving form', e, edl, data, data.carname) m.request('/render', { @@ -92,9 +93,9 @@ export function Magnussens() { m(Img, {src: preview, class: 'preview'}) ]), ] - } } } +} export function Section() { return { @@ -115,16 +116,16 @@ export function Layout() { } } -function buildEdl(car, offer, legal) { +function buildEdl(data) { let start = 17.2 let duration = 7 return { - duration: 30, + duration: data.duration, edl: [ { type: 'video', name: 'https://storage.googleapis.com/tower-bucket/alfred/car/Magnussens%20(check%20out%20offer).mp4', - duration: 30, + duration: data.duration, start: 0, }, { @@ -144,7 +145,7 @@ function buildEdl(car, offer, legal) { duration: duration, start: start, data: { - text: car, + text: data.carname, color: '#EB0A1E', textsize: [1280,320], fontsize: 100, @@ -172,7 +173,7 @@ function buildEdl(car, offer, legal) { position: [.5, .8 ], data: { color: '#EB0A1E', - text: offer, + text: data.offerinfo, textsize: [1700,600], fontsize: 50, opacity: 1, @@ -187,7 +188,7 @@ function buildEdl(car, offer, legal) { start: start, data: { color: '#333333', - text: legal, + text: data.legaltext, textsize: [1800,400], fontsize: 25, position: 'bottom', From edd16dd52cd6845961ce26acd8749cc6e99dfa44 Mon Sep 17 00:00:00 2001 From: Harpo Date: Thu, 25 Feb 2021 16:23:48 -0800 Subject: [PATCH 20/40] added Selector component and integrated with duration options --- website/src/Magnussens.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/website/src/Magnussens.js b/website/src/Magnussens.js index 303a6ed5..be32c7d2 100644 --- a/website/src/Magnussens.js +++ b/website/src/Magnussens.js @@ -37,12 +37,27 @@ export function Img() { } } +export function Selector() { + return { + view: vnode => { + return [ + m('label.formlabel', { for: vnode.attrs.name }, vnode.attrs.text), + m('select', vnode.attrs, vnode.children.map(c => { + return m('option', {value: c}, c) + })), + m('br'), + ] + } + } +} + export function Magnussens() { let preview return { view: (vnode) => { return [ m(Form, {id: 'MagnussensForm'}, [ + m(Selector, { name: 'duration', text: 'Duration' }, ['15', '30']), m(TextBox, { name: 'carname', text: 'Car Name' }), m(TextBox, { name: 'offerinfo', text: 'Offer Info' }), m(TextBox, { name: 'legaltext', text: 'Legal Text' }), From fa693fc8d2e40c7f72a61e014be24a096f600b61 Mon Sep 17 00:00:00 2001 From: Harpo Date: Fri, 26 Feb 2021 12:23:15 -0800 Subject: [PATCH 21/40] fixed preview with consistent parameter naming --- api/otto | 2 +- website/src/Magnussens.js | 15 ++++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/api/otto b/api/otto index 8bc7fc42..58db4988 160000 --- a/api/otto +++ b/api/otto @@ -1 +1 @@ -Subproject commit 8bc7fc425db8cf08629eca3aed6c1ad190c22f66 +Subproject commit 58db49884fb680feb699e875a722086d794b1d70 diff --git a/website/src/Magnussens.js b/website/src/Magnussens.js index be32c7d2..93e66ff0 100644 --- a/website/src/Magnussens.js +++ b/website/src/Magnussens.js @@ -57,18 +57,22 @@ export function Magnussens() { view: (vnode) => { return [ m(Form, {id: 'MagnussensForm'}, [ - m(Selector, { name: 'duration', text: 'Duration' }, ['15', '30']), + m(Selector, { name: 'duration', text: 'Duration', value: 30 }, ['15', '30']), m(TextBox, { name: 'carname', text: 'Car Name' }), m(TextBox, { name: 'offerinfo', text: 'Offer Info' }), m(TextBox, { name: 'legaltext', text: 'Legal Text' }), + m(Selector, { name: 'resolution', text: 'Resolution'}, ['1920x1080', '1280x720']), m(Button, { name: 'preview', value: 'preview', onclick: e => { let form = new FormData(document.getElementById('MagnussensForm')) - let edl = buildEdl(form.get('Car name'), form.get('Offer info'), form.get('Legal text')) + let data = Object.fromEntries(form.entries()) + let edl = buildEdl(data) edl.edl.shift() console.log('previewing ', edl, vnode.dom) m.request('/otto/preview', { params: { - t: 1, + t: 20, + width: data.resolution.split('x')[0], + height: data.resolution.split('x')[1] }, method: 'post', body: edl, @@ -94,7 +98,9 @@ export function Magnussens() { m.request('/render', { method: 'post', params: { - project: 'Magnussens' + project: 'Magnussens', + width: data.resolution.split('x')[0], + height: data.resolution.split('x')[1] }, body: edl }).then(e => { @@ -149,7 +155,6 @@ function buildEdl(data) { duration: duration, start: start, data: { - size: [1920,1080], color: [255,255,255], opacity: 1, } From 1109b5fcfdb67f352e3a6eefeb66e5c7e3e884d9 Mon Sep 17 00:00:00 2001 From: Harpo Date: Fri, 26 Feb 2021 13:28:57 -0800 Subject: [PATCH 22/40] quick fix for variable start and duration --- api/otto | 2 +- website/src/Magnussens.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/api/otto b/api/otto index 58db4988..7adec44a 160000 --- a/api/otto +++ b/api/otto @@ -1 +1 @@ -Subproject commit 58db49884fb680feb699e875a722086d794b1d70 +Subproject commit 7adec44a56d583a4fdd08cbfd16477edcb1a131a diff --git a/website/src/Magnussens.js b/website/src/Magnussens.js index 93e66ff0..8524a857 100644 --- a/website/src/Magnussens.js +++ b/website/src/Magnussens.js @@ -138,8 +138,8 @@ export function Layout() { } function buildEdl(data) { - let start = 17.2 - let duration = 7 + let start = data.duration == 15 ? 8 : 17.2 + let duration = data.duration == 15 ? 5 : 7 return { duration: data.duration, edl: [ From 10d0f7e1e0396218650dbed510702eba3acc431a Mon Sep 17 00:00:00 2001 From: Harpo Date: Fri, 26 Feb 2021 13:39:49 -0800 Subject: [PATCH 23/40] reuse ImagePreview component --- website/src/Magnussens.js | 3 ++- website/src/style.css | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/website/src/Magnussens.js b/website/src/Magnussens.js index 8524a857..7b01251a 100644 --- a/website/src/Magnussens.js +++ b/website/src/Magnussens.js @@ -1,6 +1,7 @@ import m from 'mithril' import { Menu } from './Menu' import { success, error, message } from 'alertifyjs' +import { ImagePreview } from './Preview' export function Form() { return { @@ -111,7 +112,7 @@ export function Magnussens() { }) }, },), - m(Img, {src: preview, class: 'preview'}) + m(ImagePreview, {src: preview,}) ]), ] } diff --git a/website/src/style.css b/website/src/style.css index 8f250edb..4c3e013e 100644 --- a/website/src/style.css +++ b/website/src/style.css @@ -25,7 +25,7 @@ body { } .preview { width: 100%; - height: 100%; + /* height: 100%; */ object-fit: contain; background-size: cover; } From 9b0bd16d178142b759713697d495be6fa55caefe Mon Sep 17 00:00:00 2001 From: Harpo Date: Fri, 26 Feb 2021 18:00:54 -0800 Subject: [PATCH 24/40] better formatting and arg passing into otto --- api/otto | 2 +- website/src/Magnussens.js | 192 ++++++++++++++++++++------------------ 2 files changed, 101 insertions(+), 93 deletions(-) diff --git a/api/otto b/api/otto index 7adec44a..5fe89491 160000 --- a/api/otto +++ b/api/otto @@ -1 +1 @@ -Subproject commit 7adec44a56d583a4fdd08cbfd16477edcb1a131a +Subproject commit 5fe8949152f746134011e6d710637ce8cae2884f diff --git a/website/src/Magnussens.js b/website/src/Magnussens.js index 7b01251a..3759e5b1 100644 --- a/website/src/Magnussens.js +++ b/website/src/Magnussens.js @@ -66,17 +66,19 @@ export function Magnussens() { m(Button, { name: 'preview', value: 'preview', onclick: e => { let form = new FormData(document.getElementById('MagnussensForm')) let data = Object.fromEntries(form.entries()) - let edl = buildEdl(data) - edl.edl.shift() + let width = data.resolution.split('x')[0] + let height = data.resolution.split('x')[1] + let edl = buildEdl(data, width, height) + edl.shift() console.log('previewing ', edl, vnode.dom) m.request('/otto/preview', { params: { - t: 20, + t: data.duration == 15 ? 10 : 20, width: data.resolution.split('x')[0], height: data.resolution.split('x')[1] }, method: 'post', - body: edl, + body: { edl: edl }, }).then(res => { console.log('preview available at', res) preview = res @@ -92,7 +94,9 @@ export function Magnussens() { // form.forEach(f => {console.log('field', f.name, f)}) message('assembling render') let data = Object.fromEntries(form.entries()) - let edl = buildEdl(data) + let width = data.resolution.split('x')[0] + let height = data.resolution.split('x')[1] + let edl = buildEdl(data, width, height) console.log('saving form', e, edl, data, data.carname) @@ -100,10 +104,10 @@ export function Magnussens() { method: 'post', params: { project: 'Magnussens', - width: data.resolution.split('x')[0], - height: data.resolution.split('x')[1] + width: width, + height: height }, - body: edl + body: {edl: edl, duration: data.duration} }).then(e => { success('Rendering!') m.route.set('/renders') @@ -138,93 +142,97 @@ export function Layout() { } } -function buildEdl(data) { +function buildEdl(data, width, height) { let start = data.duration == 15 ? 8 : 17.2 let duration = data.duration == 15 ? 5 : 7 - return { - duration: data.duration, - edl: [ - { - type: 'video', - name: 'https://storage.googleapis.com/tower-bucket/alfred/car/Magnussens%20(check%20out%20offer).mp4', - duration: data.duration, - start: 0, - }, - { - type: 'template', - name: 'makeColor', - duration: duration, - start: start, - data: { - color: [255,255,255], - opacity: 1, - } - }, - { - type: 'template', - name: 'textBox', - duration: duration, - start: start, - data: { - text: data.carname, - color: '#EB0A1E', - textsize: [1280,320], - fontsize: 100, - // position: [.8, .5], - position: ['center',150], - opacity: 1, - fxs: [{ - name: 'bezier2', - data: { - c1x: 1, - c1y: 0, - ax: 0, - ay: 0, - c2x: 0, - c2y: 1, - } - }] - }, - }, - { - type: 'template', - name: 'textBox', - duration: duration, - start: start, - position: [.5, .8 ], - data: { - color: '#EB0A1E', - text: data.offerinfo, - textsize: [1700,600], - fontsize: 50, - opacity: 1, - position: 'center', - align: 'west', - }, + return [ + { + type: 'video', + name: 'https://storage.googleapis.com/tower-bucket/alfred/car/Magnussens%20(check%20out%20offer).mp4', + duration: data.duration, + start: 0, + }, + { + type: 'template', + name: 'makeColor', + duration: duration, + start: start, + data: { + color: [255,255,255], + opacity: 1, + } + }, + { + type: 'template', + name: 'textBox', + duration: duration, + start: start, + data: { + text: data.carname, + color: '#EB0A1E', + textsize: [Math.floor(.7*width), Math.floor(.3*height)], + // textsize: [width, height], + fontsize: 100, + // position: [.8, .5], + relative: false, + // position: ['center', Math.floor(-height/4)], + position: ['center', Math.floor(.1*height)], + opacity: 1, + fxs: [{ + name: 'bezier2', + data: { + c1x: 1, + c1y: 0, + ax: 0, + ay: 0, + c2x: 0, + c2y: 1, + } + }] }, - { - type: 'template', - name: 'textBox', - duration: duration, - start: start, - data: { - color: '#333333', - text: data.legaltext, - textsize: [1800,400], - fontsize: 25, - position: 'bottom', - align: 'west', - opacity: 1, - } + }, + { + type: 'template', + name: 'textBox', + duration: duration, + start: start, + position: [.5, .8 ], + data: { + color: '#EB0A1E', + text: data.offerinfo, + relative: false, + textsize: [Math.floor(.9*width), Math.floor(.5*height)], + // textsize: [width, height], + fontsize: 50, + opacity: 1, + position: 'center', + align: 'west', }, - { - type: 'image', - name: 'https://storage.googleapis.com/tower-bucket/alfred/car/magnussens-screengrab%20logo-fixed-with-toyota.png', - position: ['center', 'top'], - resize: .4, - start: start, - duration: duration, + }, + { + type: 'template', + name: 'textBox', + duration: duration, + start: start, + data: { + color: '#333333', + text: data.legaltext, + method: 'caption', + textsize: [Math.floor(.9*width), Math.floor(.35*height)], + // textsize: [width, height], + fontsize: 25, + position: ['center', 'bottom'], + align: 'west', + opacity: 1, } - ] - } + }, + { + type: 'image', + name: 'https://storage.googleapis.com/tower-bucket/alfred/car/magnussens-screengrab%20logo-fixed-with-toyota.png', + position: ['center', 'top'], + resize: .4, + start: start, + duration: duration, + } + ] } \ No newline at end of file From 1d0658df25615113e2035295862a5ed41e1960e8 Mon Sep 17 00:00:00 2001 From: Harpo Date: Sat, 27 Feb 2021 14:49:52 -0800 Subject: [PATCH 25/40] defined fonts for template sections! --- website/src/Magnussens.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/website/src/Magnussens.js b/website/src/Magnussens.js index 3759e5b1..03f2f6d0 100644 --- a/website/src/Magnussens.js +++ b/website/src/Magnussens.js @@ -172,6 +172,7 @@ function buildEdl(data, width, height) { color: '#EB0A1E', textsize: [Math.floor(.7*width), Math.floor(.3*height)], // textsize: [width, height], + font: 'Toyota-Type-Bold', fontsize: 100, // position: [.8, .5], relative: false, @@ -203,6 +204,7 @@ function buildEdl(data, width, height) { relative: false, textsize: [Math.floor(.9*width), Math.floor(.5*height)], // textsize: [width, height], + font: 'Toyota-Type', fontsize: 50, opacity: 1, position: 'center', @@ -220,6 +222,7 @@ function buildEdl(data, width, height) { method: 'caption', textsize: [Math.floor(.9*width), Math.floor(.35*height)], // textsize: [width, height], + font: 'Toyota-Type-Book', fontsize: 25, position: ['center', 'bottom'], align: 'west', From 4836be15e21b7f1fb11b9462087342b6e0136e30 Mon Sep 17 00:00:00 2001 From: Harpo Date: Sat, 27 Feb 2021 15:28:59 -0800 Subject: [PATCH 26/40] pass ip to celery worker --- alfred | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/alfred b/alfred index d24370dd..0c4c5204 100755 --- a/alfred +++ b/alfred @@ -84,8 +84,7 @@ elif [ $1 = "worker" -o $1 = "w" ]; then shift # . operator used in place of source . ./.cred - celery -A tasks:renderer --workdir api/ -b pyamqp://192.168.192.52 --result-backend rpc:// worker - + celery -A tasks:renderer --workdir api/ -b pyamqp://$1 --result-backend rpc:// worker elif [ $1 = "dump" ]; then shift DATE=`date "+%Y-%m-%d-%H%M%S"` From aed082d5d2e1518f8d37a5382cde9c6be6df89b2 Mon Sep 17 00:00:00 2001 From: Harpo Date: Sat, 27 Feb 2021 15:29:56 -0800 Subject: [PATCH 27/40] audio defaults to None --- api/main.py | 3 +-- api/tasks.py | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/api/main.py b/api/main.py index d945ec41..bf640d95 100644 --- a/api/main.py +++ b/api/main.py @@ -138,10 +138,9 @@ async def queueRender(prog: BackgroundTasks, project: str, width: int = 1920, he } # media = db.projects.find_one({'name': project}, ['form'])['form']['media'] id = db.renders.insert_one(render).inserted_id - proj = db.projects.find_one({'name': project}, ['form'])['form'] print('rendering!', render) # media = [ download(m) for m in proj['media'] ] - task = renderRemote.delay(edl=edl.edl, audio=download(proj['audio'][0]), filename=filename, moviesize=(width, height)) + task = renderRemote.delay(edl=edl.edl, filename=filename, moviesize=(width, height)) def updateRenderProgress(progress): r = progress.get('result') # print('updating progress', r) diff --git a/api/tasks.py b/api/tasks.py index ced728eb..9f47c5ef 100644 --- a/api/tasks.py +++ b/api/tasks.py @@ -9,7 +9,7 @@ @renderer.task(bind=True) -def renderRemote(self, edl, audio, filename, moviesize): +def renderRemote(self, edl, filename, audio=None, moviesize=(1920,1080)): log = CeleryLogger(self) renderMultitrack(edl, audio, join('videos', filename), moviesize, log) upload(filename, directory='videos') From ee4bc062de572bcbe8f5baa37aa0afd8f2e18e0a Mon Sep 17 00:00:00 2001 From: Harpo Date: Sat, 27 Feb 2021 19:37:26 -0800 Subject: [PATCH 28/40] fonts, resize now operate proportionate to (width*height)^.5 --- website/src/Magnussens.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/website/src/Magnussens.js b/website/src/Magnussens.js index 03f2f6d0..e78eb186 100644 --- a/website/src/Magnussens.js +++ b/website/src/Magnussens.js @@ -173,7 +173,7 @@ function buildEdl(data, width, height) { textsize: [Math.floor(.7*width), Math.floor(.3*height)], // textsize: [width, height], font: 'Toyota-Type-Bold', - fontsize: 100, + fontsize: Math.pow(width*height, .5)/15, // position: [.8, .5], relative: false, // position: ['center', Math.floor(-height/4)], @@ -205,7 +205,7 @@ function buildEdl(data, width, height) { textsize: [Math.floor(.9*width), Math.floor(.5*height)], // textsize: [width, height], font: 'Toyota-Type', - fontsize: 50, + fontsize: Math.pow(width*height, .5)/30, opacity: 1, position: 'center', align: 'west', @@ -223,7 +223,7 @@ function buildEdl(data, width, height) { textsize: [Math.floor(.9*width), Math.floor(.35*height)], // textsize: [width, height], font: 'Toyota-Type-Book', - fontsize: 25, + fontsize: Math.pow(width*height, .5)/60, position: ['center', 'bottom'], align: 'west', opacity: 1, @@ -233,7 +233,7 @@ function buildEdl(data, width, height) { type: 'image', name: 'https://storage.googleapis.com/tower-bucket/alfred/car/magnussens-screengrab%20logo-fixed-with-toyota.png', position: ['center', 'top'], - resize: .4, + resize: Math.pow(width*height, .5)/3600, start: start, duration: duration, } From 6a117b00d203ba9ac956681cb3e80ea4fd145924 Mon Sep 17 00:00:00 2001 From: Harpo Date: Sat, 27 Feb 2021 19:37:53 -0800 Subject: [PATCH 29/40] added other resolutions --- website/src/Magnussens.js | 10 ++++++---- website/src/style.css | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/website/src/Magnussens.js b/website/src/Magnussens.js index e78eb186..2a5f9ea3 100644 --- a/website/src/Magnussens.js +++ b/website/src/Magnussens.js @@ -58,12 +58,15 @@ export function Magnussens() { view: (vnode) => { return [ m(Form, {id: 'MagnussensForm'}, [ - m(Selector, { name: 'duration', text: 'Duration', value: 30 }, ['15', '30']), + m(Selector, { name: 'duration', text: 'Duration',}, ['30', '15']), m(TextBox, { name: 'carname', text: 'Car Name' }), m(TextBox, { name: 'offerinfo', text: 'Offer Info' }), m(TextBox, { name: 'legaltext', text: 'Legal Text' }), - m(Selector, { name: 'resolution', text: 'Resolution'}, ['1920x1080', '1280x720']), + m(Selector, { name: 'resolution', text: 'Resolution'}, [ + '1920x1080', '1600x900', '1280x720', '854x480', + ]), m(Button, { name: 'preview', value: 'preview', onclick: e => { + e.preventDefault() let form = new FormData(document.getElementById('MagnussensForm')) let data = Object.fromEntries(form.entries()) let width = data.resolution.split('x')[0] @@ -82,7 +85,6 @@ export function Magnussens() { }).then(res => { console.log('preview available at', res) preview = res - m.redraw() }).catch(e => { console.log('error previewing', e) }) @@ -170,7 +172,7 @@ function buildEdl(data, width, height) { data: { text: data.carname, color: '#EB0A1E', - textsize: [Math.floor(.7*width), Math.floor(.3*height)], + textsize: [Math.floor(.9*width), Math.floor(.3*height)], // textsize: [width, height], font: 'Toyota-Type-Bold', fontsize: Math.pow(width*height, .5)/15, diff --git a/website/src/style.css b/website/src/style.css index 4c3e013e..6bc3a433 100644 --- a/website/src/style.css +++ b/website/src/style.css @@ -25,7 +25,7 @@ body { } .preview { width: 100%; - /* height: 100%; */ + max-height: -webkit-fill-available; object-fit: contain; background-size: cover; } From 400cdfac72d7cd77f442df350db80e6121bfe95e Mon Sep 17 00:00:00 2001 From: Harpo Date: Sun, 28 Feb 2021 17:53:47 -0800 Subject: [PATCH 30/40] working issue button with email sender!!! --- api/config.py | 6 ++++++ api/emailer.py | 21 +++++++++++++++++++++ api/main.py | 8 ++++++++ docker-compose.yml | 3 ++- website/src/Renders.js | 22 +++++++++++++++++++++- 5 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 api/emailer.py diff --git a/api/config.py b/api/config.py index 73120d75..c831be1f 100644 --- a/api/config.py +++ b/api/config.py @@ -8,3 +8,9 @@ CELERY_BACKEND = environ.get('CELERY_BACKEND') BUCKET_NAME = environ.get('ALFRED_BUCKET_NAME', 'tower-renders') + +EMAIL_USERNAME = environ.get('EMAIL_USERNAME') +EMAIL_PASSWORD = environ.get('EMAIL_PASSWORD') +EMAIL_SERVER = environ.get('EMAIL_SERVER') +EMAIL_PORT = environ.get('EMAIL_PORT') +EMAIL_SENDTO = environ.get('EMAIL_SENDTO') \ No newline at end of file diff --git a/api/emailer.py b/api/emailer.py new file mode 100644 index 00000000..d1a274a3 --- /dev/null +++ b/api/emailer.py @@ -0,0 +1,21 @@ +from smtplib import SMTP +from email.message import EmailMessage +import config + +def sendMail(message, subject): + try: + msg = EmailMessage() + msg.set_content(message) + msg['Subject'] = subject + msg['From'] = config.EMAIL_USERNAME + msg['To'] = config.EMAIL_SENDTO + s=SMTP(config.EMAIL_SERVER, config.EMAIL_PORT) + s.set_debuglevel(1) + s.starttls() + s.login(config.EMAIL_USERNAME, config.EMAIL_PASSWORD) + s.send_message(msg) + s.quit() + return True + except Exception as e: + print('error sending email', e) + return False \ No newline at end of file diff --git a/api/main.py b/api/main.py index bf640d95..ecb83a48 100644 --- a/api/main.py +++ b/api/main.py @@ -26,6 +26,7 @@ from math import floor from config import BUCKET_NAME from bucket import generate_signed_url +from emailer import sendMail def seconds(t): return sum(x * round(float(s), 2) for x, s in zip([3600, 60, 1], t.split(":"))) @@ -295,6 +296,13 @@ async def saveFile(file, location='data'): with open(join(location, file.filename), 'wb') as f: f.write(data) +@app.post('/report') +async def reportIssue(name: str, issue: str = Body(...)): + if not sendMail(issue, name): + print('error reporting issue with ', name, issue) + raise HTTPException(status_code=500, detail='error sending email') + + app.include_router(auth) app.include_router(users) diff --git a/docker-compose.yml b/docker-compose.yml index cab65869..24ad565e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -31,7 +31,8 @@ services: - CELERY_BACKEND=rpc:// - DB_URL=mongodb://db:27017 - GOOGLE_APPLICATION_CREDENTIALS=/cred.json - + env_file: + - .email db: image: mongo:bionic diff --git a/website/src/Renders.js b/website/src/Renders.js index d2a2c144..b4bd8db9 100644 --- a/website/src/Renders.js +++ b/website/src/Renders.js @@ -2,7 +2,7 @@ import m from 'mithril' import { Menu, Link} from './Menu' import { User } from './User' import { auth } from './Login' -import { success, error, message } from 'alertifyjs' +import { success, error, message, prompt } from 'alertifyjs' import { downloadFile } from './Tools' import '../node_modules/material-design-icons-iconfont/dist/material-design-icons.css' var Stream = require("mithril/stream") @@ -91,6 +91,7 @@ export function Renders() { m('th', 'progress'), m('th', 'preview'), m('th', 'link'), + m('th', 'issue'), m('th', 'delete'), ],), renders.map(r => { @@ -119,6 +120,25 @@ export function Renders() { }}, 'missed_video_call')) : ''), m('td', r['progress'] >= 100 ? m(RenderLink, {}, r['filename']) : ''), + m('td', {}, m('.tools', {}, m('i.material-icons', { + onclick: e => { + prompt('Report issue', "Please provide a detailed description of the issue", "There's a problem with...", (evt, issue) => { + console.log('reporting issue', evt, issue) + m.request('/report', { + method: 'post', + params: { name: r['filename'] }, + body: issue + }).then(win => { + success("issue submitted! We'll check it out as soon as we can!") + }, lose => { + console.log('error reporting issue', lose) + error('Oops... something went wrong. Sorry!') + }) + }, evt => { + console.log('cancelled issue') + }) + } + }, 'report_problem'))), m('td', m('.tools', m('i.material-icons', { From 1c339866b6df270f7de070f7c89c78eeff3a00de Mon Sep 17 00:00:00 2001 From: Harpo Date: Sun, 28 Feb 2021 17:55:25 -0800 Subject: [PATCH 31/40] added blank .email environment config --- .email | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .email diff --git a/.email b/.email new file mode 100644 index 00000000..9b0985fc --- /dev/null +++ b/.email @@ -0,0 +1,5 @@ +EMAIL_SERVER=femail.harpo.me +EMAIL_PORT=587 +EMAIL_USERNAME=alfred@quaternion.media +EMAIL_PASSWORD="" +EMAIL_SENDTO="" \ No newline at end of file From a80830f6aa65c261ce68902d6556ee5a14d4fcf6 Mon Sep 17 00:00:00 2001 From: Harpo Date: Sun, 28 Feb 2021 17:57:19 -0800 Subject: [PATCH 32/40] ignore .email config changes --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 330150d9..13d7ae55 100644 --- a/.gitignore +++ b/.gitignore @@ -51,3 +51,5 @@ api/data *.png *.jpg *.edl + +.email From 8a4e96a04ffc3009868ffb90b54c25ba23e2b176 Mon Sep 17 00:00:00 2001 From: Harpo Date: Mon, 1 Mar 2021 11:08:04 -0800 Subject: [PATCH 33/40] fixed text size issue across resolutions!! --- api/otto | 2 +- website/src/Magnussens.js | 7 ------- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/api/otto b/api/otto index 5fe89491..897437a5 160000 --- a/api/otto +++ b/api/otto @@ -1 +1 @@ -Subproject commit 5fe8949152f746134011e6d710637ce8cae2884f +Subproject commit 897437a5634357d0a2c05d8bc916955de04bd1a9 diff --git a/website/src/Magnussens.js b/website/src/Magnussens.js index 2a5f9ea3..0cdaafea 100644 --- a/website/src/Magnussens.js +++ b/website/src/Magnussens.js @@ -173,12 +173,8 @@ function buildEdl(data, width, height) { text: data.carname, color: '#EB0A1E', textsize: [Math.floor(.9*width), Math.floor(.3*height)], - // textsize: [width, height], font: 'Toyota-Type-Bold', fontsize: Math.pow(width*height, .5)/15, - // position: [.8, .5], - relative: false, - // position: ['center', Math.floor(-height/4)], position: ['center', Math.floor(.1*height)], opacity: 1, fxs: [{ @@ -203,9 +199,7 @@ function buildEdl(data, width, height) { data: { color: '#EB0A1E', text: data.offerinfo, - relative: false, textsize: [Math.floor(.9*width), Math.floor(.5*height)], - // textsize: [width, height], font: 'Toyota-Type', fontsize: Math.pow(width*height, .5)/30, opacity: 1, @@ -223,7 +217,6 @@ function buildEdl(data, width, height) { text: data.legaltext, method: 'caption', textsize: [Math.floor(.9*width), Math.floor(.35*height)], - // textsize: [width, height], font: 'Toyota-Type-Book', fontsize: Math.pow(width*height, .5)/60, position: ['center', 'bottom'], From 372185221555a3629de85fb70ae4fb2d45ae321f Mon Sep 17 00:00:00 2001 From: Harpo Date: Mon, 1 Mar 2021 12:28:09 -0800 Subject: [PATCH 34/40] added alternate video selection, with custom edl rules! --- website/src/Magnussens.js | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/website/src/Magnussens.js b/website/src/Magnussens.js index 0cdaafea..6a78b6a5 100644 --- a/website/src/Magnussens.js +++ b/website/src/Magnussens.js @@ -58,6 +58,7 @@ export function Magnussens() { view: (vnode) => { return [ m(Form, {id: 'MagnussensForm'}, [ + m(Selector, { name: 'project', text: 'Video', }, [ 'Magnussens', 'RSG']), m(Selector, { name: 'duration', text: 'Duration',}, ['30', '15']), m(TextBox, { name: 'carname', text: 'Car Name' }), m(TextBox, { name: 'offerinfo', text: 'Offer Info' }), @@ -105,7 +106,7 @@ export function Magnussens() { m.request('/render', { method: 'post', params: { - project: 'Magnussens', + project: data.project, width: width, height: height }, @@ -147,14 +148,19 @@ export function Layout() { function buildEdl(data, width, height) { let start = data.duration == 15 ? 8 : 17.2 let duration = data.duration == 15 ? 5 : 7 + if (data.project == 'RSG') { + start -= 2.7 + duration += 3.5 + } return [ { type: 'video', - name: 'https://storage.googleapis.com/tower-bucket/alfred/car/Magnussens%20(check%20out%20offer).mp4', + name: data.project == 'Magnussens' ? 'https://storage.googleapis.com/tower-bucket/alfred/car/Magnussens%20(check%20out%20offer).mp4' : 'https://storage.googleapis.com/tower-bucket/alfred/car/315048_MUL_MY21_MRE_RSG_LVStory_Downtown_Non-New_ENG_17-10-03_ProdAssetDlrNFA_SSSH2955000H.mp4', duration: data.duration, start: 0, + inpoint: data.project == 'Magnussens' ? 0 : 7 }, - { + data.project == 'Magnussens' ? { type: 'template', name: 'makeColor', duration: duration, @@ -163,7 +169,7 @@ function buildEdl(data, width, height) { color: [255,255,255], opacity: 1, } - }, + } : null, { type: 'template', name: 'textBox', @@ -224,13 +230,13 @@ function buildEdl(data, width, height) { opacity: 1, } }, - { + data.project == 'Magnussens' ? { type: 'image', name: 'https://storage.googleapis.com/tower-bucket/alfred/car/magnussens-screengrab%20logo-fixed-with-toyota.png', position: ['center', 'top'], resize: Math.pow(width*height, .5)/3600, start: start, duration: duration, - } - ] + } : null, + ].filter(Boolean) } \ No newline at end of file From c0e06cec09c6d6d344ffd272515ced610cb10777 Mon Sep 17 00:00:00 2001 From: Harpo Date: Tue, 2 Mar 2021 22:23:04 -0800 Subject: [PATCH 35/40] split components into own file --- website/src/Components.js | 72 +++++++++++++++++++++++++++++++++++++++ website/src/Magnussens.js | 70 +------------------------------------ website/src/index.js | 3 +- 3 files changed, 75 insertions(+), 70 deletions(-) create mode 100644 website/src/Components.js diff --git a/website/src/Components.js b/website/src/Components.js new file mode 100644 index 00000000..992253b5 --- /dev/null +++ b/website/src/Components.js @@ -0,0 +1,72 @@ +import m from 'mithril' +import { Menu } from './Menu' + +export function Form() { + return { + view: vnode => { + return m('form', vnode.attrs, vnode.children) + } + } +} + +export function TextBox() { + return { + view: vnode => { + return [ + m('label.formlabel', {for: vnode.attrs.name}, vnode.attrs.text), + m('textarea', vnode.attrs), + m('br') + ] + } + } +} +export function Button() { + return { + view: vnode => { + return m('input.button', vnode.attrs, vnode.children) + } + } +} + +export function Img() { + return { + view: vnode => { + return m('img', vnode.attrs, vnode.children) + } + } +} + +export function Selector() { + return { + view: vnode => { + return [ + m('label.formlabel', { for: vnode.attrs.name }, vnode.attrs.text), + m('select', vnode.attrs, vnode.children.map(c => { + return m('option', {value: c}, c) + })), + m('br'), + ] + } + } +} + + +export function Section() { + return { + view: vnode => { + return m('section', vnode.attrs, vnode.children) + } + } +} + +export function Layout() { + return { + view: vnode => { + return [ + m(Menu), + m(Section, vnode.attrs, vnode.children) + ] + } + } +} + diff --git a/website/src/Magnussens.js b/website/src/Magnussens.js index 6a78b6a5..4dfe8a07 100644 --- a/website/src/Magnussens.js +++ b/website/src/Magnussens.js @@ -1,56 +1,7 @@ import m from 'mithril' -import { Menu } from './Menu' import { success, error, message } from 'alertifyjs' import { ImagePreview } from './Preview' - -export function Form() { - return { - view: vnode => { - return m('form', vnode.attrs, vnode.children) - } - } -} - -export function TextBox() { - return { - view: vnode => { - return [ - m('label.formlabel', {for: vnode.attrs.name}, vnode.attrs.text), - m('textarea', vnode.attrs), - m('br') - ] - } - } -} -export function Button() { - return { - view: vnode => { - return m('input.button', vnode.attrs, vnode.children) - } - } -} - -export function Img() { - return { - view: vnode => { - return m('img', vnode.attrs, vnode.children) - } - } -} - -export function Selector() { - return { - view: vnode => { - return [ - m('label.formlabel', { for: vnode.attrs.name }, vnode.attrs.text), - m('select', vnode.attrs, vnode.children.map(c => { - return m('option', {value: c}, c) - })), - m('br'), - ] - } - } -} +import { Form, TextBox, Button, Img, Selector} from './Components' export function Magnussens() { let preview @@ -126,25 +77,6 @@ export function Magnussens() { } } -export function Section() { - return { - view: vnode => { - return m('section', vnode.attrs, vnode.children) - } - } -} - -export function Layout() { - return { - view: vnode => { - return [ - m(Menu), - m(Section, vnode.attrs, vnode.children) - ] - } - } -} - function buildEdl(data, width, height) { let start = data.duration == 15 ? 8 : 17.2 let duration = data.duration == 15 ? 5 : 7 diff --git a/website/src/index.js b/website/src/index.js index 8461da1d..717551da 100644 --- a/website/src/index.js +++ b/website/src/index.js @@ -23,7 +23,8 @@ import { FormPage } from './Form' import { Timecode } from './Timecode' import { Head } from './Head' import { Resolution, Aspect } from './Resolution' -import { Magnussens, Layout } from './Magnussens' +import { Magnussens } from './Magnussens' +import { Layout } from './Components' var state = require("./Globals").state From 04facb6f757c9bc9745fef4347a771f28304e0cf Mon Sep 17 00:00:00 2001 From: Harpo Date: Tue, 2 Mar 2021 22:29:25 -0800 Subject: [PATCH 36/40] added offer alignment selector --- website/src/Magnussens.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/website/src/Magnussens.js b/website/src/Magnussens.js index 4dfe8a07..306517cf 100644 --- a/website/src/Magnussens.js +++ b/website/src/Magnussens.js @@ -13,6 +13,7 @@ export function Magnussens() { m(Selector, { name: 'duration', text: 'Duration',}, ['30', '15']), m(TextBox, { name: 'carname', text: 'Car Name' }), m(TextBox, { name: 'offerinfo', text: 'Offer Info' }), + m(Selector, { name: 'offeralign', text: 'Offer alignment' }, ['left', 'center']), m(TextBox, { name: 'legaltext', text: 'Legal Text' }), m(Selector, { name: 'resolution', text: 'Resolution'}, [ '1920x1080', '1600x900', '1280x720', '854x480', @@ -142,7 +143,7 @@ function buildEdl(data, width, height) { fontsize: Math.pow(width*height, .5)/30, opacity: 1, position: 'center', - align: 'west', + align: data.offeralign == 'left' ? 'west' : data.offeralign, }, }, { From ea876d7f5eb56a34a091c5bc62c4eb063d7d125b Mon Sep 17 00:00:00 2001 From: Harpo Date: Tue, 2 Mar 2021 23:05:22 -0800 Subject: [PATCH 37/40] force auth on preview and render functions! --- api/main.py | 4 ++-- api/otto | 2 +- website/src/Magnussens.js | 8 ++++++-- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/api/main.py b/api/main.py index ecb83a48..ec2cd422 100644 --- a/api/main.py +++ b/api/main.py @@ -82,7 +82,7 @@ def updateProgress(id, progress): # REST Routing : # TODO: as it grows length -> breakout file into suporting files as needed, e.g. dbm'database manager', util'utiliy', etc. app = FastAPI() -app.mount('/otto', ottoApi) +app.include_router(ottoApi, prefix='/otto', dependencies=[Depends(get_current_active_user)]) @app.on_event("startup") async def seedDb(): @@ -124,7 +124,7 @@ async def download_file(filename: str): @app.post('/render') -async def queueRender(prog: BackgroundTasks, project: str, width: int = 1920, height: int = 1080, edl: Edl = Body(...)): +async def queueRender(prog: BackgroundTasks, project: str, width: int = 1920, height: int = 1080, edl: Edl = Body(...), user: User = Depends(get_current_active_user)): ts = timestr() filename = f'{project}_{width}x{height}_{edl.duration}s_{ts}.mp4' render = { diff --git a/api/otto b/api/otto index 897437a5..a87e4fd0 160000 --- a/api/otto +++ b/api/otto @@ -1 +1 @@ -Subproject commit 897437a5634357d0a2c05d8bc916955de04bd1a9 +Subproject commit a87e4fd074c5709d9f42494a49602659aa2c4417 diff --git a/website/src/Magnussens.js b/website/src/Magnussens.js index 306517cf..7593fad8 100644 --- a/website/src/Magnussens.js +++ b/website/src/Magnussens.js @@ -2,8 +2,12 @@ import m from 'mithril' import { success, error, message } from 'alertifyjs' import { ImagePreview } from './Preview' import { Form, TextBox, Button, Img, Selector} from './Components' +import { User } from './User' +import { auth } from './Login' export function Magnussens() { + if (!User.loggedIn) m.route.set('/login?redirect=/magnussens') + let preview return { view: (vnode) => { @@ -27,7 +31,7 @@ export function Magnussens() { let edl = buildEdl(data, width, height) edl.shift() console.log('previewing ', edl, vnode.dom) - m.request('/otto/preview', { + auth('/otto/preview', { params: { t: data.duration == 15 ? 10 : 20, width: data.resolution.split('x')[0], @@ -55,7 +59,7 @@ export function Magnussens() { console.log('saving form', e, edl, data, data.carname) - m.request('/render', { + auth('/render', { method: 'post', params: { project: data.project, From 40c85b592ee7a7ace1733615c645e8967457f704 Mon Sep 17 00:00:00 2001 From: Harpo Date: Mon, 8 Mar 2021 11:51:19 -0800 Subject: [PATCH 38/40] added white background for 15s RSG format --- website/src/Magnussens.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/website/src/Magnussens.js b/website/src/Magnussens.js index 7593fad8..9f6c54a3 100644 --- a/website/src/Magnussens.js +++ b/website/src/Magnussens.js @@ -97,6 +97,13 @@ function buildEdl(data, width, height) { start: 0, inpoint: data.project == 'Magnussens' ? 0 : 7 }, + data.project == 'RSG' && data.duration == 15 ? { + type: 'video', + name: 'https://storage.googleapis.com/tower-bucket/alfred/car/315048_MUL_MY21_MRE_RSG_LVStory_Downtown_Non-New_ENG_17-10-03_ProdAssetDlrNFA_SSSH2955000H.mp4', + duration: duration, + inpoint: 22, + start: start, + } : null, data.project == 'Magnussens' ? { type: 'template', name: 'makeColor', From 34edebae49c47e631184af37624411c2a878460e Mon Sep 17 00:00:00 2001 From: Harpo Date: Mon, 8 Mar 2021 16:38:31 -0800 Subject: [PATCH 39/40] changed carname font color and offer fontsize, per client --- website/src/Magnussens.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/src/Magnussens.js b/website/src/Magnussens.js index 9f6c54a3..38d7b671 100644 --- a/website/src/Magnussens.js +++ b/website/src/Magnussens.js @@ -121,7 +121,7 @@ function buildEdl(data, width, height) { start: start, data: { text: data.carname, - color: '#EB0A1E', + color: '#000000', textsize: [Math.floor(.9*width), Math.floor(.3*height)], font: 'Toyota-Type-Bold', fontsize: Math.pow(width*height, .5)/15, @@ -151,7 +151,7 @@ function buildEdl(data, width, height) { text: data.offerinfo, textsize: [Math.floor(.9*width), Math.floor(.5*height)], font: 'Toyota-Type', - fontsize: Math.pow(width*height, .5)/30, + fontsize: Math.pow(width*height, .5)/32, opacity: 1, position: 'center', align: data.offeralign == 'left' ? 'west' : data.offeralign, From 09f231772d7d069e57fb4ee193fd535712df62c4 Mon Sep 17 00:00:00 2001 From: Harpo Date: Tue, 9 Mar 2021 11:46:39 -0800 Subject: [PATCH 40/40] added username to render db entry --- api/main.py | 10 ++++++---- website/src/Renders.js | 16 ++++++++-------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/api/main.py b/api/main.py index ec2cd422..5a338ba4 100644 --- a/api/main.py +++ b/api/main.py @@ -128,6 +128,7 @@ async def queueRender(prog: BackgroundTasks, project: str, width: int = 1920, he ts = timestr() filename = f'{project}_{width}x{height}_{edl.duration}s_{ts}.mp4' render = { + 'user': user.username, 'project': project, 'filename': filename, 'duration': edl.duration, @@ -185,10 +186,11 @@ def pauseRender(user: User = Depends(get_current_active_user)): @app.put('/renders/{render}/cancel') def cancelRender(render: str, user: User = Depends(get_current_active_user)): # cancel selected render - res = db.renders.delete_one({'filename': render}) - if res.deleted_count: - print('deleted render', render, res, res.deleted_count) - return res.deleted_count + res = db.renders.find_one_and_delete({'filename': render}) + if res: + print('deleted render', render, res) + db.deleted.insert_one(res) + return else: return HTTPException(status_code=406, detail='no such entry in database') diff --git a/website/src/Renders.js b/website/src/Renders.js index b4bd8db9..b969bf94 100644 --- a/website/src/Renders.js +++ b/website/src/Renders.js @@ -146,17 +146,17 @@ export function Renders() { auth(`/renders/${r['filename']}/cancel`, { method: 'put', }).then(res => { - console.log('deleted', res) - if (res.status_code == 406) { + console.log('deleted', r['filename']) + message(`${r['filename']} removed`, 4) + getRenders() + }, err => { + console.log('error deleting', err) + if (err.status_code == 406) { error('did not find that entry', 4) } else { - message(`${r['filename']} removed`, 4) - getRenders() + error('error removing from db', 4) } - }, err => { - console.log('error deleting', err) - error('error removing from db', 4) - }) + }).catch() }, }, 'delete'))), ])