{"id":32483,"date":"2023-03-08T16:29:03","date_gmt":"2023-03-08T15:29:03","guid":{"rendered":"https:\/\/mimolive.com\/?post_type=user-manual&#038;p=32483"},"modified":"2025-06-16T19:35:00","modified_gmt":"2025-06-16T17:35:00","slug":"mando-a-distancia-preajustes-api","status":"publish","type":"user-manual","link":"https:\/\/mimolive.com\/es\/user-manual\/custom-layers\/remote-control-presets-api\/","title":{"rendered":"API de preselecciones de control remoto"},"content":{"rendered":"<p>Si est\u00e1 creando una capa personalizada, existe la posibilidad de incluir preajustes de control personalizados con su capa. Esto es \u00fatil si la capa tiene botones que controlan el comportamiento de la capa cuando est\u00e1 activa.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"data-structure\">Estructura de datos<\/h3>\n\n\n\n<p>La siguiente estructura de datos es un ejemplo de salida que debe estar presente en su composici\u00f3n bajo la clave de salida de la estructura `tvOut_ControlRepresentations`:<\/p>\n\n\n\n<pre class=\"wp-block-code\" data-no-translation=\"\"><code>{\n  \"tvOut_ControlRepresentations\": &#91;\n    {\n      \"title\": \"Compact Cut's\",\n      \"buttons\": &#91;\n        {\n          \"actions\": &#91;\n            {\n              \"layerId\": \"03627C25-CC8A-474F-A738-C4DEB3353FA4\",\n              \"variantId\": \"F6F52194-06DE-462E-983A-8D505C533A69\",\n              \"type\": \"signal\",\n              \"signalKey\": \"tvGroup_Control__Cut_1_TypeSignal\",\n              \"signalName\": \"Cut 1\"\n            }\n          ],\n          \"liveState\": {\n            \"layerId\": \"03627C25-CC8A-474F-A738-C4DEB3353FA4\",\n            \"variantId\": \"F6F52194-06DE-462E-983A-8D505C533A69\",\n            \"dynamicSourceId\": \"tvIn_VideoSourceAImage\"\n          },\n          \"sourcePreview\": {\n            \"layerId\": \"03627C25-CC8A-474F-A738-C4DEB3353FA4\",\n            \"variantId\": \"F6F52194-06DE-462E-983A-8D505C533A69\",\n            \"dynamicSourceId\": \"tvIn_VideoSourceAImage\"\n          },\n          \"color\": \"#BBBBBB\",\n          \"width\": 1,\n          \"height\": 1,\n          \"x\": 0,\n          \"y\": 0,\n          \"icon\": \"facetime-video\",\n          \"dynamicText\": {\n            \"template\": \"{{inputputValues.tvIn_VideoSourceAName}}\",\n            \"layerId\": \"03627C25-CC8A-474F-A738-C4DEB3353FA4\",\n            \"variantId\": \"F6F52194-06DE-462E-983A-8D505C533A69\"\n          }\n        }\n      ]\n    }\n  ]\n}<\/code><\/pre>\n\n\n\n<p>Un preajuste tiene un \"t\u00edtulo\" y una serie de \"botones\", pero un solo bot\u00f3n tambi\u00e9n est\u00e1 bien.<\/p>\n\n\n<section class=\"boinx_section\">\n    <div class=\"main_div\">\n        <div class=\"left_div_icon\">\n                <i class=\"icon_highlight\">*<\/i>\n        <\/div>\n\n        <div class=\"right_div_text\">\n                <div><p class=\"text_highlight_headline\"><\/p><\/div>\n                <div><p class=\"text_highlight\">Las claves `layerId` y `variantId` deben rellenarse din\u00e1micamente con los datos de cadena de las claves de entrada de composici\u00f3n `tvIn_LayerIdentifier` y `tvIn_RuntimeIdentifier`.<\/p><\/div>\n        <\/div>    \n    <\/div>\n<\/section>\n\n\t\t<style>.boinx_section {\n    margin:30px 0;\n    padding:10px;\n    background-color:rgb(217,237,248);\n    border-radius: 8px;\n  \n}\n\n.icon_highlight {\n    display:block;\n    padding:5px;\n    font-size:80px;\n    color:rgb(58,134,172);\n    line-height:60px;\n}\n\n.text_highlight {\n    color:rgb(58,134,172);\n}\n\n.text_highlight_headline{\n    font-weight:bold;\n    color:rgb(58,134,172);\n}\n\n.main_div\n{\n    display:flex !IMPORTANT;\n    flex-wrap: wrap;\n    flex-direction: row;\n    justify-content : flex-start;\n    align-items : flex-start\n    align-content : flex-start;\n}\n.left_div_icon{\n    display:flex !IMPORTANT;\n    width:40px;\n    padding:0;\n    margin:10px 20px 10px 10px;\n    \n}\n.right_div_text{\n    display:flex !IMPORTANT;\n    flex-direction: column;\n    flex-grow: 1;\n    padding:10px;\n    margin:0;\n    width:200px;\n    }<\/style>\n\t\t\n\n\n<h3 class=\"wp-block-heading\" id=\"using-the-remote-control-preset-api-in-quartz-composer\">Uso de la preselecci\u00f3n del mando a distancia <span class=\"caps\">API<\/span> en Quartz Composer<\/h3>\n\n\n\n\n\n<p>Las capas incorporadas de mimoLive utilizan un <span class=\"caps\">LUA<\/span> para generar din\u00e1micamente esta estructura de datos porque Quartz Composer no soporta la generaci\u00f3n de estructuras de datos por s\u00ed mismo. El <span class=\"caps\">LUA<\/span> contiene una funci\u00f3n compleja addButton() que se puede utilizar para crear la estructura de un solo bot\u00f3n. Usualmente puedes usar esta funci\u00f3n y no necesitas modificarla. Por lo tanto, es bastante f\u00e1cil construir nuevas configuraciones predeterminadas de control remoto para su propia capa.<\/p>\n\n\n\n<p>Por ejemplo <span class=\"caps\">LUA<\/span> para generar los controles remotos de la capa Cron\u00f3metro. Tenga en cuenta que puede adoptar este c\u00f3digo con s\u00f3lo cambiar las l\u00edneas 15 a 29 del c\u00f3digo.<\/p>\n\n\n\n<pre class=\"wp-block-code\" data-no-translation=\"\"><code>inLayerIdentifier = QC_STRING\ninVariantIdentifier = QC_STRING\noutControlRepresentations = QC_STRUCT\nmain = function()\n  controlRepresentations = {}\n  -- first representation\n  controlRepresenation = {}\n  -- {\n    controlRepresenation&#91;\"Title\"] = \"Stop Watch\"\n    buttons = {}\n    -- {\n      -- addButton(buttonsTable, buttonTitle, subTitle, positionX, positionY, width, height, color, icon, actionTarget, liveStateSource, previewSource)\n      -- first row\n      addButton(buttons, \"{{outputValues.tvOut_TimeString}}\", \"\", 0, 0, 2, 1, \"#333333\", \"\", \"\", \"\", \"\")\n      addButton(buttons, \"Live\", \"{\\{name\\}}\", 2, 0, 1, 1, \"#333333\", \"\", \"toggleLive\", \"layerVariant\", \"\")\n      -- second row\n      addButton(buttons, \"Start\", \"\", 0, 1, 1, 1, \"#33cc33\", \"play\", \"tvGroup_Control__Start_TypeSignal\", \"\", \"\")\n      addButton(buttons, \"Stop\", \"\", 1, 1, 1, 1, \"#cc3333\", \"pause\", \"tvGroup_Control__Stop_TypeSignal\", \"\", \"\")\n      addButton(buttons, \"Reset\", \"\", 2, 1, 1, 1, \"#cccc33\", \"stop\", \"tvGroup_Control__Reset_TypeSignal\", \"\", \"\")\n    -- }\n    controlRepresenation&#91;\"buttons\"] = buttons\n  -- }\n  table.insert(controlRepresentations , controlRepresenation)\n  outControlRepresentations = controlRepresentations\nend\nfunction addButton(buttonsTable, buttonTitle, buttonSubTitle, positionX, positionY, width, height, color, icon, actionTarget, liveStateSource, previewSource)\n  local button = {}\n  -- {\n  if #buttonTitle &amp;gt; 0 then\n    if string.find(buttonTitle, \"{{\") then\n      -- dynamic titel\n      local dynamicText = {}\n      -- {\n        dynamicText&#91;\"layerId\"] = inLayerIdentifier\n        dynamicText&#91;\"variantId\"] = inVariantIdentifier\n        dynamicText&#91;\"template\"] = buttonTitle\n      -- }\n      button&#91;\"dynamicText\"] = dynamicText\n    else\n      -- static title\n      button&#91;\"text\"] = buttonTitle\n    end -- if dynamic\n  end -- if buttonTitle\n  if #buttonSubTitle &amp;gt; 0 then\n    if string.find(buttonSubTitle, \"{{\") then\n      -- dynamic titel\n      local dynamicSubText = {}\n      -- {\n        dynamicSubText&#91;\"layerId\"] = inLayerIdentifier\n        dynamicSubText&#91;\"variantId\"] = inVariantIdentifier\n        dynamicSubText&#91;\"template\"] = buttonSubTitle\n      -- }\n      button&#91;\"dynamicSubText\"] = dynamicSubText\n    else\n      -- static title\n      button&#91;\"subtext\"] = buttonSubTitle\n    end -- if dynamic\n  end -- if buttonSubTitle\n  button&#91;\"x\"] = positionX\n  button&#91;\"y\"] = positionY\n  button&#91;\"width\"] = width\n  button&#91;\"height\"] = height\n  if #color &amp;gt; 0 then\n    button&#91;\"color\"] = color\n  end -- if\n  if #actionTarget &amp;gt; 0 then\n    local actions = {}\n    -- {\n      local action = {}\n      -- {\n        action&#91;\"layerId\"] = inLayerIdentifier\n        action&#91;\"variantId\"] = inVariantIdentifier\n        if string.ends(actionTarget, \"_TypeSignal\") then\n          action&#91;\"type\"] = \"signal\"\n          action&#91;\"signalKey\"] = actionTarget\n          action&#91;\"signalName\"] = buttonTitle\n        elseif actionTarget == \"toggleLive\" then\n          action&#91;\"type\"] = \"toggleLive\"\n        else\n          action&#91;\"type\"] = \"toggleSwitch\"\n          action&#91;\"toggleSwitchKey\"] = actionTarget\n          action&#91;\"toggleSwitchName\"] = buttonTitle\n        end -- if\n      -- }\n      table.insert(actions , action)\n    -- }\n    button&#91;\"actions\"] = actions\n  end -- if actionTarget\n  if #liveStateSource &amp;gt; 0 then\n    local liveState = {}\n    -- {\n      liveState&#91;\"layerId\"] = inLayerIdentifier\n      liveState&#91;\"variantId\"] = inVariantIdentifier\n      if string.starts(liveStateSource,\"tvIn_VideoSource\") then\n        -- get the live state from a dynamic video source\n        liveState&#91;\"dynamicSourceId\"] = liveStateSource\n      elseif liveStateSource == \"layerVariant\" then\n        -- nor more information needed\n      else\n        liveState&#91;\"propertyPath\"] = liveStateSource            end -- if\n    -- }\n    button&#91;\"liveState\"] = liveState\n  end -- if liveState Source\n  if #previewSource &amp;gt; 0 then\n    local sourcePreview = {}\n    -- {\n      sourcePreview&#91;\"layerId\"] = inLayerIdentifier\n      sourcePreview&#91;\"variantId\"] = inVariantIdentifier\n      sourcePreview&#91;\"dynamicSourceId\"] = previewSource\n    -- }\n    button&#91;\"sourcePreview\"] = sourcePreview\n  end -- if\n  if #icon &amp;gt; 0 then\n    -- See bottom of documentation page for list of avaiable icon names\n    button&#91;\"icon\"] = icon\n  end -- if\n  -- }\n  table.insert(buttonsTable, button)\nend -- func\nfunction string.starts(String,Start)\n   return string.sub(String,1,string.len(Start))==Start\nend\nfunction string.ends(String,End)\n   return End=='' or string.sub(String,-string.len(End))==End\nend<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Button Posicionamiento<\/h3>\n\n\n\n<p>Cuando se utilizan varios botones, su disposici\u00f3n debe controlarse manualmente. Esto significa que los botones se colocan en la cuadr\u00edcula mediante los atributos \"x\" e \"y\", que, al igual que los atributos \"anchura\" y \"altura\", se indican en m\u00faltiplos de celdas de la cuadr\u00edcula. Las posiciones son relativas a la celda superior izquierda de la cuadr\u00edcula a la que se ha arrastrado el grupo de botones.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"button-positioning\">Button Acciones<\/h3>\n\n\n\n<p>Buttons puede tener varias acciones, una sola acci\u00f3n o ninguna. Hay varias combinaciones v\u00e1lidas de objetivos de acci\u00f3n y tipos de acci\u00f3n.<br>Tenga en cuenta que las acciones \"textInput\" y \"numericInput\" deben ir por separado, ya que no se garantiza una experiencia de usuario coherente en el mando a distancia.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"action-targets\">Objetivos de la acci\u00f3n<\/h4>\n\n\n\n<p>Los objetivos de acci\u00f3n son elementos dentro del documento mimoLive. Se abordan de forma jer\u00e1rquica:<\/p>\n\n\n\n<p>El \"ID del documento\" se dibuja siempre en tiempo de ejecuci\u00f3n, por lo que no tiene que estar presente en el preajuste.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Si no se indican ni \"layerId\" ni \"variantId\", la acci\u00f3n se activar\u00e1 en el propio documento.<\/li>\n\n\n\n<li>Si se indica \"layerId\", la acci\u00f3n se activar\u00e1 en la capa especificada.<\/li>\n\n\n\n<li>Si \"layerId\" <b>y<\/b> \"variantId\", la acci\u00f3n se activar\u00e1 en la variante especificada. S\u00f3lo en este caso, se puede especificar \"toggleSwitchKey\" o \"signalKey\" adicionales (v\u00e9ase Tipos de acci\u00f3n m\u00e1s abajo).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"action-types\">Tipos de acci\u00f3n<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><th>Tipo de acci\u00f3n<\/th><th>Explicaci\u00f3n<\/th><th>Atributos adicionales<\/th><th>Objetivos v\u00e1lidos<\/th><\/tr><tr><td>toggleLive<\/td><td>Alternar el estado en directo<\/td><td>ninguno<\/td><td>Documento (Iniciar\/Parar espect\u00e1culo), Capa, Variante<\/td><\/tr><tr><td>setLive<\/td><td>Establecer el estado \"live\" a \"live\"<\/td><td>ninguno<\/td><td>Documento (Start Show), Capa, Variante<\/td><\/tr><tr><td>setOff<\/td><td>Poner el estado en directo en \"off\"<\/td><td>ninguno<\/td><td>Documento (Stop Show), Capa, Variante<\/td><\/tr><tr><td>se\u00f1al<\/td><td>Activar una se\u00f1al<\/td><td>signalKey, signalName (recomendado)<\/td><td>Variante<\/td><\/tr><tr><td>toggleSwitch<\/td><td>Conmutar un valor de entrada booleano<\/td><td>toggleSwitchKey, toggleSwitchName (recomendado)<\/td><td>Variante<\/td><\/tr><tr><td>textInput<\/td><td>Abre un campo de entrada de texto que, al enviarse, actualiza el valor de inputKey.<\/td><td>inputKey, inputName (recomendado)<\/td><td>Capa, Variante, Fuente<\/td><\/tr><tr><td>numericInput<\/td><td>Deslizador que controla un valor num\u00e9rico en inputKey.<\/td><td>inputKey, inputDescription (objeto con valores m\u00ednimo y m\u00e1ximo), inputName (recomendado)<\/td><td>Capa, Variante, Fuente<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n<section class=\"boinx_section\">\n    <div class=\"main_div\">\n        <div class=\"left_div_icon\">\n                <i class=\"icon_highlight\">*<\/i>\n        <\/div>\n\n        <div class=\"right_div_text\">\n                <div><p class=\"text_highlight_headline\"><\/p><\/div>\n                <div><p class=\"text_highlight\">Los tipos de acci\u00f3n \"textInput\" y \"numericInput\" est\u00e1n disponibles desde mimoLive 5.2.<\/p><\/div>\n        <\/div>    \n    <\/div>\n<\/section>\n\n\n\n\n<h3 class=\"wp-block-heading\" id=\"button-live-state\">Button Estado vivo<\/h3>\n\n\n\n<p>El objeto \"liveState\" permite configurar el estado de la luz de recuento del bot\u00f3n, que puede estar encendido (marca roja), en transici\u00f3n (marca amarilla) o apagado (sin marca).<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"live-state-sources\">Fuentes estatales vivas<\/h4>\n\n\n\n<p>De forma similar a los objetivos de acci\u00f3n de los botones, el estado vivo puede obtenerse de m\u00faltiples fuentes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>El \"ID del documento\" se dibuja siempre en tiempo de ejecuci\u00f3n, por lo que no tiene que estar presente en el preajuste.<\/li>\n\n\n\n<li>Si no se indican ni \"layerId\" ni \"variantId\", se utilizar\u00e1 el estado en directo del documento (se ha iniciado la presentaci\u00f3n o no).<\/li>\n\n\n\n<li>Si se indica \"layerId\", se utiliza el estado activo de la capa.<\/li>\n\n\n\n<li>Si se indican \"layerId\" y \"variantId\", se utiliza el estado activo de la variante.<br>- S\u00f3lo en este caso, se puede especificar \"propertyPath\" adicional para indicar que se debe utilizar una propiedad booleana en los valores de entrada o salida de la variante.<br>- Otra posibilidad (\u00a1mutuamente excluyente con propertyPath!) es especificar una propiedad \"dynamicSourceId\" que redirija la b\u00fasqueda de estado en directo a una fuente (obtenida por ID), que respete los cambios din\u00e1micos de la fuente seleccionada (por ejemplo, en el conmutador de v\u00eddeo). El valor de \"dynamicSourceId\" se busca en los valores de entrada de la variante.<\/li>\n<\/ul>\n\n\n\n<p><i>*<\/i>Indique la ruta completa a la propiedad, empezando por la variante como ra\u00edz, por ejemplo \"inputValues.some_Boolean_Property\" o \"outputValues.other_Property\".<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Si se indica \"sourceId\", se utiliza el estado activo de la fuente.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"button-text\">Button Texto<\/h3>\n\n\n\n<p>Los botones de acci\u00f3n pueden mostrar l\u00edneas de texto primarias y secundarias, ambas pueden ser de naturaleza est\u00e1tica o din\u00e1mica.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"primary-text\">Texto principal<\/h4>\n\n\n\n<p>Este texto ser\u00e1 el indicador principal de lo que el bot\u00f3n har\u00e1 por el usuario. Si el bot\u00f3n preestablecido contiene una propiedad de texto, es un texto est\u00e1tico que se mostrar\u00e1 tal cual.<\/p>\n\n\n\n<p>Alternativamente, se puede dar un dynamicText que permite la inclusi\u00f3n de propiedades de capa o variante mimoLive utilizando una sencilla sintaxis de plantilla. En la cadena de plantilla, se pueden combinar caracteres regulares con rutas de propiedades encerradas entre llaves:<\/p>\n\n\n\n<pre class=\"wp-block-code\" data-no-translation=\"\"><code>\"template\": \"{\\{propertyPath\\}}\"<\/code><\/pre>\n\n\n\n<p>Las rutas de las propiedades se eval\u00faan en relaci\u00f3n con el objeto que se resuelve utilizando \"layerId\", \"variantId\", \"sourceId\" y \"filterId\". La resoluci\u00f3n del objetivo sigue estas reglas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>El \"ID del documento\" se dibuja siempre en tiempo de ejecuci\u00f3n, por lo que no tiene que estar presente en el preajuste.<\/li>\n\n\n\n<li>Si no se indican ni \"layerId\" ni \"variantId\", las rutas de las propiedades se eval\u00faan en relaci\u00f3n con el documento<\/li>\n\n\n\n<li>Si se indica \"layerId\" (y opcionalmente \"variantId\"), las rutas de las propiedades se eval\u00faan en relaci\u00f3n con una capa\/variante.<\/li>\n\n\n\n<li>Se puede acceder a la capa padre de una variante iniciando una ruta con \"layer\", como \"aslayer.name\".<\/li>\n<\/ul>\n\n\n<section class=\"boinx_section\">\n    <div class=\"main_div\">\n        <div class=\"left_div_icon\">\n                <i class=\"icon_highlight\">*<\/i>\n        <\/div>\n\n        <div class=\"right_div_text\">\n                <div><p class=\"text_highlight_headline\"><\/p><\/div>\n                <div><p class=\"text_highlight\">El primer segmento de ruta de los valores de entrada y salida debe ir en camelCased (\"inputValues.tvIn...\") y no en kebab-cased (\"input-values.tvIn...\") como en los documentos de la API.<\/p><\/div>\n        <\/div>    \n    <\/div>\n<\/section>\n\n\n\n\n<ul class=\"wp-block-list\">\n<li>El texto est\u00e1tico siempre tendr\u00e1 prioridad sobre el texto din\u00e1mico, porque esto permite a los usuarios sobrescribir el texto din\u00e1mico con alg\u00fan texto personalizado que pueda ser m\u00e1s \u00fatil en su situaci\u00f3n.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"secondary-text\">Texto secundario<\/h4>\n\n\n\n<p>Para dar al usuario m\u00e1s informaci\u00f3n sobre un bot\u00f3n, como el nombre de su capa padre, se le puede dar un texto secundario utilizando las propiedades \"subtext\" o \"dynamicSubText\".<\/p>\n\n\n\n<p>La sintaxis de las plantillas y la resoluci\u00f3n de objetos siguen exactamente las mismas reglas que el texto principal.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"button-text-and-icon-size\">Button Tama\u00f1o de texto e icono<\/h4>\n\n\n\n<p>El texto y los iconos de los botones pueden variar de tama\u00f1o en funci\u00f3n del contexto. Con la opci\u00f3n \"fontScale\" puede especificar una escala relativa a un tama\u00f1o por defecto calculado para el tama\u00f1o de pantalla actual. \"1\" ser\u00e1 el tama\u00f1o por defecto. Menos de 1 (por ejemplo, 0,8) reducir\u00e1 el tama\u00f1o de la fuente y m\u00e1s de 1 (por ejemplo, 1,5) lo aumentar\u00e1.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Button Avance<\/h3>\n\n\n\n<p>Los botones de acci\u00f3n pueden mostrar una imagen de vista previa de la fuente que controlan o de cualquier otra fuente disponible en el documento.<\/p>\n\n\n\n<p>Dependiendo de si la fuente es est\u00e1tica (s\u00f3lo im\u00e1genes que fueron arrastradas a mimoLive), un <span class=\"caps\">PNG<\/span> de la fuente que s\u00ed admite un canal alfa. Para cualquier otra fuente, se carga una <span class=\"caps\">JPEG<\/span> La representaci\u00f3n de la fuente se actualiza regularmente. La frecuencia de actualizaci\u00f3n prevista para las fuentes din\u00e1micas es de 5 fotogramas por segundo, pero esta frecuencia se reduce cuando la velocidad de conexi\u00f3n a la red resulta insuficiente para la carga repetida de fotogramas de previsualizaci\u00f3n.<\/p>\n\n\n\n<p>Actualmente no se admite mostrar la salida del programa del documento en un bot\u00f3n de acci\u00f3n. Las im\u00e1genes por defecto de las capas, aunque no son visibles en la lista de fuentes, est\u00e1n disponibles para su previsualizaci\u00f3n.<\/p>\n\n\n\n<p>Para especificar una vista previa de la fuente, se utiliza un mecanismo de resoluci\u00f3n de objetos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>El \"ID del documento\" se dibuja siempre en tiempo de ejecuci\u00f3n, por lo que no tiene que estar presente en el preajuste.<\/li>\n\n\n\n<li>Si se indica \"sourceId\", se utilizar\u00e1 la fuente con ese ID para la previsualizaci\u00f3n.<\/li>\n\n\n\n<li>Si se indican \"layerId\", \"variantId\" y \"dynamicSourceId\", el ID de la fuente se buscar\u00e1 en la variante de la capa especificada bajo la clave de \"dynamicSourceId\". Esto se puede utilizar para hacer referencia a fuentes como la fuente A-G del conmutador de v\u00eddeo, incluso cuando se cambian en el documento.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Button Color<\/h3>\n\n\n\n<p>Utilizando el atributo \"color\", los botones pueden colorearse con cualquier c\u00f3digo de color que sea representable en <span class=\"caps\">HTML<\/span> (por ejemplo, \"#f80\", \"#ff0088\", \"naranja\" o \"rgb(255, 66, 88)\").<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Button Icono<\/h3>\n\n\n\n<p>Los Buttons pueden mostrar un icono para indicar su funcionalidad. Para ver una lista de todos los iconos disponibles, abre http:\/\/localhost:8989\/icons\/demo.html mientras mimoLive est\u00e1 en marcha y los mandos a distancia est\u00e1n activados.<br>Utiliza el nombre normal del icono. Por ejemplo, \"hacia atr\u00e1s\" o \"flecha abajo\".<\/p>","protected":false},"excerpt":{"rendered":"<p>If you are creating a custom layer, there is the possibility of even including custom control presets with your layer. This come in handy if your layer has push buttons that controls the behaviour of your layer when its live. Data Structure The following data structure is a sample output which needs to be present [&hellip;]<\/p>","protected":false},"author":3,"featured_media":0,"parent":32482,"menu_order":1,"template":"","meta":{"_acf_changed":false,"_angie_page":false,"_lmt_disableupdate":"no","_lmt_disable":"","footnotes":""},"categories":[258],"tags":[],"class_list":["post-32483","user-manual","type-user-manual","status-publish","hentry","category-manual"],"acf":[],"_links":{"self":[{"href":"https:\/\/mimolive.com\/es\/wp-json\/wp\/v2\/user-manual\/32483","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mimolive.com\/es\/wp-json\/wp\/v2\/user-manual"}],"about":[{"href":"https:\/\/mimolive.com\/es\/wp-json\/wp\/v2\/types\/user-manual"}],"author":[{"embeddable":true,"href":"https:\/\/mimolive.com\/es\/wp-json\/wp\/v2\/users\/3"}],"version-history":[{"count":2,"href":"https:\/\/mimolive.com\/es\/wp-json\/wp\/v2\/user-manual\/32483\/revisions"}],"predecessor-version":[{"id":40973,"href":"https:\/\/mimolive.com\/es\/wp-json\/wp\/v2\/user-manual\/32483\/revisions\/40973"}],"up":[{"embeddable":true,"href":"https:\/\/mimolive.com\/es\/wp-json\/wp\/v2\/user-manual\/32482"}],"wp:attachment":[{"href":"https:\/\/mimolive.com\/es\/wp-json\/wp\/v2\/media?parent=32483"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mimolive.com\/es\/wp-json\/wp\/v2\/categories?post=32483"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mimolive.com\/es\/wp-json\/wp\/v2\/tags?post=32483"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}