---
# System prepended metadata

title: mk-studio-code
tags: [' code', mk]

---

---
tags: mk, code
---

# mk-studio-code


## methods and moves

- atem
    -  atem-xml
        - define macros
        - upstream keyers for all 4 M/E
        - downstream keys for all 4
        - supersources
        - 
    - atem-connection
        - deployed
            - switch
            - sync to clock
            - play macro (one of 5)
        - to deploy
            - record?
            - playback?
            - set camera settings 
                - normalize at beginning of day
                - grab frames and do so programmatically?
                - achieve grades for a purpose during demos
            - get macros (and send to slack?)
            - play macro (any arbitrary)
            - define macro
- hyperdeck telnet protocol
- videohub telnet protocol
- 
- multiple devices
    - commands to one atem, then another
    - atems feeding each other to create more complex keys
    - graphics on a dedicated DSK graphics machine?
    - backgrounds on dedicated background machine
    - interact with OBS?
    - instant replay
    - replay of replay
    - 

## hyperdecks

`nc ip.ip.ip.ip 9993`
`remote: enable: true ↵`
`record`
`stop`
`play`
`clips get`

```
playrange set: in: 00:00:16:00 out: 00:00:21:00
play: speed:50
```

note: set `timecode output: clip`



### sample workflow

- record (while NOT routing the feed from the hyperdeck to the TV)
- stop, play . . . switch so TV gets audio from hyperdeck (but nowhere else)


### instant replay concept

- two hypers
    - hyper.a
    - hyper.b
- initially
    - hyper.a receives PGM1
    - hyper.b dormant
- request for replay hits
    - hyper.b starts
    - hyper.a stops
    - hyper.a queues to timecode requested
    - atem switches to hyper.a playback audio ONLY
        - pan to one side?
    - atem sends audio at this point (mix minus?)
    - hyper.a play (with speed requested)
    - atem switches to display hyper.a on PGM1
    - somehow audio hits speakers and condensers are cut
    - 


## docs

- documentation on [atem-connection methods](https://nrkno.github.io/sofie-atem-connection/classes/Atem.html#changeProgramInput)



![alt text](https://files.slack.com/files-pri/T0HTW3H0V-F042SQWS0E9/screen_shot_2022-09-18_at_11.29.23_am.png?pub_secret=454c08d6ea)



## to do

### macros

looking like this may be the only way to access cameras . . . also a good way to access everything else.

#### determine macro upload/download structure
do the first and then the second:

```
public async downloadMacro(index: number): Promise<Buffer> {
    return this.dataTransferManager.downloadMacro(index)
}
public async uploadMacro(index: number, name: string, data: Buffer): Promise<void> {
    return this.dataTransferManager.uploadMacro(index, data, name)
}

```

#### can you restore with code?

is there a method for restoring the ATEM based on an XML?