visualizacao-interativa-time-slicing
Renderiza redes de personagens e locais com filtros temporais e agrupamento semantico para evitar saturacao visual no navegador.
SKILL.md.agents/skills/visualizacao-interativa-time-slicing/SKILL.md
GitHubvisualizacao-interativa-time-slicing
Descrição
A skill visualizacao-interativa-time-slicing especifica a renderização gráfica e interação com o Grafo do Universo Ficcional (GUF) no navegador Web. Ela mitiga o emaranhado visual (efeito novelo/hairball) aplicando filtros temporais (time-slicing) baseados nas quádruplas relacionais e agrupamento semântico de nós (clustering), mantendo a legibilidade cognitiva da rede e alto desempenho da interface (taxa de quadros estável).
Quando usar
Gatilhos concretos e observáveis:
- O escritor acessa a tela de visualização do grafo relacional de personagens ou locais do romance.
- O autor manipula o controle deslizante (slider) de linha do tempo na visualização gráfica.
- O usuário ativa filtros de visualização por facção, parentesco ou local na barra de ferramentas lateral do grafo.
Quando NÃO usar:
- Para renderizar visualizações estáticas lineares (ex: fluxogramas ou listas de texto tradicionais).
- Durante o processamento puro do banco de dados (deve atuar estritamente na camada de apresentação/UI).
Pré-requisitos
- Motor de renderização WebGL/Canvas habilitado no navegador (ex: D3.js, Sigma.js ou Cytoscape.js).
- Banco de dados FUKG configurado com quádruplas relacionais contendo timestamps
[t_inicial, t_final]. - Módulo de agrupamento hierárquico estruturado (clustering).
Processo (passo a passo executável)
- Fatiamento Temporal (Time-slicing Filter):
- Capturar o instante temporal ou intervalo narrativo $T_{active} = [t_a, t_b]$ selecionado pelo autor na interface (via slider linear).
- Filtrar a base de dados de quádruplas mantendo apenas vértices e arestas que satisfaçam a condição: [(t_inicial \le t_b) \land (t_final \ge t_a)]
- Ocultar da tela todos os nós e arestas que não pertençam ao intervalo ativo de tempo.
- Agrupamento Semântico (Hierarchical Clustering):
- Agrupar nós pertencentes a uma mesma categoria agregadora (ex: membros de uma mesma
Factionou sub-locais dentro de umaLocation). - Renderizar o grupo como um único nó representativo consolidado (nó pai).
- Adicionar o manipulador de eventos duplo clique: quando o usuário clicar no nó consolidado, expandi-lo revelando a rede interna de sub-nós com transição suave.
- Agrupar nós pertencentes a uma mesma categoria agregadora (ex: membros de uma mesma
- Simulação de Forças Otimizada (Force-Directed Layout):
- Configurar o motor de física do layout (ex:
d3-force-layout). - Definir parâmetros para minimizar cruzamentos de arestas:
- Repulsão entre nós:
-150pixels de raio. - Força de atração por aresta:
0.05de multiplicador. - Centralização de gravidade:
0.1de peso.
- Repulsão entre nós:
- Configurar o motor de física do layout (ex:
- Legenda e Código de Cores Relacional:
- Colorir as arestas baseando-se no tipo de predicado:
- Verde sólido para alianças/amizade (
MembroDe,Aliado). - Vermelho sólido para hostilidade/conflitos (
InimigoDe). - Cinza tracejado para relações neutras ou segredos lógicos.
- Verde sólido para alianças/amizade (
- Colorir as arestas baseando-se no tipo de predicado:
Parâmetros e configuração
LAYOUT_STABILIZATION_ITERATIONS: Número máximo de iterações do algoritmo de forças antes de congelar a renderização. Padrão:150.MAX_VISIBLE_NODES_UNFILTERED: Limite máximo de nós exibidos na tela sem forçar colapso/clustering automático. Padrão:50.EDGE_STRETCH_FORCE: Coeficiente de elasticidade das arestas na simulação física. Padrão:0.05.
Armadilhas e como evitá-las
- Armadilha: Exibição Global Desfiltrada: renderizar o grafo relacional total de um romance de longo formato (mais de 200 personagens e locais) sem agrupamento causa travamento no navegador e poluição visual ilegível.
Mitigação: Configurar a interface para abrir o grafo sempre colapsado (exibindo apenas nós consolidantes e os 5 personagens principais definidos). Forçar o agrupamento automático sempre que o número de nós ativos na tela superar o limite
MAX_VISIBLE_NODES_UNFILTERED = 50.
Critérios de validação (Definition of Done)
- A taxa de atualização de quadros da tela do grafo mantém-se igual ou superior a 60 FPS durante rotação, zoom ou arraste de nós (usando renderização via Canvas/WebGL).
- O tempo total de carregamento e estabilização física do layout de forças é inferior a 800ms para uma rede de 50 nós.
Fundamentação científica
- GuidelineExplorer (2025) - nod-link diagram guidelines - IEEE TVCG 2025
- Graph Usability Group (2026) - Empirical Evaluation of Graph Visualizations - Computer Graphics Forum 2026
- Tiddi, I. et al. (2024) - From Nodes to Narratives: KGs for Creative Storytelling - SWC Workshops 2024
Requisitos do projeto relacionados
- RF-57 (visualização de grafos)
- RF-96 (filtrar por personagem)
- RF-97 (filtrar por tipo)
- RF-98 (filtrar por período)
Maturidade e riscos de adoção
Nível: Consolidada. Os algoritmos de layouts de forças force-directed e filtros WebGL/Canvas são amplamente suportados e otimizados em bibliotecas JS consolidadas de mercado.
Exemplos
Entrada:
{
"active_time": 5,
"nodes": [
{"id": "char_kael", "type": "Character"},
{"id": "char_leandra", "type": "Character"}
],
"edges": [
{"source": "char_kael", "target": "char_leandra", "relation": "Aliado", "valid_time": [1, 10]},
{"source": "char_kael", "target": "char_leandra", "relation": "Inimigo", "valid_time": [11, 20]}
]
}
Saída esperada:
Apenas renderizar uma aresta verde entre Kael e Leandra, pois o tempo ativo 5 situa-se no intervalo [1, 10] da relação de aliança.
{
"rendered_nodes": ["char_kael", "char_leandra"],
"rendered_edges": [
{"source": "char_kael", "target": "char_leandra", "color": "green", "style": "solid"}
]
}
Caso de falha conhecido: Exibir simultaneamente a aresta de aliança (verde) e de hostilidade (vermelho) no mesmo ponto de tempo narrativo, gerando contradição visual de estado.