diff options
Diffstat (limited to 'app/client/modules/pix2pixhd/views')
| -rw-r--r-- | app/client/modules/pix2pixhd/views/pix2pixhd.train.js | 5 | ||||
| -rw-r--r-- | app/client/modules/pix2pixhd/views/sequence.editor.js | 162 |
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> - // ) } } |
