import { h, Component } from 'preact' import { bindActionCreators } from 'redux' import { connect } from 'react-redux' import { ParamGroup, Param, Player, Slider, Select, Button, Loading } from '../../../common/' import { startRecording, stopRecording, saveFrame, toggleFPS } from '../../../live/player' import * as liveActions from '../../../live/live.actions' import * as queueActions from '../../../queue/queue.actions' import * as pix2pixTasks from '../pix2pix.tasks' import * as pix2pixActions from '../pix2pix.actions' class Pix2PixLive extends Component { constructor(props){ super() // if (! props.pix2pix || ! props.pix2pix.data) { props.actions.pix2pix.load_directories() // } props.actions.live.get_params() // props.actions.live.list_checkpoints('pix2pix') // props.actions.live.list_sequences('pix2pix') this.changeCheckpoint = this.changeCheckpoint.bind(this) this.changeEpoch = this.changeEpoch.bind(this) this.changeSequence = this.changeSequence.bind(this) this.seek = this.seek.bind(this) this.togglePlaying = this.togglePlaying.bind(this) this.toggleRecording = this.toggleRecording.bind(this) } componentWillUpdate(nextProps) { if (nextProps.opt.checkpoint_name && nextProps.opt.checkpoint_name !== this.props.opt.checkpoint_name) { this.props.actions.live.list_epochs('pix2pix', nextProps.opt.checkpoint_name) } } changeCheckpoint(field, checkpoint_name){ this.props.actions.live.load_epoch(checkpoint_name, 'latest') } changeEpoch(field, epoch_name){ this.props.actions.live.load_epoch(this.props.opt.checkpoint_name, epoch_name) } changeSequence(field, sequence){ console.log('load sequence', sequence) this.props.actions.live.load_sequence(sequence) } seek(percentage){ const frame = Math.floor(percentage * (parseInt(this.props.frame.sequence_len) || 1) + 1) console.log("seek to frame", percentage, frame) this.props.actions.live.seek(frame) } start(){ // console.log(this.props) const sequence = this.props.pix2pix.data.sequences[0].name const checkpoint = this.props.pix2pix.data.checkpoints[0].name console.log('starting up!', sequence, checkpoint) this.props.actions.tasks.live_task(sequence, checkpoint) } interrupt(){ this.props.actions.queue.stop_task('gpu') } togglePlaying(){ if (this.props.opt.processing) { this.props.actions.live.pause() } else { this.props.actions.live.play() } } toggleRecording(){ if (this.props.opt.recording){ stopRecording() this.props.actions.live.pause() } else { startRecording() } } render(){ // console.log(this.props) if (this.props.pix2pix.loading) { return } return (
file.name)} onChange={this.changeSequence} /> {this.renderRestartButton()} { // now storing frames on server... }} >

{this.props.last_message}

) } renderRestartButton(){ if (this.props.runner.gpu.status === 'IDLE') { return ( ) } if (this.props.runner.gpu.task.module !== 'pix2pix') { return ( ) } if (! this.props.opt.processing) { return (
) } return (
) } } function timeInSeconds(n){ return n.toFixed(1) + ' s.' } const mapStateToProps = state => ({ last_message: state.live.last_message, opt: state.live.opt, frame: state.live.frame, checkpoints: state.live.checkpoints, epochs: state.live.epochs, sequences: state.live.sequences, runner: state.system.runner, pix2pix: state.module.pix2pix, }) const mapDispatchToProps = (dispatch, ownProps) => ({ actions: { live: bindActionCreators(liveActions, dispatch), queue: bindActionCreators(queueActions, dispatch), pix2pix: bindActionCreators(pix2pixActions, dispatch), tasks: bindActionCreators(pix2pixTasks, dispatch),s } }) export default connect(mapStateToProps, mapDispatchToProps)(Pix2PixLive)