Apologies if it's too similar to another post or in the wrong category, but I don't know what I'm doing!! I see the option to make your own custom window to float above other windows, but I want to figure out how to make an application window float above others. For example, if I wanted my Clock app to float over Firefox while I work. Step by step would be appreciated but not necessary... Thank you..
Hi @mtn71 ,
I don't think BTT has the ability to enable specific macOS applications float above other applications – I'm pretty sure this would require disabling System Integrity Protection (SIP), which some applications do, but I do not recommend doing this due to serious security risks.
Instead, I suggest you look into BTT's Floating Menus and Custom WebView / HTML Renderer. Using these, you can define any custom HTML, CSS, and JavaScript to display in a webview that can float anywhere on your screen.
For example, I created new floating menu with a single WebView type item and then defined some HTML, CSS, and JavaScript that displays an analog clock. I made it only visible when Firefox is the active app.
You can download this configuration here:
Firefox_export_clock_floating_menu.bttpreset (16.6 KB)
Or, you can copy and paste this JSON into the BTT configuration GUI:
[
{
"BTTAppBundleIdentifier" : "org.mozilla.firefox",
"BTTAppName" : "Firefox",
"BTTAppAutoInvertIcon" : 1,
"BTTAppProcessMatchMode" : 2,
"BTTAppProcessName" : "Firefox",
"BTTTriggers" : [
{
"BTTActionCategory" : 0,
"BTTLastUpdatedAt" : 1745679798.9205551,
"BTTTriggerType" : 767,
"BTTTriggerTypeDescriptionReadOnly" : "Floating Menu",
"BTTTriggerClass" : "BTTTriggerTypeFloatingMenu",
"BTTUUID" : "2049BFED-B7D3-4FF1-917C-929B13F613E5",
"BTTEnabled" : 1,
"BTTOrder" : 1,
"BTTTriggerName" : "Floating Menu: clock_floating_menu",
"BTTMenuItems" : [
{
"BTTActionCategory" : 0,
"BTTLastUpdatedAt" : 1745679798.920512,
"BTTTriggerType" : 778,
"BTTTriggerTypeDescriptionReadOnly" : "Web View \/ HTML Item",
"BTTTriggerTypeDescription" : "Standard Item",
"BTTTriggerParentUUID" : "2049BFED-B7D3-4FF1-917C-929B13F613E5",
"BTTTriggerClass" : "BTTTriggerTypeFloatingMenu",
"BTTUUID" : "AB61AE52-D351-4F58-8D21-ED9220333A4D",
"BTTEnabled" : 1,
"BTTOrder" : 0,
"BTTTriggerName" : "Webview Menu Item: Webview",
"BTTMenuConfig" : {
"BTTMenuItemMaxHeight" : 200,
"BTTMenuItemSelectedTab" : 0,
"BTTMenuItemMinWidth" : 100,
"BTTMenuAlwaysUseLightMode" : 1,
"BTTMenuItemBackgroundColorDark" : "108.442, 96.000, 190.435, 166.991",
"BTTMenuElementIdentifier" : "Webview",
"BTTMenuUseStyleForSubmenu" : 0,
"BTTMenuItemVisibleWhileInactive" : 1,
"BTTMenuCategoryBackground" : 1,
"BTTMenuItemBorderColorHover" : "255.000000, 255.000000, 255.000000, 255.000000",
"BTTMenuItemBackgroundTypeDark" : 4,
"BTTLastChangeUUID" : "06205725-E7C9-46DA-88FA-3683CD762D38",
"BTTMenuItemBackgroundType" : 0,
"BTTMenuAppearanceStyle" : 0,
"BTTMenuItemBackgroundColorHoverDark" : "90, 90.000, 180, 166.991",
"BTTMenuItemBorderColorHoverDark" : "255.000000, 255.000000, 255.000000, 255.000000",
"BTTMenuCategoryItemSizing" : 1,
"BTTMenuItemBackgroundColor" : "108.442, 96.000, 190.435, 166.991",
"BTTMenuItemBackgroundColorHover" : "90, 90.000, 180, 166.991",
"BTTMenuItemMinHeight" : 50,
"BTTMenuItemBorderColorDark" : "255.000000, 255.000000, 255.000000, 255.000000",
"BTTMenuHoverEndAnimationDuration" : 0.14999999999999999,
"BTTMenuItemBorderColor" : "255.000000, 255.000000, 255.000000, 255.000000",
"BTTMenuAttributedText" : "{\\rtf1\\ansi\\ansicpg1252\\cocoartf2822\n\\cocoatextscaling0\\cocoaplatform0{\\fonttbl\\f0\\fnil\\fcharset0 HelveticaNeue;}\n{\\colortbl;\\red255\\green255\\blue255;\\red255\\green255\\blue255;}\n{\\*\\expandedcolortbl;;\\cssrgb\\c100000\\c100000\\c100000;}\n\\deftab720\n\\pard\\pardeftab720\\qc\\partightenfactor0\n\n\\f0\\fs44 \\cf2 \\expnd0\\expndtw0\\kerning0\nWebview}",
"BTTMenuTextMinimumScaleFactor" : 0.29999999999999999,
"BTTMenuHoverStartAnimationDuration" : 0.14999999999999999,
"BTTMenuItemText" : "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>Analog Clock<\/title>\n <style>\n body {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100vh;\n margin: 0;\n background: #f0f0f0;\n }\n #clock-container {\n width: 200px;\n height: 200px;\n }\n #clock {\n width: 100%;\n height: 100%;\n background: white;\n border: 2px solid #333;\n border-radius: 50%;\n box-shadow: inset 0 0 10px rgba(0,0,0,0.1);\n }\n <\/style>\n<\/head>\n<body>\n <div id=\"clock-container\" class=\"BTTDraggable\">\n <canvas id=\"clock\" width=\"200\" height=\"200\" class=\"BTTDraggable\"><\/canvas>\n <\/div>\n\n <script>\n const canvas = document.getElementById('clock');\n const ctx = canvas.getContext('2d');\n const radius = canvas.height \/ 2;\n ctx.translate(radius, radius);\n\n function drawClock() {\n drawFace(ctx, radius);\n drawNumbers(ctx, radius);\n drawTime(ctx, radius);\n }\n\n function drawFace(ctx, radius) {\n ctx.beginPath();\n ctx.arc(0, 0, radius, 0, 2 * Math.PI);\n ctx.fillStyle = 'white';\n ctx.fill();\n\n const grad = ctx.createRadialGradient(0, 0, radius * 0.95, 0, 0, radius * 1.05);\n grad.addColorStop(0, '#333');\n grad.addColorStop(0.5, 'white');\n grad.addColorStop(1, '#333');\n ctx.strokeStyle = grad;\n ctx.lineWidth = radius * 0.1;\n ctx.stroke();\n\n ctx.beginPath();\n ctx.arc(0, 0, radius * 0.1, 0, 2 * Math.PI);\n ctx.fillStyle = '#333';\n ctx.fill();\n }\n\n function drawNumbers(ctx, radius) {\n ctx.font = `${radius * 0.15}px Arial`;\n ctx.textBaseline = 'middle';\n ctx.textAlign = 'center';\n for (let num = 1; num <= 12; num++) {\n const ang = num * Math.PI \/ 6;\n ctx.rotate(ang);\n ctx.translate(0, -radius * 0.85);\n ctx.rotate(-ang);\n ctx.fillText(num.toString(), 0, 0);\n ctx.rotate(ang);\n ctx.translate(0, radius * 0.85);\n ctx.rotate(-ang);\n }\n }\n\n function drawTime(ctx, radius) {\n const now = new Date();\n let hour = now.getHours();\n let minute = now.getMinutes();\n let second = now.getSeconds();\n\n \/\/ Hour hand\n hour = hour % 12;\n const hourPos = (hour * Math.PI \/ 6) + (minute * Math.PI \/ (6 * 60)) + (second * Math.PI \/ (360 * 60));\n drawHand(ctx, hourPos, radius * 0.5, radius * 0.07);\n\n \/\/ Minute hand\n const minutePos = (minute * Math.PI \/ 30) + (second * Math.PI \/ (30 * 60));\n drawHand(ctx, minutePos, radius * 0.8, radius * 0.07);\n\n \/\/ Second hand\n const secondPos = second * Math.PI \/ 30;\n drawHand(ctx, secondPos, radius * 0.9, radius * 0.02, 'red');\n }\n\n function drawHand(ctx, pos, length, width, color = '#333') {\n ctx.beginPath();\n ctx.lineWidth = width;\n ctx.lineCap = 'round';\n ctx.strokeStyle = color;\n ctx.moveTo(0, 0);\n ctx.rotate(pos);\n ctx.lineTo(0, -length);\n ctx.stroke();\n ctx.rotate(-pos);\n }\n\n \/\/ Update clock every second\n setInterval(drawClock, 1000);\n \/\/ Initial draw\n drawClock();\n <\/script>\n<\/body>\n<\/html>\n",
"BTTMenuItemMaxWidth" : 200,
"BTTMenuItemVisibleWhileActive" : 1,
"BTTMenuItemIconColor1" : "255.000000, 255.000000, 255.000000, 255.000000"
},
"BTTMenuAvailability" : 0,
"BTTMenuName" : "Webview",
"BTTGestureNotes" : "Standard Item"
}
],
"BTTFloatingMenuRenderedPreview" : "_9j_4AAQSkZJRgABAQAASABIAAD_4QBMRXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAyKADAAQAAAABAAAAyAAAAAD_7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+_8AAEQgAyADIAwEiAAIRAQMRAf_EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC__EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29_j5+v_EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC__EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29_j5+v_bAEMAAgICAgICAwICAwUDAwMFBgUFBQUGCAYGBgYGCAoICAgICAgKCgoKCgoKCgwMDAwMDA4ODg4ODw8PDw8PDw8PD__bAEMBAgICBAQEBwQEBxALCQsQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEP_dAAQADf_aAAwDAQACEQMRAD8A_cvx5410j4f+GLvxPrLYitwAiD70sjcKi+5P5Dk8V8IXf7YPxBa6lNjp2nrblj5YkikLhe24iUAn6V1f7ZPiiVr7QvBsMhEccb3syg8MzExx5HthsfWvh8kKCzHAFAH1b_w2B8TP+fDTP+_Mv_x2j_hsD4mf8+Gmf9+Zf_jtfJf2u1_56r+dH2u1_wCeq_nQB9af8NgfEz_nw0z_AL8y_wDx2j_hsD4mf8+Gmf8AfmX_AOO18l_a7X_nqv50fa7X_nqv50AfWn_DYHxM_wCfDTP+_Mv_AMdo_wCGwPiZ_wA+Gmf9+Zf_AI7XyX9rtf8Anqv50fa7X_nqv50AfWn_AA2B8TP+fDTP+_Mv_wAdo_4bA+Jn_Phpn_fmX_47XyX9rtf+eq_nR9rtf+eq_nQB9af8NgfEz_nw0z_vzL_8do_4bA+Jn_Phpn_fmX_47XyX9rtf+eq_nUqSJIu6Ngw9RQB9X_8ADYHxM_58NM_78y__AB2j_hsD4mf8+Gmf9+Zf_jtfKdFAH1Z_w2B8TP8Anw0z_vzL_wDHaP8AhsD4mf8APhpn_fmX_wCO18p0UAfVn_DYHxM_58NM_wC_Mv8A8do_4bA+Jn_Phpn_AH5l_wDjtfKdFAH1Z_w2B8TP+fDTP+_Mv_x2j_hsD4mf8+Gmf9+Zf_jtfKdFAH1Z_wANgfEz_nw0z_vzL_8AHaP+GwPiZ_z4aZ_35l_+O18p0UAfVn_DYHxM_wCfDTP+_Mv_AMdqxaftg_EFbqI32nae1uGHmCOKQOV77SZSAfrXyXRQB+0fgPxrpHxB8MWnifRmzFcAh0P3opF4ZG9wfzHI4NdjXwV+xt4olW+13wbNITHJGl7CpPCspEcmB75XP0r71oA__9D6i_aY1JtR+MetLkFbNLe3XHYLErH_AMeY1806vOcrAp46n+le2fGubz_i14rkznF_Iv8A3xhf6V4JqLFryT_ZwPyFAFKiiigAoopCQASTgCgBaK8gv_jr8NdO1U6RNqgeUMVLphogRwcuDivVrO8tdQtYr2xlWe3nUMkiEMrKehBHBoAs0UUUAFaOmTmK4CE_LJx+Pas6nxsUkVx_CQaAO1ooooAKKKKACiiigAooooAKKKKACiiigD3r9mfUm074x6KuQFvEuLds9w0TMP8Ax5RX6tV+PfwUm8j4teFJM4zfxr_33lf61+wlAH__0fa_i5_yVPxb_wBhS7_9GGvDLs5upT_tGvc_i5_yVPxb_wBhS7_9GGvC7r_j5l_3j_OgCCiiigAr5d_aW+Is_h7RYPBukOVvtYUtMwGSluDjA9C54+gPSvqIflXwZYLF8QfiP4x+J2q_vdI8KRyyQK3zI7QKwgXnIx8u847nigD5POcnd196+uf2ZPiJc6fq7fD7VnJtr7MtoWHKSgZK564ZRke47VxXh_4dQapH4TsrxN154m0zVrwsVBbzAG8g888bQfxOKh1HSbiL4ceEvi5ooMeoaNMLK82jB3W8h8l2Iwc4whz2wKAP0lorL0PVoNe0Ww1u1IMV_BHOuOeJFDY_DOK1KACiig9KAO2Q5RT6gU6mR_6tP90fyp9ABRRRQAUUUUAFFFFABRRRQAUUUUAeh_CP_kqfhL_sKWn_AKMFfsjX43fCP_kqfhL_ALClp_6MFfsjQB__0va_i5_yVPxb_wBhS7_9GGvC7r_j5l_3j_OvdPi5_wAlT8W_9hS7_wDRhrwu6_4+Zf8AeP8AOgCCiiigDjfiJrZ8OeBde1pW2va2cpQ+jsu1P_HiK+EPB3jTTLD4F+MvChIi1SZ0dT_FNHO0aH_vnBz9a+ov2lLqVfhuNJtz+91e+tbVQOpyxfH_AI6K+af2gfhd_wAIPqNlr+lDGnXyRwsAANlxEgB6Y++F3dOuaAPoFdOXR_in8LdKAwLTRLmMj3WIA_rXjd14j0rwj8N_iJ4Gvgslw+tT29rCeuJCDvHsm3P1x715tL8cfGc_iDRvE86W0l9olvLbwsyOQyzDDF_nyW9CCKm+G3hfUvjD8SHutUbMRl+237j+7uHyjcT94_L34oA+wP2bNabV_hbZ20rFpNLnmtTnqFB3p+jYr3uvm74L26+HviD8RfB6AJDBeR3cKDgBJtx4A4xgqK+kaACg9KKD0oA7WP8A1af7o_lT6ZH_AKtP90fyp9ABRRRQAUUUUAFFFFABRRRQAUUUUAeh_CP_AJKn4S_7Clp_6MFfsjX43fCP_kqfhL_sKWn_AKMFfsjQB__T9r+Ln_JU_Fv_AGFLv_0Ya8Luv+PmX_eP8690+Ln_ACVPxb_2FLv_ANGGvC7r_j5l_wB4_wA6AIKKKKAPnv41RnU_FXw48PHlLrV_OcdiIAp5_AmpPjvBFqV74D0a4QSQ3uuw+Yh5VlVeQR7g0_x0Dd_HL4d2na3hv7j8QmP6U_4s5l8ffDG27HVZH_74RTQB5p4p+D3gOH4x+GfD9vYGPTtXtrue4hEsmGeIErg7sqPZSBXbeCdE0zwr8efEOh6NAtrZPotrIka9BtZQTz1PvW14r_5L34F_68NQ_wDQTUcYMP7ScvpceHVP_fM+P6UAVdOQ6Z+0rqsa8JrGiRzEDu0TKuf_AB019B14F4hBtf2ifCdwOl7pN5Cf+2e9_wDCvfaACg9KKD0oA7WP_Vp_uj+VPpkf+rT_AHR_Kn0AFFFFABRRRQAUUUUAFFFFABRRRQB6H8I_+Sp+Ev8AsKWn_owV+yNfjd8I_wDkqfhL_sKWn_owV+yNAH__1Pa_i5_yVPxb_wBhS7_9GGvC7r_j5l_3j_OvdPi5_wAlT8W_9hS7_wDRhrwu6_4+Zf8AeP8AOgCCiiigD5K+NXjaPwD8XfC_iSW2N2trp1wPLDbM+czJnOD0+leXeK_2grbxH4p8K+IU0gxL4duJZ2jMufM8xQuM7eMY969R+NXgqLx58XfC3hyaY26XWnXBLqcH90zPjkN_KvLvFfwAtPDvirwr4fj1B5I_EVxLCzkjKeWobI+Qdc+hoAdq_wC0Jban8QtA8arpBRNGt7iExebkv54Iznbxj6Gkk_aDtn+J0Xj8aQRGmmmwMPm8kly+7dt_DGPxo1j9n+0034h6B4LTUHaLWLe4maQsNymAE4HyY5+hpJP2f7VfifF4BGoOYn0035kyNwIcptzsx+n40Adh4e+K0HxO+Nfg68hsTY_YY7yEgvv3eZGx9B0xX2tXxT4e+Fdt8M_jX4Os7e6a6+3RXkxLEHb5cbDsq+tfa1ABQelFB6UAdrH_AKtP90fyp9Mj_wBWn+6P5U+gAooooAKKKKACiiigAooooAKKKKAPQ_hH_wAlT8Jf9hS0_wDRgr9ka_G74R_8lT8Jf9hS0_8ARgr9kaAP_9X2v4uf8lT8W_8AYUu__Rhrwu6_4+Zf94_zr3T4uf8AJU_Fv_YUu_8A0Ya8Luv+PmX_AHj_ADoAgooooA8C8dE2nxy+Hd50W4hv7f8AEoSP50_4skxePvhjcdv7Vlj_AO+0UVV+Nch0zxV8OPEHRbbV_IY+04Uf0NS_HaaPT7_wDq0x2R2evQ72P8KsOT+QoAteK_8AkvfgX_rw1D_0E1FGTN+0nLjpb+HQD_wKfP8AWvPPFXxZ8CyfGfwvrkOoCSw0m2vILiYI21HlBCjBGTz6Cux8G6xp_iX4+eIdY0mYXNpHotqiSLkA7mVu4BoAv+ISbv8AaJ8J268iy0m8mPtv3p_hXvtfPenOdT_aV1SQcpo+iRw_RpWVv_ZjX0JQAUHpRQelAHax_wCrT_dH8qfTI_8AVp_uj+VPoAKKKKACiiigAooooAKKKKACiiigD0P4R_8AJU_CX_YUtP8A0YK_ZGvxu+Ef_JU_CX_YUtP_AEYK_ZGgD__W9r+Ln_JU_Fv_AGFLv_0Ya8Luv+PmX_eP8690+Ln_ACVPxb_2FLv_ANGGvC7r_j5l_wB4_wA6AIKKKKAPn_8AaUtJn+G41W3BMukX1tdAjthimf8Ax4V84ftB_FSPxrd2Hh3SGV9PtEiuHdSTvuJY847DCBsd+c_Svtz4iaIfEfgTXtFVdz3NnKEH+2q7k_8AHgK+DPB_gfTtR+CPjHxg+JdTt3SOMZOYUhaN2OOmWB_IUAcpL8G_HcGuaV4cms1TUNZhlnt4zKnKRDLZOcA+xwa2vhX4t1D4R_EZ7LWY_Khkk+xX6MfuDd97Iz9w89ORnp1r6iXUV1n4p_C3VAci70S5kJ92iBP614tfeGNM8YfDr4hePrwql1DrU89tKSRlEIBTjj5g2B746UAe3fBe4XxD8QPiL4xjIkgnvI7SGQcqyQ7hwe_AU19IV4H+zZoraT8LrS6lXbJqk810fUqTsT9FzXvlABQelFB6UAdrH_q0_wB0fyp9Mj_1af7o_lT6ACiiigAooooAKKKKACiiigAooooA9D+Ef_JU_CX_AGFLT_0YK_ZGvxu+Ef8AyVPwl_2FLT_0YK_ZGgD_1_a_i5_yVPxb_wBhS7_9GGvC7r_j5l_3j_OvdPi5_wAlT8W_9hS7_wDRhrwy7GLqUf7RoAr0UUUAAr4MsWi+HvxG8ZfDPVz5Gj+Kopkgd+FVplYwNnpjLFDnAB64xX3nXy7+0r8OZ_EOjQeM9HjLX+jrtlVAd7wE5yMd4zz9CeeKAPAvD3xEh0yLwnfXThbvw1per2ZU5z5hB8gfjuA_CoNQ1aef4b+EvhLoR87UNZm+23gXk755D5SHt93DHnjAzivAmLMxZySxOST1JNfXX7Mvw7udS1g_EHWEJt7EGO0DgkvKV27wTxhBwOvPpigD7V0PSrfQtGsNEtf9TYQRwL9I1C5_HFalFFABQelFFAHax_6tP90fyp9NThFHoBTqACiiigAooooAKKKKACiiigAooooA9D+Ef_JU_CX_AGFLT_0YK_ZGvxu+Ef8AyVPwl_2FLT_0YK_ZGgD_0Pa_i5_yVPxb_wBhS7_9GGvEdRXbeSe5B_MV7d8XP+Sp+Lf+wpd_+jDXj2rwnck46EYNAGLRRRQAUhAIwRkGlooA8f1D4F_DnUtXOrz6aod2LPGuBG7HklhjP616xaWltY20VnZxiGCFQiIvAVRwAKsUUAFFFFABTkUu6oOSxA_Om1oabCZblW_hTk_0oA6jGOKKKKACiiigAooooAKKKKACiiigAooooA9D+Ef_ACVPwl_2FLT_ANGCv2Rr8bvhH_yVPwl_2FLT_wBGCv2RoA__0fa_i5_yVPxb_wBhS7_9GGvOmRXUqwyDXqXxrh8j4teK48YzfyN_33hv615fQBT_ALPs_wDnkPzNH9n2f_PIfmauUUAU_wCz7P8A55D8zR_Z9n_zyH5mrlFAFP8As+z_AOeQ_M0f2fZ_88h+Zq5RQBT_ALPs_wDnkPzNH9n2f_PIfmauUUAU_wCz7P8A55D8zViKKOFdsa7RUlFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHofwj_5Kn4S_7Clp_wCjBX7I1+PfwUh8_wCLXhSPGcX8bf8AfGW_pX7CUAf_0vqL9pjTW074x602AFvEt7hcdw0Sqf8Ax5TXgtfb_wC2T4XlW+0LxlDGTHJG9lMwHCspMkeT75bH0r4goAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD3r9mfTW1H4x6K2AVs0uLhs9gsTKP_HmFfq1XwV+xt4Xla+13xlNGRHHGllCxHDMxEkmD7YXP1r71oA__9P9y_HngrSPiB4Yu_DGsrmK4AKOPvRSLyrr7g_mODxXwhd_sffEFbqUWOo6e1uGPlmSWQOV7bgIiAfpX6QUUAfmv_wx_wDEz_n_ANM_7_S__GqP+GP_AImf8_8Apn_f6X_41X6UUUAfmv8A8Mf_ABM_5_8ATP8Av9L_APGqP+GP_iZ_z_6Z_wB_pf8A41X6UUUAfmv_AMMf_Ez_AJ_9M_7_AEv_AMao_wCGP_iZ_wA_+mf9_pf_AI1X6UUUAfmv_wAMf_Ez_n_0z_v9L_8AGqP+GP8A4mf8_wDpn_f6X_41X6UUUAfmv_wx_wDEz_n_ANM_7_S__GqP+GP_AImf8_8Apn_f6X_41X6UUUAfmv8A8Mf_ABM_5_8ATP8Av9L_APGqP+GP_iZ_z_6Z_wB_pf8A41X6UUUAfmv_AMMf_Ez_AJ_9M_7_AEv_AMao_wCGP_iZ_wA_+mf9_pf_AI1X6UUUAfmv_wAMf_Ez_n_0z_v9L_8AGqP+GP8A4mf8_wDpn_f6X_41X6UUUAfmv_wx_wDEz_n_ANM_7_S__GqP+GP_AImf8_8Apn_f6X_41X6UUUAfmv8A8Mf_ABM_5_8ATP8Av9L_APGqP+GP_iZ_z_6Z_wB_pf8A41X6UUUAfmv_AMMf_Ez_AJ_9M_7_AEv_AMaqxafsffEFrqIX2o6etuWHmGOWQuF77QYgCfrX6QUUAcd4D8FaR8P_AAxaeGNGXEVuCXc_elkblnb3J_IcDiuxoooA_9k=",
"BTTMenuConfig" : {
"BTTMenuUseStyleForSubmenu" : 1,
"BTTMenuVerticalSpacing" : 5,
"BTTMenuHorizontalSpacing" : 5,
"BTTMenuItemBackgroundColor" : "168.213, 183.731, 225.311, 29.612",
"BTTMenuFrameHeight" : 200,
"BTTMenuCategoryItemVisibility" : 0,
"BTTMenuWindowLevel" : 3,
"BTTMenuTextMinimumScaleFactor" : 0.29999999999999999,
"BTTMenuOpacityActive" : 1,
"BTTMenuItemBackgroundType" : 0,
"BTTMenuFrameWidth" : 200,
"BTTMenuItemBlurredBackground" : 1,
"BTTMenuSelectedTab" : 0,
"BTTMenuItemPaddingLeft" : 10,
"BTTMenuCategoryMenuVisibility" : 0,
"BTTMenuCategoryItemIcon" : 0,
"BTTMenuItemBorderWidth" : 2,
"BTTMenuCategoryShadow" : 0,
"BTTMenuItemPaddingTop" : 5,
"BTTMenuOpacityInactive" : 1,
"BTTMenuCategoryItemBehavior" : 0,
"BTTMenuCategoryOnlyShowIf" : 0,
"BTTMenuItemCornerRadius" : 10,
"BTTLastChangeUUID" : "89C8192C-E9B4-4371-9F54-5AE00A469D93",
"BTTMenuItemBorderColorHover" : "0.000, 0.000, 0.000, 0.000",
"BTTMenuCategoryModifiers" : 0,
"BTTMenuShowIfWindowLevelEqualsEnabled" : 0,
"BTTMenuCategoryMenuOpacity" : 0,
"BTTMenuCategoryItemSpacing" : 0,
"BTTMenuItemBorderColor" : "0.000, 0.000, 0.000, 0.000",
"BTTMenuCategorySize" : 0,
"BTTMenuItemsUseModifierModes" : false,
"BTTMenuElementIdentifier" : "clock_floating_menu",
"BTTMenuItemPaddingRight" : 10,
"BTTMenuCategorySpacing" : 0,
"BTTMenuItemShadowEnabled" : 0,
"BTTMenuAppearanceStyle" : 0,
"BTTMenuItemPaddingBottom" : 5,
"BTTMenuAlwaysUseLightMode" : 1,
"BTTMenuCategoryBackground" : 1,
"BTTMenuCategoryItemSizing" : 0,
"BTTMenuAvailability" : -1,
"BTTMenuItemSelectedTab" : 0,
"BTTMenuCategoryResizeOnHover" : 0,
"BTTMenuWindowResizable" : 1,
"BTTMenuCategoryBorder" : 0,
"BTTMenuCategoryZIndex" : 0,
"BTTMenuCategoryPosition" : 0,
"BTTMenuCloseAfterAction" : 0
},
"BTTMenuAvailability" : 0,
"BTTMenuName" : "clock_floating_menu"
}
]
}
]
I hope this helps.
Oh this is incredible, thank you! Would there be any way to do this with a timer instead of a clock?
Definitely – just update the HTML code for the floating menu to display whatever you like.
When you say "timer", what do you mean exactly? Were you thinking of:
- A stopwatch (count-up) with Start/Pause/Reset controls?
- A countdown timer where you enter a target duration and it counts down to zero?
A countdown timer was what I had in mind!
For your use case a floating menu might work great, however you can also try the predefined action
"Toggle Pin/Unpin Focused Window To Float On Top" action:
macOS doesn't really allow to float a window on top, so what this action does is create a live-capture-stream of the original window and floats that "copy" on top.
Oh, this works perfectly for what I was looking for!!! Thank you so much!