• THX1138

    For clarification, I'm talking about this: https://www.unifiedremote.com/remotes/scroll-wheel

    I found this in the GitHub repository which might enable me to infer how it works and replicate it: https://github.com/unifiedremote/Remotes/tree/master/Main/Scroll Wheel

    Is it even possible to use this in custom remotes?

    posted in Q&A read more
  • THX1138

    I became aware of a limitation of the use of a typical touchscreen-based remote control in some situations when compared to a traditional remote comprised of physical dials and buttons, in that with the tactile sensations of typical controls, you can operate the controls whilst viewing the main display which forms an efficient feedback loop, informing subsequent adjustments to the controls.

    For many situations this might not be of any real consequence but for controlling photo and video editing applications, it's an important consideration.

    http://nofilmschool.com/sites/default/files/styles/article_wide/public/uploads/2013/02/apple-Final-Cut-Pro-X-iPad-app-PROCUTX-Pixel-Film-Studios-1.jpg

    You can buy physical knobs and sliders which stick to a touch screen using suckers but they're pretty expensive and/or chunky, blocking a lot of the screen off.

    https://static.keymusic.com/products/228608/XL/tuna-dj-gear-rotary-knobs-for-touchscreens-6-pack-2.jpg

    https://c.slashgear.com/wp-content/uploads/2013/01/image000023-820x420.jpg

    My half-baked idea is maybe a removable screen protector film which could have braille-like indentations pressed into it by applying the film to a suitable surface (maybe 3D-printed?). That would provide some tactile feedback but still allow the entirety of the screen to shine through and not be a hassle to set up and remove when using your tablet for something else.

    These touch screen joysticks meant for mobile gaming are cheap but still block some of the screen and would be a hassle to set up and remove each time:

    https://www.aliexpress.com/item/Smartphone-Mini-Mobile-Joysticks-For-Touch-Screen-Phone-Tablet-Game-Controller-R179T-Drop-shipping/32828533767.html

    https://www.aliexpress.com/item/Untra-Thin-Game-Joystick-Controller-Stick-For-Touch-Screen-Mobile-Phone-Tablet-High-Quality/32825639430.html

    posted in General read more
  • THX1138

    Thanks very much for your response, Nathan and sorry for taking this long to get around to responding. I have so many tabs open in my browser and every day I'm losing the battle against them.

    My experience was the same and the multi key shortcuts were not working. I've fixed the remote lua file and I'm looking into how to update the download link now.

    posted in Projects read more
  • THX1138

    When I use landscape mode on my phone, the menu stays closed but on my tablet the menu opens and I can't find a way to close it. Please see the below screenshot to see what I mean. I would like to be able to use that space to expand my custom remote that I'm working on.

    http://imgur.com/3JhbJLX

    My phone is a Samsung Galaxy S5 with Resurrection Remix ROM 5.8.4 (Android 7.x) and my tablet a Tesco Hudl 2 with stock ROM (Android 5.x).

    posted in Layout read more
  • THX1138

    How does the scroll wheel remote work? I'd like to see if I can copy its functionality for my own remote.

    posted in Q&A read more
  • THX1138

    I can't find the layout and remote files in the .ZIP archive. I'm interested in the function of the finger flick sensor button.

    posted in Projects read more
  • THX1138

    I'm working on a remote which can be downloaded here:

    http://s3.amazonaws.com/unifiedremote-community-uploads/40980d27-eaa2-48e3-bcd6-acd66076150a.zip

    The problem is that when the device orientation is changed, the Unified Remote app crashes. This happens for a Samsung Galaxy S5 with Android 7 and Unified Remote 3.10.1 and Tesco Hudl 2 with Android 5 and Unified Remote 3.9.0.

    The Unified Remote server version is 3.6.0.950 (44) and the machine OS is Windows 10 Pro 64-bit.

    Layout

    <?xml version="1.0" encoding="utf-8"?>
    <layout orientation="landscape">
        <grid weight="32" normal="929292" color="242424">
            <row>
                <button ontap="select_tool" image="select_tool.png" scale="fit" />
                <button ontap="shuttle_backward" image="shuttle_backward.png" scale="fit" />
                <button ontap="shuttle_forward" image="shuttle_forward.png" scale="fit" />
                <button ontap="pause" image="pause.png" scale="fit" />
            </row>
            <row>
                <button ontap="hand_tool" image="hand_tool.png" scale="fit" />
                <button ontap="backward_one_frame" image="backward_one_frame.png" scale="fit" />
                <button ontap="forward_one_frame" image="forward_one_frame.png" scale="fit" />            
                <button ontap="play_pause" image="play_pause.png" scale="fit" />            
            </row>
            <row>
                <button ontap="slice_tool" image="slice_tool.png" scale="fit" />
                <button ontap="slice_selected_layer" image="slice_selected_layer.png" scale="fit" />
                <button ontap="toggle_snap" image="toggle_snap.png" scale="fit" />            
                <button ontap="scroll_to_playhead" image="scroll_to_playhead.png" scale="fit" />            
            </row>
            <row>
                <button ontap="rate_stretch_tool" image="rate_stretch_tool.png" scale="fit" />
                <button ontap="decrease_timeline_scale" image="decrease_timeline_scale.png" scale="fit" />
                <button ontap="increase_timeline_scale" image="increase_timeline_scale.png" scale="fit" />            
                <button image="blank.png" scale="fit" />            
            </row>
            <row>
                <button image="blank.png" scale="fit" />
                <button image="blank.png" scale="fit" />
                <button image="blank.png" scale="fit" />
                <button image="blank.png" scale="fit" />            
            </row>
        </grid>
       <button image="blank.png" scale="fill" />
        <grid weight="16" normal="929292" color="242424">
            <row>
                <button image="blank.png" scale="fit" />
                <button ontap="make_composite" image="make_composite.png" scale="fit" />
            </row>
            <row>
                <button ontap="import_media" image="import_media.png" scale="fit" />
                <button ontap="new_plane" image="new_plane.png" scale="fit" />            
            </row>
            <row>
                <button ontap="text_tool" image="text_tool.png" scale="fit" />
                <button ontap="new_text" image="new_text.png" scale="fit" />
            </row>
            <row>
                <button ontap="playhead_to_previous_keyframe" image="playhead_to_previous_keyframe.png" scale="fit" />
                <button ontap="playhead_to_next_keyframe" image="playhead_to_next_keyframe.png" scale="fit" />            
            </row>
            <row>
                <button image="blank.png" scale="fit" />
                <button image="blank.png" scale="fit" />            
            </row>
        </grid>
       <button image="blank.png" scale="fill" />
        <grid weight="8" normal="929292" color="242424">
            <row>
                <button image="media.png" scale="fit" />
            </row>
            <row>
                <button image="effects.png" scale="fit" />
            </row>
            <row>
                <button image="controls.png" scale="fit" />
            </row>
            <row>
                <button image="history.png" scale="fit" />
            </row>
            <row>
                <button image="blank.png" scale="fit" />
            </row>
        </grid>
     </layout>
    

    Remote

    local kb = require("keyboard");
    local keyboard = require("keyboard");
    -------------------------------------------------------------------------------------------------
    [email protected] Moves the playhead backward by one frame
    actions.back_one_frame = function()
        kb.stroke(",");
    end
    
    [email protected] Decreases the scale of the timeline by one increment
    actions.decrease_timeline_scale = function()
        kb.stroke("Ctrl+-");
    end
    
    [email protected] Moves the playhead forward by one frame
    actions.forward_one_frame = function()
        kb.press(".");
    end
    
    [email protected] Selects the hand tool
    actions.hand_tool = function()
        kb.stroke("h");
    end
    -------------------------------------------------------------------------------------------------
    [email protected] Increases the scale of the timeline by one increment
    actions.increase_timeline_scale = function()
        kb.stroke("Ctrl++");
    end
    
    [email protected] Opens the dialogue to create a new Composite Shot from the selected media
    actions.make_composite = function()
        kb.stroke("Ctrl+M");
    end
    
    [email protected] Opens the dialogue to create a new plane layer
    actions.new_plane = function()
        kb.stroke("Ctrl+Alt+A");
    end
    
    [email protected] Opens the dialogue to create a new text layer
    actions.new_text = function()
        kb.stroke("Ctrl+Alt+T");
    end
    [email protected] Pauses playback
    actions.pause = function()
        kb.stroke("k");
    end
    
    [email protected] Toggles playback/pause
    actions.play_pause = function()
        kb.stroke("space");
    end
    
    [email protected] Moves playhead to next keyframe
    actions.playhead_to_next_keyframe = function()
        kb.stroke("alt+.");
    end
    
    [email protected] Moves playhead to previous keyframe
    actions.playhead_to_previous_keyframe = function()
        kb.stroke("alt+,");
    end
    [email protected] Selects the rate stretch tool
    actions.rate_stretch_tool = function()
        kb.stroke("x");
    end
    
    [email protected] Scrolls view of timeline to the playhead
    actions.scroll_to_playhead = function()
        kb.stroke("v");
    end
    
    [email protected] Selects the select tool
    actions.select_tool = function()
        kb.stroke("v");
    end
    
    [email protected] Decrements preview and trimmer playback between -8x, -4x, -2x, -1, 1x, 2x, 4x and 8x speeds
    actions.shuttle_backward = function()
        kb.stroke("j");
    end
    
    [email protected] Increments preview and trimmer playback between -8x, -4x, -2x, -1, 1x, 2x, 4x and 8x speeds
    actions.shuttle_forward = function()
        kb.stroke("l");
    end
    [email protected] Slices selecte layer at position of playhead
    actions.slice_selected_layer = function()
        kb.stroke("ctrl+shift+d");
    end
    
    [email protected] Slices clicked layers at position of cursor
    actions.slice_tool = function()
        kb.stroke("c");
    end
    
    [email protected] Toggles snapping for layers and clips on timeline
    actions.snap_toggle = function()
        kb.stroke("s");
    end
    
    [email protected] Selects text tool for making or editing text layers
    actions.text_tool = function()
        kb.stroke("t");
    end
    

    posted in Android read more
  • THX1138

    This remote causes Unified Remote to crash when the device orientation is changed between portrait and landscape. This problem happens on two different devices running Android 5.x and 7.x so I'm confident it is reproducible.

    Hitfilm Pro and Express 2017 remote

    An in-progress remote to simulate a selection of commonly-used keyboard shortcuts in the video compositor and editor called Hitfilm Pro and Hitfilm Express 2017. The keyboard is configured to use the default shortcuts for these functions. If you have changed the shortcuts from their defaults then you will need to adjust the remote.lua file accordingly (it should be pretty obvious after a couple of minutes scrolling through).

    The shortcuts to the Media, Effects, Controls and History tabs are non-functional because there are no keyboard shortcuts for these at this time but I have made a feature request and will update the remote if this wish gets granted (or else remove the buttons).

    Screenshot_2017-08-20-19-52-51[1].png

    Features

    • Timeline zoom in button
    • Timeline zoom out button
    • And more..!

    Requirements

    Unified Remote (paid version)
    Hitfilm Pro or Express

    Setup

    See: https://www.unifiedremote.com/tutorials/how-to-install-a-custom-remote

    Todo

    • Will make the Media, Effects, Controls and History tabs functional if FX Home add keyboard shortcuts to those tabs
    • Am looking into the possibility of some kind of scrubbing bar at the bottom to allow scrubbing the timeline like a fancy shuttle/jog controller
    • Trying to find out why Unified Remote crashes when change screen orientation

    Download

    Hitfilm.zip

    posted in Projects read more
  • THX1138

    When I use landscape mode on my phone, the menu stays closed but on my tablet the menu opens and I can't find a way to close it. Please see the below screenshot to see what I mean. Is there a way to get that menu to collapse? I would like to be able to use that space to expand my custom remote that I'm working on.

    http://imgur.com/3JhbJLX

    My phone is a Samsung Galaxy S5 with Resurrection Remix ROM 5.8.4 (Android 7.x) and my tablet a Tesco Hudl 2 with stock ROM (Android 5.x).

    posted in Q&A read more
  • THX1138

    The orientation="landscape" option for the layout tag doesn't seem to do anything for my remote on Android; it just displays in portrait. Nathan the moderator says it doesn't work for him either.

    The app is up-to-date and my ROM is Resurrection Remix 5.8.2 (Nougat).

    posted in Android read more
  • THX1138

    It doesn't seem to work for me either. :(

    I wonder if I can work around it by reconfiguring my layout and turning my images on their sides.

    posted in Q&A read more
  • THX1138

    I left ontap="" as a placeholder in a button, intending to fill it with a function later. I noticed that when such buttons are tapped, the program freezes and has to be forced to close.

    posted in Android read more
  • THX1138

    At the bottom of the screen where remotes can be added or removed are two buttons ("Select all" and "Deselect all") which I think very few people will find useful since they only clutter up the list of remotes with unwanted ones or empty the list completely. If someone should accidentally press either, their list of remotes is ruined with no recourse but to start again which is an arduous process given that after each remote is added, it takes you back to your personal list of remotes.

    The options could be tucked away somewhere or at the very least confirmation could be asked before messing up the users list of remotes.

    posted in App read more
  • THX1138

    Edit: The answer was mistyped image file names and a missing </grid> thing. Unfortunately the program gives no indication as to what is wrong and just doesn't display the remote. It would be a lot more useful to just not display the affected images if a file is named incorrectly.

    What can cause a custom remote not to appear in Unified Remote? I've restarted the app, my phone and the server on my PC. The files are at C:\ProgramData\Unified Remote\Remotes\Custom\Hitfilm and I expected to find my remote in the other section. My icon is 64x64 and hires is 512x510 like the example files. I have a meta file, layout.xml and remote.lua an they're all modified from existing remotes so the syntax or whatever should be fine.

    I have put all the files here and the download is about 150 kB: https://app.box.com/s/pvd39az068iui239f2hjqpc2otreh01j

    (I've already followed the instructions here: https://www.unifiedremote.com/tutorials/how-to-install-a-custom-remote)

    Layout file

    <?xml version="1.0" encoding="utf-8"?>
    <layout orientation="landscape">
        <grid weight="4" normal="242424" color="929292">
            <row>
                <button ontap="select_tool" image="select_tool.png" scale="fit" />
                <button ontap="shuttle_backward" image="shuttle_backward.png" scale="fit" />
                <button ontap="shuttle_forward" image="shuttle_forward.png" scale="fit" />
                <button ontap="pause" image="pause.png" scale="fit" />
            </row>
            <row>
                <button ontap="hand_tool" image="hand_tool.png" scale="fit" />
                <button ontap="backward_one_frame" image="backward_one_frame.png" scale="fit" />
                <button ontap="forward_one_frame" image="forward_one_frame.png" scale="fit" />            
                <button ontap="play_pause" image="play_pause.png" scale="fit" />            
            </row>
            <row>
                <button ontap="slice_tool" image="slice_tool.png" scale="fit" />
                <button ontap="slice_selected_layer" image="slice_selected_layer.png" scale="fit" />
                <button ontap="toggle_snap" image="toggle_snap.png" scale="fit" />            
                <button ontap="move_to_playhead" image="move_to_playhead.png" scale="fit" />            
            </row>
            <row>
                <button ontap="rate_stretch_tool" image="rate_stretch_tool.png" scale="fit" />
                <button ontap="decrease_timeline_scale" image="decrease_timeline_scale.png" scale="fit" />
                <button ontap="increase_timeline_scale" image="increase_timeline_scale.png" scale="fit" />            
                <button image="blank.png" scale="fit" />            
            </row>
            <row>
                <button image="blank.png" scale="fit" />
                <button image="blank.png" scale="fit" />
                <button image="blank.png" scale="fit" />
                <button image="blank.png" scale="fit" />            
            </row>
        </grid>
       <button image="blank.png" scale="fit" />
        <grid weight="2">
            <row>
                <button image="blank.png" scale="fit" />
                <button ontap="make_composite" image="make_composite.png" scale="fit" />
            </row>
            <row>
                <button ontap="import_media" image="import_media.png" scale="fit" />
                <button ontap="new_plane" image="new_plane.png" scale="fit" />            
            </row>
            <row>
                <button ontap="text_tool" image="text_tool.png" scale="fit" />
                <button ontap="new_text" image="new_text.png" scale="fit" />
            </row>
            <row>
                <button ontap="playhead_to_previous_keyframe" image="playhead_to_previous_keyframe.png" scale="fit" />
                <button ontap="playhead_to_next_keyframe" image="playhead_to_next_keyframe.png" scale="fit" />            
            </row>
            <row>
                <button image="blank.png" scale="fit" />
                <button image="blank.png" scale="fit" />            
            </row>
       <button image="blank.png" scale="fit" />
        <grid weight="1">
            <row>
                <button text="MEDIA" scale="fit" />
            </row>
            <row>
                <button text="EFFECTS" scale="fit" />
            </row>
            <row>
                <button text="CONTROLS" scale="fit" />
            </row>
            <row>
                <button text="HISTORY" scale="fit" />
            </row>
            <row>
                <button image="blank.png" scale="fit" />
            </row>
        </grid>
     </layout>
    

    Remote file

    local kb = require("keyboard");
    local keyboard = require("keyboard");
    -------------------------------------------------------------------------------------------------
    [email protected] Moves the playhead backward by one frame
    actions.back_one_frame = function()
        kb.stroke(",");
    end
    
    [email protected] Decreases the scale of the timeline by one increment
    actions.decrease_timeline_scale = function()
        kb.stroke("Ctrl+-");
    end
    
    [email protected] Moves the playhead forward by one frame
    actions.forward_one_frame = function()
        kb.press(".");
    end
    
    [email protected] Selects the hand tool
    actions.hand_tool = function()
        kb.stroke("h");
    end
    -------------------------------------------------------------------------------------------------
    [email protected] Increases the scale of the timeline by one increment
    actions.increase_timeline_scale = function()
        kb.stroke("Ctrl++");
    end
    
    [email protected] Opens the dialogue to create a new Composite Shot from the selected media
    actions.make_composite = function()
        kb.stroke("Ctrl+M");
    end
    
    [email protected] Opens the dialogue to create a new plane layer
    actions.new_plane = function()
        kb.stroke("Ctrl+Alt+A");
    end
    
    [email protected] Opens the dialogue to create a new text layer
    actions.new_text = function()
        kb.stroke("Ctrl+Alt+T");
    end
    [email protected] Pauses playback
    actions.pause = function()
        kb.stroke("k");
    end
    
    [email protected] Toggles playback/pause
    actions.play_pause = function()
        kb.stroke("space");
    end
    
    [email protected] Moves playhead to next keyframe
    actions.playhead_to_next_keyframe = function()
        kb.stroke("alt+.");
    end
    
    [email protected] Moves playhead to previous keyframe
    actions.playhead_to_previous_keyframe = function()
        kb.stroke("alt+,");
    end
    [email protected] Selects the rate stretch tool
    actions.rate_stretch_tool = function()
        kb.stroke("x");
    end
    
    [email protected] Selects the select tool
    actions.select_tool = function()
        kb.stroke("v");
    end
    
    [email protected] Decrements preview and trimmer playback between -8x, -4x, -2x, -1, 1x, 2x, 4x and 8x speeds
    actions.shuttle_back = function()
        kb.stroke("j");
    end
    
    [email protected] Increments preview and trimmer playback between -8x, -4x, -2x, -1, 1x, 2x, 4x and 8x speeds
    actions.shuttle_forward = function()
        kb.stroke("l");
    end
    [email protected] Slices selecte layer at position of playhead
    actions.slice_selected_layer = function()
        kb.stroke("ctrl+shift+d");
    end
    
    [email protected] Slices clicked layers at position of cursor
    actions.slice_tool = function()
        kb.stroke("c");
    end
    
    [email protected] Toggles snapping for layers and clips on timeline
    actions.snap_toggle = function()
        kb.stroke("s");
    end
    
    [email protected] Selects text tool for making or editing text layers
    actions.text_tool = function()
        kb.stroke("t");
    end
    

    posted in Q&A read more
  • THX1138

    Do you think that maybe the scroll wheel remote has implications for this? I'm not sure where to find information on how this works but that's neither horizontal nor vertical, suggesting some underlying flexibility exists.

    posted in Layout read more
  • THX1138

    I think you could make the letters PNG images and then used the scale fit or fill options to fill the available space.

    Like

    <button ontap="type_a" image="letter_a.png" scale="fit" />
    

    posted in Layout read more
  • THX1138

    Is it possible to have different active and toggle colors if you're using PNG images on your buttons instead of text and icons? Ideally I'd have the colour of a transparent background PNG change whilst the button behind the PNG stays the same color.

    posted in Q&A read more
  • THX1138

    The app store says it's still getting updated but there's no way to tell how substantial the updates are (could just change a 1 to a 0 and update that, I figure). Maybe there's an update log.

    posted in Remotes read more
  • THX1138

    Could it be possible to scrub/scroll with a bar that you swipe? I know that VLC advanced remote has a progress bar that lets you move between points in the video but the problem is that you have to remove your finger or thumb (hereafter 'appendage') from the screen for the play position to update. Ideally, it would update without taking your appendage off the touchscreen, allowing you to search for a point much more quickly.

    In a similar way, is it possible to be able to swipe multiple times kind of like you do when scrolling up and down a webpage on a phone screen, moving, say, 10% of the page with one full swipe from the top to the bottom of the screen?

    My interest is for a video editor program I use for which I'd like to make a remote. Fancy professional interfaces for these programs is expensive so it'd be cool to make something out of a device many people already own.

    posted in Q&A read more
  • THX1138

    Is it possible to change the background colour for behind the buttons?

    posted in Q&A read more
Internal error.

Oops! Looks like something went wrong!