summaryrefslogtreecommitdiff
path: root/app/client/modules/pix2pixhd/views
diff options
context:
space:
mode:
Diffstat (limited to 'app/client/modules/pix2pixhd/views')
-rw-r--r--app/client/modules/pix2pixhd/views/pix2pixhd.train.js5
-rw-r--r--app/client/modules/pix2pixhd/views/sequence.editor.js162
2 files changed, 111 insertions, 56 deletions
diff --git a/app/client/modules/pix2pixhd/views/pix2pixhd.train.js b/app/client/modules/pix2pixhd/views/pix2pixhd.train.js
index ae46fdb..6aade36 100644
--- a/app/client/modules/pix2pixhd/views/pix2pixhd.train.js
+++ b/app/client/modules/pix2pixhd/views/pix2pixhd.train.js
@@ -37,7 +37,8 @@ class Pix2PixHDTrain extends Component {
}
componentDidMount(){
const id = this.props.match.params.id || localStorage.getItem('pix2pixhd.last_id')
- console.log('load dataset:', id)
+ const dataset = localStorage.getItem('pix2pixhd.last_dataset')
+ console.log('load dataset:', id, dataset)
const { match, pix2pixhd, actions } = this.props
if (id === 'new') return
if (id) {
@@ -48,7 +49,6 @@ class Pix2PixHDTrain extends Component {
} else {
this.props.history.push('/pix2pixhd/new/')
}
- const dataset = localStorage.getItem('pix2pixhd.last_dataset')
if (dataset) {
this.setState({ checkpoint_name: dataset })
}
@@ -126,7 +126,6 @@ class Pix2PixHDTrain extends Component {
<Group title='Sequence Editor'>
<SequenceEditor
module={pix2pixhdModule}
- dataset={this.state.checkpoint_name}
checkpoint={this.props.pix2pixhd.checkpoint}
/>
</Group>
diff --git a/app/client/modules/pix2pixhd/views/sequence.editor.js b/app/client/modules/pix2pixhd/views/sequence.editor.js
index a749df9..6a5da39 100644
--- a/app/client/modules/pix2pixhd/views/sequence.editor.js
+++ b/app/client/modules/pix2pixhd/views/sequence.editor.js
@@ -7,77 +7,133 @@ import { Loading, FileList, FileViewer } from '../../../common'
import actions from '../../../actions'
+const initialState = {
+ dir: '/',
+ frameA: null,
+ frameB: null,
+ selection: null,
+ loading: true
+}
+
+/*
+ when the sequence editor loads,
+ reset the selection
+ reset the two frames
+ set the two frames to the beginning and end of the video
+ when mousing over the video
+ ideally you would see a tiny thumbnail preview of the frame :)
+ - click to start a selection, drag over, mouseup to end the selection
+ this should update the start/end frame
+ ...
+ so there are two things you could do with this
+ 1) create an entirely new dataset
+ 2) add frames to an existing dataset
+ ...
+ method 1)
+ - requires minimal setup, just a server script which..
+ - creates the new sequence folder
+ - symlinks the frames
+ - runs build_dataset
+ - create appropriate file object, using parent dataset's folder_id
+ - enqueue initial training
+ ---> we can then train on basic subsets, with more control, like we do already...
+ - tell parent dataset thing the new sequence name
+ ...
+ method 2)
+ - requires sequence editor to be aware of its own dataset
+ - requires sequence editor to know whether a sequence is original or not
+*/
+
class SequenceEditor extends Component {
- state = {
- dir: '/',
- files: [],
- loading: true
+ state = { ...initialState }
+
+ constructor() {
+ super()
+ this.handleMouseDown = this.handleMouseDown.bind(this)
+ this.handleMouseMove = this.handleMouseMove.bind(this)
+ this.handleMouseEnter = this.handleMouseEnter.bind(this)
+ this.handleMouseLeave = this.handleMouseLeave.bind(this)
+ this.handleMouseUp = this.handleMouseUp.bind(this)
}
+
componentDidMount() {
- this.fetch(this.props.dataset)
+ const { checkpoint } = this.props
+ window.addEventListener('mousemove', this.handleMouseMove)
+ window.addEventListener('mouseup', this.handleMouseUp)
+ if (checkpoint && checkpoint.sequence) {
+ console.log(checkpoint)
+ const frameA = checkpoint.sequence[0]
+ const frameB = checkpoint.sequence[checkpoint.sequence.length-1]
+ this.setState({
+ ...initialState,
+ frameA,
+ frameB,
+ })
+ }
}
+
componentDidUpdate(prevProps) {
- if (this.props.dataset !== prevProps.dataset) {
- this.fetch(this.props.dataset)
+ const { checkpoint } = this.props
+ if (checkpoint !== prevProps.checkpoint) {
+ console.log(checkpoint)
+ const frameA = checkpoint.sequence[0]
+ const frameB = checkpoint.sequence[checkpoint.sequence.length-1]
+ this.setState({
+ ...initialState,
+ frameA,
+ frameB,
+ })
}
}
+
+ componentWillUnmount(){
+ window.removeEventListener('mouseup', this.handleMouseUp)
+ window.removeEventListener('mousemove', this.handleMouseMove)
+ }
+
+ handleMouseDown(e) {
+ this.setState({ dragging: true })
+ }
+ handleMouseMove(e) {
+ }
+ handleMouseEnter(e) {
+ }
+ handleMouseLeave(e) {
+ }
+ handleMouseUp(e) {
+ this.setState({ dragging: false })
+ }
+
handlePick(file) {
console.log(file)
- if (file.dir) {
- this.fetch([this.state.dir, file.name].join('/').replace('//','/'))
- } else {
- this.fetchFile([this.state.dir, file.name].join('/').replace('//','/'))
- }
- }
- fetch(dir) {
- console.log('fetch', dir)
- const { name: module } = this.props.module.name
- this.setState({ dir, file: null, loading: true })
- actions.socket.list_directory({ module, dir }).then(files => {
- console.log(files)
- this.setState({ dir, files, loading: false })
- })
+ // this.setState({ dir, file: null, loading: true })
}
+
render() {
- const { app } = this.props
+ const { app, checkpoint } = this.props
const {
- loading, dir, files,
- loadingFile, file,
+ loading,
+ selection,
+ frameA, frameB,
} = this.state
- console.log(this.props, this.state)
+ // console.log(this.props, this.state)
+ const width = 200
+ const path = "sequences/" + checkpoint.name
return (
<div className='sequenceEditor'>
- <div className='timeline'>
- <div className='selection'></div>
+ <div
+ className='timeline'
+ style={{ width }}
+ mouseDown={this.handleSelectionStart}
+ mouseEnter={this.handleMouseEnter}
+ mouseLeave={this.handleMouseLeave}
+ >
+ {selection && <div className='selection' style={selection}></div>}
</div>
+ <FileViewer path={path} file={this.state.frameA} />
+ <FileViewer path={path} file={this.state.frameB} />
</div>
)
- // return (
- // <div className='app browser'>
- // <h1>{dir}{dir[dir.length-1] !== '/' && '/'}</h1>
- // {app.tool}<br/>
- // {loading && <Loading />}
- // <FileList
- // files={files}
- // groupDirectories
- // parentDirectory={dir !== '/'}
- // orderBy='name asc'
- // fields={'name datetime size'}
- // onClick={(file, e) => {
- // e.preventDefault()
- // e.stopPropagation()
- // console.log('picked a result', file)
- // this.handlePick(file)
- // }}
- // onClickParent={e => {
- // console.log('navigate up')
- // this.fetch(this.state.dir.split('/').slice(0, -1).join('/') || '/')
- // }}
- // />
- // {loadingFile && <Loading />}
- // {file && <FileViewer file={file} />}
- // </div>
- // )
}
}