§
    9†ÆjdÉ  ã                  óÜ  — d dl mZ d dlmZ d dlZd dlZd dlZd dlZd dlZdZ	dZ
dZdZdZd	Zd
ZdZ ej        d¦  «        Zdtd„Zdud„Zdvd„Zddœdwd„Zdtd„Zdtd„Zdtd„Zdxd„Zdyd „Zdzd#„Zd{d*„Zd|d.„Z G d/„ d0¦  «        Zd}d1„Z d~d4„Z!dd5œdd:„Z"e
d5œd€d<„Z#ddd=œd�d@„Z$d‚dC„Z%dD„ Z&d}dE„Z'dƒdG„Z(d„dK„Z)d…dL„Z*d†dP„Z+ddQœd‡dT„Z,d dUœdˆdZ„Z-d‰d_„Z.dŠdb„Z/d‹dc„Z0dŒde„Z1ddfœd�dm„Z2ddfœdŽdq„Z3dr„ Z4ds„ Z5dS )�é    )Úannotations)Úcontrol_video_encodingNÚjoyai_control_memory_positionsg      N@g      @gffffffÖ?TaÜ  **JoyAI-Echo Prompt Format**

JoyAI-Echo keeps a small audio-video memory between sliding windows. Each memory slot is a short visual moment paired with nearby voice or sound, so prompts work best when recurring people, voices, objects, and settings are described consistently across windows. Use stable IDs such as `ID_A`, `ID_B`, `ID_OBJECT`, and `ID_PLACE`, then repeat the details that matter each time they reappear.

Write one story window per line or paragraph, depending on the selected Text Prompt processing mode. Each window should be self-contained: identity, wardrobe, voice, setting, action, camera framing, dialogue, visible lips when someone speaks, ambience, and sound effects.

**Window Commands**

WanGP removes `[/...]` commands before sending the text to the model. Brackets that do not start with `/` are preserved for other prompt syntax.

Generic window commands:

- `[/duration=121]`: this window contributes about 121 output frames.
- `[/duration=5s]`: this window contributes about 5 seconds at the generation FPS.
- `[/duration=20%]`: this window contributes 20% of the requested total frame count.
- `[/overlap]`: use the model's default overlap for this window.
- `[/overlap=9]`: use overlap frames from the previous window to make a smoother transition.
- `[/overlap=0]`: use no overlap frames, when the model supports text-to-video windows.
- `[/new_shot]`: start without overlap frames. Use it for a hard cut, a different scene, a new character introduction, or when Continue Video should be preserved in the output but not visually continued by the model.

JoyAI-Echo memory commands:

- `[/store_mem=man1,man2]`: save named memories from this window, sampled at different moments. Multiple names for the same character will record in memory multiple 8 frames clips (with audio) at different times and provide more hints to the model for later reuse.
- `[/load_mem=man1,woman1]`: use only these named memories for this window. If a named memory is cached but not active, Joy loads it into an internal slot.
- `[/load_mem]` or `[/load_mem=]`: use no Joy memory for this window.
- `[/drop_mem=old_scene,side_prop]`: remove named memories from active memory and from the persistent RAM cache.
- `[/no_mem]`: deprecated and ignored. Memories are no longer saved automatically; use `[/store_mem=name]` only on windows you want to remember.

If a window has no `[/load_mem...]` command, Joy keeps the active memories from the previous window and adds any memories that were stored at the end of that previous window. Control Video memories are active in window 1 by default unless window 1 uses `[/load_mem...]` to select a different set or no memory.

Control Video Memory positions can also be named. Use `2s, 5s` for automatic names `control1`, `control2`, or `man=2s,woman=5s` to create named control memories that can later be selected with `[/load_mem=man,woman]`.

You can combine commands in one bracket, for example `[/duration=8s,/new_shot,/load_mem=man1,woman1]`.

**Tips**

- Reuse the same ID and repeat important visible and audio traits. Memory helps, but the prompt still guides identity.
- Store only the windows that are useful later. Memories are not saved automatically.
- Use named memories when the story has several people or objects. Names make it easier to load the right identities later or drop stale ones.
- Use `[/new_shot]` to introduce a new person or location without visual overlap from the previous window. Joy memory can still influence later windows when loaded.
- Use `[/load_mem=]` when a new shot introduces a new character and should not be influenced by previous memories.
- Use a Control Video with an audio track to predefine memory before generation. Select JoyAI-Echo Control Video Memory, then leave positions empty for automatic non-silent selection, enter positions like `2s, 8s, 15s`, or name them like `man=2s,woman=8s`.

**Three-Window Example**

```text
[/duration=8s,/store_mem=magician1,magician2] ID_A is a retired stage magician with silver hair, a burgundy velvet jacket, expressive eyebrows, and a dry theatrical voice. He stands inside an abandoned seaside theater at night, opens a lacquered box, reveals a glowing blue playing card, and says, "I retired from miracles because the miracles started freelancing." Keep his face and lip movement clear in a stable medium close-up. Add dusty gold footlights, torn red curtains, distant waves, old wood creaks, and soft card handling.

[/duration=8s,/new_shot,/load_mem=,/store_mem=duck1,duck2] ID_B is a small yellow duck inspector wearing a tiny teal raincoat, round brass spectacles, polished rubber boots, and a serious waterproof satchel. ID_B waddles through the theater aisle, sees the glowing card, and quacks in a crisp subtitle-like comic rhythm, "That door has not filed the proper puddle paperwork." Keep ID_B's duck design, bill movement, spectacles, and raincoat clear in a medium shot with squeaky footsteps, distant surf, and a tiny official whistle.

[/duration=8s,/new_shot,/load_mem=magician1,magician2,duck1,duck2] ID_A and ID_B are together on the same seaside theater stage. ID_A is still the silver-haired retired magician in the burgundy velvet jacket with the dry theatrical voice and glowing blue card. ID_B is still the small yellow duck inspector in the teal raincoat, spectacles, boots, and serious satchel. The glowing door opens between them onto a miniature harbor full of lantern boats. ID_A says, "I told you the door was shy." ID_B replies, "Shy doors still need permits." Keep both identities, voices, scale difference, readable lip and bill movement, card glow, theater details, tiny waves, and playful overlapping laughter.
```

**Prompt Enhancer**

The prompt enhancer works best when your source prompt already describes the story window by window. This gives the enhancer a plan to expand instead of letting it invent disconnected shots. Name the recurring characters and say what should happen in each window.

Example source prompt:

```text
A warm comic story about a cautious widower who runs a tiny neighborhood restaurant and a confident sailor who fixes boats and hates fancy food.
- Window 1: show the man alone in his restaurant before opening time, practicing a dinner speech and worrying that the soup is too dramatic.
- Window 2: show the woman alone on her small boat, repairing a radio and joking that the sea is a terrible sous-chef.
- Window 3: the man and woman meet in the restaurant during a sudden rainstorm; she brings a broken compass, he serves the dramatic soup, and they argue playfully.
- Window 4: they travel together on the woman's boat, using the man's soup pot as an improvised compass holder while laughing about their terrible navigation.
- Window 5: they reach a frozen northern harbor and hold a tiny wedding on the ice, with the soup pot as the ceremonial bell.
```
a¤  **JoyAI-Echo**

JoyAI-Echo is an LTX-2.3 based audio-video model for connected multi-window stories. WanGP generates one sliding window after another and keeps compact memory from previous windows so later windows can reuse people, voices, objects, and places.

**How Generation Works**

- A sliding window acts like one story beat or shot.
- Write one prompt per line or one paragraph per window, depending on the Text Prompt processing mode.
- A Start Image or Continue Video applies to the first window.
- Later windows rely on their own prompt text, optional overlap frames, and Joy memory.
- Use **1 phase** for best JoyAI-Echo performance. Two phases can refine the image, but one phase is usually faster and more reliable for connected audio-video memory.

**Memory**

- Joy memory has up to active **7 slots**.
- Each slot stores a very short visual moment: about **9 frames**, roughly **360 ms at 25 fps**.
- Each visual moment is paired with about **3.8 seconds** of nearby voice or sound from the same window, centered on the selected memory moment when a frame position is provided: roughly **1.9 seconds before** and **1.9 seconds after**. If that centered audio is silent, Joy shifts to the nearest non-silent audio window.
- Memories are **not saved automatically**. Use prompt commands such as `[/store_mem=name]` on windows that should become reusable references.
- Named memories are kept in a persistent RAM cache. Up to 7 of them can be active at once; `[/load_mem=name1,name2]` selects which cached memories are active for a later window.
- When a window has no `[/load_mem...]` command, it continues with the active memories from the previous window plus any memories stored by that previous window.

Use several names for an important character when identity matters. For example, store two or three moments of the same person from different angles or expressions, then load the most useful names in later windows. You can also drop old names before a new scene so memory is not wasted on characters or objects that no longer matter.

**Control Video Memory**

Control Video Memory can predefine named memory before the first generated window. Provide a Control Video with an audio track, choose **JoyAI-Echo Control Video Memory**, and either leave positions empty for automatic non-silent selection or enter frame/second positions.

WanGP uses only the needed moments instead of treating the full control video as the generated source.

Example: to use two reference moments from the first 20 seconds of a Control Video, set field **Joy Memory Positions** to `4s, 14s`. Joy names them `control1` and `control2` and loads them into window 1 if there is no other memory instruction. To name them yourself, write `man=4s,woman=14s`; later windows can use `[/load_mem=man,woman]`.

**Prompt Commands**

Joy supports optional `[/...]` prompt commands for per-window duration, hard cuts, overlap, and memory management. See the prompt help for the full syntax.
a†  You are writing prompts for JoyAI-Echo, an LTX-2.3 based audio-video model for connected multi-window stories.

JoyAI-Echo works best when each window is a clear cinematic beat and later windows deliberately reuse earlier people, voices, objects, or places. It keeps compact audio-video memories across windows, but the prompt should still repeat the identity details that must remain stable.

Return only the final prompt text. Do not return JSON, bullets, headings, commentary, or code fences.

Format:
- Write 2 to 6 cinematic story windows.
- Each window is exactly one non-empty line made of multiple sentences.
- Separate windows with a single newline. Do not insert blank lines between windows.
- Do not wrap one window across multiple lines.
- Preserve any useful bracket syntax the user already provided.
- You may prefix a window with `[/new_shot]` when introducing a new character, cutting to a new location, or starting a later joint scene without visual overlap from the previous window.
- Do not add other `[/...]` commands unless the user already provided them.

Content rules:
- Use stable IDs such as ID_A, ID_B, ID_OBJECT, or ID_PLACE for recurring people, objects, and settings.
- Reintroduce the key visual identity, wardrobe, voice, location, and recurring object details in every window where they matter.
- Include natural movement, camera framing, facial/lip visibility when there is speech, sound effects, ambience, and spoken lines.
- Make later windows clearly reuse earlier characters, objects, or locations so JoyAI-Echo memory has something meaningful to carry forward.
- When introducing a new character, give them a distinct silhouette, wardrobe or object, voice quality, and a readable action.
- Avoid unrelated clips stitched together without continuity.

Example:
ID_A is Martin Bell, a careful apartment superintendent in his early fifties with salt-and-pepper hair, a gray mustache, a navy work shirt, keys on his belt, and a warm gravelly voice. He stands alone beside an old apartment elevator at night. The elevator dings and announces, "Third floor: lasagna is experiencing delays." ID_A looks at the panel, sighs, and says, "I fixed the water pressure. I did not authorize culinary announcements." Keep his face and lip movement clear in a stable medium close-up. Keep background sound minimal, with only the elevator bell and a soft room hum.
[/new_shot]ID_B is Nora Chen, a sharp tenant association president in her late thirties with shoulder-length black hair, tortoiseshell glasses, a mustard cardigan, a canvas tote, and a clear quick alto voice. She stands alone in the lobby near the elevator, holding a few complaint forms. The elevator opens behind her and calmly announces, "Laundry room: socks are now al dente." ID_B raises one eyebrow and says, "That elevator owes me four quarters and a written apology." Keep her face, glasses, clothing, and lip movement clear in a medium shot. Keep sound minimal, with only the elevator doors and a soft paper rustle.
[/new_shot]ID_A and ID_B are together beside the open elevator service panel in the same apartment building. ID_A is still the gray-mustached superintendent in the navy work shirt with keys and a warm gravelly voice. ID_B is still Nora Chen with black hair, tortoiseshell glasses, mustard cardigan, canvas tote, and quick alto voice. They discover an old baby monitor inside the panel, picking up a cooking show from another apartment. ID_A says, "So the elevator is not haunted, just subscribed." ID_B replies, "Excellent. Then I am billing apartment 4B for emotional ravioli." Keep both faces and lip movement readable, preserve their distinct voices and personalities, and keep background sound minimal.
z^[^\s,/=\[\]]+$Úreturnú	list[str]c                ó‚   — | du s| €g S d„ t          | ¦  «                             d¦  «        D ¦   «         }d„ |D ¦   «         S )NTc                ó6   — g | ]}|                      ¦   «         ‘ŒS © )Ústrip©Ú.0Úitems     ú>C:\Users\johnn\OneDrive\Documents\AI\models\ltx2\joyai_echo.pyú
<listcomp>z(_memory_option_items.<locals>.<listcomp>�   s    € Ð<Ð<Ð<˜dˆT�ZŠZ‰\Œ\Ð<Ð<Ð<ó    ú,c                ó   — g | ]}|¯|‘ŒS r
   r
   r   s     r   r   z(_memory_option_items.<locals>.<listcomp>ž   s   € Ð+Ð+Ð+�T dÐ+ˆDÐ+Ð+Ð+r   )ÚstrÚsplit)ÚvalueÚitemss     r   Ú_memory_option_itemsr   š   sO   € Ø�€}€}˜˜Øˆ	Ø<Ð<¥c¨%¡j¤j×&6Ò&6°sÑ&;Ô&;Ð<Ñ<Ô<€EØ+Ð+˜UÐ+Ñ+Ô+Ð+r   r   r   Úboolc                ó„   — t          t          j        dt          | ¦  «                             ¦   «         ¦  «        ¦  «        S )Nz\d+)r   ÚreÚ	fullmatchr   r   ©r   s    r   Ú_is_number_idr   ¡   s.   € Ý•”˜V¥S¨¡Z¤Z×%5Ò%5Ñ%7Ô%7Ñ8Ô8Ñ9Ô9Ð9r   Úcommandc                ó*  — |dk    rdnd|› �}t          | ¦  «                             ¦   «         } | st          |› d�¦  «        ‚t          | ¦  «        rt          |› d�¦  «        ‚t                               | ¦  «        st          |› d| › d�¦  «        ‚| S )NÚcontrol_memzJoyAI-Echo Control Video MemoryúJoyAI-Echo /z memory name cannot be empty.z' memory names must not be pure numbers.z memory name 'z"' contains unsupported characters.)r   r   Ú
ValueErrorr   Ú_MEMORY_ID_REr   )r   r   Úlabels      r   Ú_validate_memory_namer&   ¥   s»   € Ø18¸MÒ1IÐ1IÐ-Ð-ÐOgÐ^eÐOgÐOg€EÝ�‰JŒJ×ÒÑÔ€EØð BÝ˜EÐ@Ð@Ð@ÑAÔAÐAÝ�UÑÔð LÝ˜EÐJÐJÐJÑKÔKÐKÝ×"Ò" 5Ñ)Ô)ð \Ý˜EÐZÐZ°ÐZÐZÐZÑ[Ô[Ð[Ø€Lr   F©Úrequire_namesr(   c               ól   ‡— ˆfd„t          | ¦  «        D ¦   «         }|r|st          d‰› d�¦  «        ‚|S )Nc                ó0   •— g | ]}t          |‰¦  «        ‘ŒS r
   )r&   )r   r   r   s     €r   r   z._parse_memory_names_option.<locals>.<listcomp>²   s$   ø€ ÐZÐZÐZ°dÕ" 4¨Ñ1Ô1ÐZÐZÐZr   r"   z# requires at least one memory name.)r   r#   )r   r   r(   Únamess    `  r   Ú_parse_memory_names_optionr,   ±   sV   ø€ ØZÐZÐZÐZÕ>RÐSXÑ>YÔ>YÐZÑZÔZ€EØð V˜Uð VÝÐT¨ÐTÐTÐTÑUÔUÐUØ€Lr   c                ó"   — t          | d¦  «        S )NÚ	store_mem©r,   r   s    r   Úparse_store_mem_optionr0   ¸   s   € Ý% e¨[Ñ9Ô9Ð9r   c                ó"   — t          | d¦  «        S )NÚload_memr/   r   s    r   Úparse_load_mem_optionr3   ¼   s   € Ý% e¨ZÑ8Ô8Ð8r   c                ó&   — t          | dd¬¦  «        S )NÚdrop_memTr'   r/   r   s    r   Úparse_drop_mem_optionr6   À   s   € Ý% e¨ZÀtÐLÑLÔLÐLr   Úlabelsc                ó4   — | rd                      | ¦  «        ndS ©Nz, Únone©Újoin)r7   s    r   Ú_memory_labels_textr=   Ä   s   € Ø &Ð2ˆ4�9Š9�VÑÔÐ¨FÐ2r   Ú	selectorsc                ó4   — | rd                      | ¦  «        ndS r9   r;   )r>   s    r   Ú_memory_selectors_textr@   È   s   € Ø#,Ð8ˆ4�9Š9�YÑÔÐ°&Ð8r   ÚmessageÚNonec                ó@   — t           rt          d| › �d¬¦  «         d S d S )Nz[WAN2GP][JoyAI-Echo][memory] T©Úflush)ÚJOYAI_DEBUG_MEMORYÚprint)rA   s    r   Ú_debug_memoryrH   Ì   s9   € Ýð EÝÐ7¨gÐ7Ð7¸tÐDÑDÔDÐDÐDÐDðEð Er   Útrim_framesÚintÚfpsÚfloatÚsample_rateú
int | Nonec                ó&  — | �|rt          |¦  «        dk    r| S t          t          t          |¦  «        t          |¦  «        z  t          |¦  «        z  ¦  «        ¦  «        }| t          |t          | j        d         ¦  «        ¦  «        d …         S ©Nr   )rJ   ÚroundrL   ÚminÚshape)ÚaudiorI   rK   rM   Úsampless        r   Ú_trim_audio_startrV   Ñ   s€   € Ø€}˜K€}­3¨{Ñ+;Ô+;¸qÒ+@Ð+@ØˆÝ•%�˜kÑ*Ô*­U°;Ñ-?Ô-?Ñ?Å%ÈÁ*Ä*ÑLÑMÔMÑNÔN€GØ•�W�c %¤+¨a¤.Ñ1Ô1Ñ2Ô2Ð3Ð3Ô4Ð4r   Úmemory_latentsúdict | NoneÚtotal_framesc           
     óp  — |r&t          |¦  «        dk    st          |¦  «        dk    r|S d|v sd|v r|nd|i}i }t          t          |¦  «        t          | ¦  «        ¦  «        }|                     ¦   «         D �]ž\  }}t	          |t
          ¦  «        sŒt          |¦  «        }	|	                     d¦  «        }
|
�ot          |
j        d         ¦  «        dk    rQt          |t          |
j        d         ¦  «        dz
  ¦  «        }|
d d …d d …|d …f          	                    ¦   «         |	d<   |	                     d¦  «        }|�Ñt          |j        d         ¦  «        dk    r³t          t          t          |¦  «        t          |¦  «        z  t          |j        d         ¦  «        z  ¦  «        ¦  «        }t          t          d|¦  «        t          |j        d         ¦  «        dz
  ¦  «        }|d d …d d …|d …f          	                    ¦   «         |	d<   |	||<   �Œ d|v sd|v r|n|                     d¦  «        S )Nr   Úphase1Úphase2Úvideoé   é   rT   )rJ   Ú_pixel_to_latent_indexÚ_latent_strider   Ú
isinstanceÚdictÚgetrS   rR   Ú
contiguousrQ   rL   Úmax)ÚmodelrW   rI   rY   Úphase_latentsÚtrimmedÚ
video_trimÚphaseÚlatentsÚphase_trimmedÚvideo_latentÚ	keep_fromÚaudio_latentÚ
audio_trims                 r   Ú_trim_memory_latentsrr   Ø   sJ  € Øð �S Ñ-Ô-°Ò2Ð2µc¸,Ñ6GÔ6GÈ1Ò6LÐ6LØÐØ&.°.Ð&@Ð&@ÀHÐP^ÐD^ÐD^�N�NÐemÐo}Ðd~€MØ€GÝ'­¨KÑ(8Ô(8½.ÈÑ:OÔ:OÑPÔP€JØ'×-Ò-Ñ/Ô/ð 'ñ '‰ˆˆwÝ˜'¥4Ñ(Ô(ð 	ØÝ˜W™œˆØ$×(Ò(¨Ñ1Ô1ˆØÐ#­¨LÔ,>¸qÔ,AÑ(BÔ(BÀQÒ(FÐ(FÝ˜J­¨LÔ,>¸qÔ,AÑ(BÔ(BÀQÑ(FÑGÔGˆIØ%1°!°!°!°Q°Q°Q¸	¸
¸
Ð2BÔ%C×%NÒ%NÑ%PÔ%PˆM˜'Ñ"Ø$×(Ò(¨Ñ1Ô1ˆØÐ#­¨LÔ,>¸qÔ,AÑ(BÔ(BÀQÒ(FÐ(FÝ�U¥5¨Ñ#5Ô#5½¸lÑ8KÔ8KÑ#KÍeÐT`ÔTfÐghÔTiÑNjÔNjÑ#jÑkÔkÑlÔlˆJÝ�C  :Ñ.Ô.µ°LÔ4FÀqÔ4IÑ0JÔ0JÈQÑ0NÑOÔOˆIØ%1°!°!°!°Q°Q°Q¸	¸
¸
Ð2BÔ%C×%NÒ%NÑ%PÔ%PˆM˜'Ñ"Ø&ˆ�‰‰Ø .Ð0Ð0°HÀÐ4NÐ4Nˆ7ˆ7ÐT[×T_ÒT_Ð`hÑTiÔTiÐir   c                  óÜ   — e Zd Zd@dAd
„ZdBd„Zd„ Zd„ ZdCd„ZdDd„ZdBd„Z	dEd„Z
dFd„ZdFd„ZddœdGd„ZdHd „ZdId"„ZdJd$„Zd%d&œdKd*„ZdLd+„ZdMdNd4„ZdMdOd8„ZdPd:„ZdQdRd<„ZdQdRd=„ZdQdSd>„ZdQdTd?„ZdS )UÚJoyAIEchoMemoryBanké   é   é`   Úmax_sizerJ   Únum_fix_framesÚaudio_window_sizer   rB   c                óü   — t          dt          |¦  «        ¦  «        | _        t          dt          |¦  «        ¦  «        | _        t          dt          |¦  «        ¦  «        | _        i | _        i | _        d| _        d S ©Nr   r_   )rf   rJ   rx   ry   rz   ÚentriesÚcacheÚ
created_at)Úselfrx   ry   rz   s       r   Ú__init__zJoyAIEchoMemoryBank.__init__ð   sg   € Ý˜A�s 8™}œ}Ñ-Ô-ˆŒÝ! !¥S¨Ñ%8Ô%8Ñ9Ô9ˆÔÝ!$ Q­Ð,=Ñ(>Ô(>Ñ!?Ô!?ˆÔØ(*ˆŒØ&(ˆŒ
ØˆŒˆˆr   c                ó*   — t          | j        ¦  «        S ©N)Úlenr}   ©r€   s    r   Ú__len__zJoyAIEchoMemoryBank.__len__ø   s   € Ý�4”<Ñ Ô Ð r   c                óN   — t          | j                             ¦   «         ¦  «        S rƒ   ©Úsortedr}   r   r…   s    r   Ú_slot_itemszJoyAIEchoMemoryBank._slot_itemsû   s   € Ý�d”l×(Ò(Ñ*Ô*Ñ+Ô+Ð+r   c                óT   — t          | j                             ¦   «         d„ ¬¦  «        S )Nc                ó:   — | d                               dd¦  «        S )Nr_   r   r   ©rd   )r   s    r   ú<lambda>z5JoyAIEchoMemoryBank._creation_items.<locals>.<lambda>ÿ   s   € ¸TÀ!¼W¿[º[ÈÐWXÑ=YÔ=Y€ r   )Úkeyrˆ   r…   s    r   Ú_creation_itemsz#JoyAIEchoMemoryBank._creation_itemsþ   s'   € Ý�d”l×(Ò(Ñ*Ô*Ð0YÐ0YÐZÑZÔZÐZr   Úslot_idÚentryrc   r   c                óJ   — |                      d¦  «        }|r|› d|› d�nd|› �S )NÚnamez[slot ú]zslot r�   )r€   r‘   r’   r”   s       r   Ú_entry_labelz JoyAIEchoMemoryBank._entry_label  s=   € Ø�yŠy˜Ñ Ô ˆØ,0ÐG�$Ð(Ð(˜gÐ(Ð(Ð(Ð(Ð6G¸gÐ6GÐ6GÐGr   r   c                óD   ‡ — ˆ fd„‰                       ¦   «         D ¦   «         S )Nc                óB   •— g | ]\  }}‰                      ||¦  «        ‘ŒS r
   )r–   )r   r‘   r’   r€   s      €r   r   z.JoyAIEchoMemoryBank.labels.<locals>.<listcomp>  s-   ø€ Ð[Ð[Ð[±n°g¸u�×!Ò! '¨5Ñ1Ô1Ð[Ð[Ð[r   )rŠ   r…   s   `r   r7   zJoyAIEchoMemoryBank.labels  s)   ø€ Ø[Ð[Ð[Ð[È×HXÒHXÑHZÔHZÐ[Ñ[Ô[Ð[r   c                ó0   — | xj         dz  c_         | j         S ©Nr_   )r   r…   s    r   Ú_next_created_atz$JoyAIEchoMemoryBank._next_created_at  s   € ØˆŒ˜1ÑˆŒØŒÐr   r”   rN   c                ó~   — | j                              ¦   «         D ]"\  }}|                     d¦  «        |k    r|c S Œ#d S )Nr”   )r}   r   rd   )r€   r”   r‘   r’   s       r   Ú_slot_for_namez"JoyAIEchoMemoryBank._slot_for_name  sM   € Ø"œl×0Ò0Ñ2Ô2ð 	ð 	‰NˆG�UØ�yŠy˜Ñ Ô  DÒ(Ð(Ø���ð )àˆtr   c                óT   — | j         sd S |                      ¦   «         d         d         S rP   )r}   r�   r…   s    r   Ú_oldest_slotz JoyAIEchoMemoryBank._oldest_slot  s-   € ØŒ|ð 	Ø�4Ø×#Ò#Ñ%Ô% aÔ(¨Ô+Ð+r   c                óV   — t          d| j        dz   ¦  «        D ]}|| j        vr|c S Œd S rš   )Úrangerx   r}   )r€   r‘   s     r   Ú
_free_slotzJoyAIEchoMemoryBank._free_slot  sB   € Ý˜Q ¤°Ñ 1Ñ2Ô2ð 	ð 	ˆGØ˜dœlÐ*Ð*Ø���ð +àˆtr   N©r”   ú
str | Nonec               óX  — t          |                     di ¦  «        ¦  «        t          |                     di ¦  «        ¦  «        t          |                     di ¦  «        ¦  «        dœ}|s|                     d¦  «        r|p|                     d¦  «        |d<   d|v r|d         |d<   |S )Nr]   rT   Úaudio_lengths©r]   rT   r¦   r”   r   )rc   rd   )r€   r’   r”   Úcopieds       r   Ú_copy_entryzJoyAIEchoMemoryBank._copy_entry  s¯   € å˜%Ÿ)š) G¨RÑ0Ô0Ñ1Ô1Ý˜%Ÿ)š) G¨RÑ0Ô0Ñ1Ô1Ý! %§)¢)¨O¸RÑ"@Ô"@ÑAÔAð
ð 
ˆð
 ð 	7�5—9’9˜VÑ$Ô$ð 	7Ø!Ð6 U§Y¢Y¨vÑ%6Ô%6ˆF�6‰NØ˜5Ð Ð Ø#(¨Ô#6ˆF�<Ñ Øˆr   r+   c                ój  — g }|D ]­}|                       |¦  «        }|€|| j        vrt          d|› d�¦  «        ‚|�=|                     |                      || j        |         ¦  «        ¦  «         | j        |= n|| j        v r|                     |¦  «         | j                             |d ¦  «         Œ®|S )Nz"JoyAI-Echo /drop_mem memory name 'ú' was not found.)r�   r~   ÚRuntimeErrorÚappendr–   r}   Úpop)r€   r+   Údroppedr”   r‘   s        r   ÚdropzJoyAIEchoMemoryBank.drop)  sÍ   € ØˆØð 		'ð 		'ˆDØ×)Ò)¨$Ñ/Ô/ˆGØˆ 4¨t¬zÐ#9Ð#9Ý"Ð#^ÈÐ#^Ð#^Ð#^Ñ_Ô_Ð_ØÐ"Ø—’˜t×0Ò0°¸$¼,ÀwÔ:OÑPÔPÑQÔQÐQØ”L Ð)Ð)Ø˜œÐ#Ð#Ø—’˜tÑ$Ô$Ð$ØŒJ�NŠN˜4 Ñ&Ô&Ð&Ð&Øˆr   útuple[list[str], list[str]]c                ód  ‡ ‡— t          t                               |¦  «        ¦  «        }t          |¦  «        Šˆˆ fd„‰                      ¦   «         D ¦   «         }ˆfd„‰ j                             ¦   «         D ¦   «         ‰ _        ˆˆ fd„t          ‰ j        ¦  «        D ¦   «         }|D ]†}‰                      |¦  «        �Œ|‰ j	        vrt          d|› d�¦  «        ‚‰                      |‰ j	        |         d¬¦  «        \  }}|�|                     |¦  «         |                     |¦  «         Œ‡||fS )Nc                óp   •— g | ]2\  }}|                      d ¦  «        ‰v¯‰                     ||¦  «        ‘Œ3S r£   )rd   r–   )r   r‘   r’   Úrequested_setr€   s      €€r   r   z,JoyAIEchoMemoryBank.load.<locals>.<listcomp>:  si   ø€ ð  Kð  Kð  K¹>¸7ÀEÐch×clÒclÐmsÑctÔctð  }Jð  dJð  dJ�T×&Ò& w°Ñ6Ô6ð  dJð  dJð  dJr   c                óJ   •— i | ]\  }}|                      d ¦  «        ‰v ¯||“Œ S r£   r�   )r   r‘   r’   r´   s      €r   ú
<dictcomp>z,JoyAIEchoMemoryBank.load.<locals>.<dictcomp>;  s:   ø€ ÐxÐxÐx©>¨7°EÐUZ×U^ÒU^Ð_eÑUfÔUfÐjwÐUwÐUw˜ ÐUwÐUwÐUwr   c                ó–   •— g | ]E}‰j         |                              d ¦  «        ‰v ¯$‰                     |‰j         |         ¦  «        ‘ŒFS r£   )r}   rd   r–   )r   r‘   r´   r€   s     €€r   r   z,JoyAIEchoMemoryBank.load.<locals>.<listcomp><  s�   ø€ ð  _ð  _ð  _ÈÐkoÔkwÐxô  lA÷  lEò  lEð  FLñ  lMô  lMð  Q^ð  l^ð  l^�$×#Ò# G¨T¬\¸'Ô-BÑCÔCð  l^ð  l^ð  l^r   z"JoyAI-Echo /load_mem memory name 'r«   F©Úupdate_cache)Úlistrc   ÚfromkeysÚsetrŠ   r}   r   r‰   r�   r~   r¬   Ú_store_named_entryr­   Úextend)	r€   r+   Ú	requestedÚ	discardedÚloadedr”   Ústored_labelÚdiscarded_labelsr´   s	   `       @r   ÚloadzJoyAIEchoMemoryBank.load7  sƒ  øø€ Ý�Ÿš uÑ-Ô-Ñ.Ô.ˆ	Ý˜I™œˆð Kð  Kð  Kð  Kð  KÈT×M]ÒM]ÑM_ÔM_ð  Kñ  Kô  Kˆ	ØxÐxÐxÐx¸T¼\×=OÒ=OÑ=QÔ=QÐxÑxÔxˆŒð _ð  _ð  _ð  _ð  _ÕSYÐZ^ÔZfÑSgÔSgð  _ñ  _ô  _ˆØð 	/ð 	/ˆDØ×"Ò" 4Ñ(Ô(Ð4ØØ˜4œ:Ð%Ð%Ý"Ð#^ÈÐ#^Ð#^Ð#^Ñ_Ô_Ð_Ø-1×-DÒ-DÀTÈ4Ì:ÐVZÔK[ÐjoÐ-DÑ-pÔ-pÑ*ˆLÐ*ØÐ'Ø—’˜lÑ+Ô+Ð+Ø×ÒÐ-Ñ.Ô.Ð.Ð.Ø�yÐ Ð r   útuple[int | None, list[str]]c                ó’  — | j         dk    rd g fS g }|                      |¦  «        p|                      ¦   «         }|€K|                      ¦   «         }|�4|                     |                      || j        |         ¦  «        ¦  «         n=|| j        v r4|                     |                      || j        |         ¦  «        ¦  «         ||fS rP   )rx   r�   r¢   rŸ   r­   r–   r}   )r€   r”   rÀ   r‘   s       r   Ú_target_slot_for_namez)JoyAIEchoMemoryBank._target_slot_for_nameH  sÊ   € ØŒ=˜AÒÐØ˜�8ˆOØˆ	Ø×%Ò% dÑ+Ô+Ð@¨t¯ªÑ/@Ô/@ˆØˆ?Ø×'Ò'Ñ)Ô)ˆGØÐ"Ø× Ò  ×!2Ò!2°7¸D¼LÈÔ<QÑ!RÔ!RÑSÔSÐSøØ˜œÐ$Ð$Ø×Ò˜T×.Ò.¨w¸¼ÀWÔ8MÑNÔNÑOÔOÐOØ˜	Ð!Ð!r   Tr¸   r¹   r   útuple[str | None, list[str]]c               ó   — |                       ||¬¦  «        }|r|                       ||¬¦  «        | j        |<   |                      |¦  «        \  }}|€d |fS |                      ¦   «         |d<   || j        |<   |                      ||¦  «        |fS )Nr£   r   )r©   r~   rÇ   r›   r}   r–   )r€   r”   r’   r¹   r‘   rÀ   s         r   r½   z&JoyAIEchoMemoryBank._store_named_entryU  s¦   € Ø× Ò  ¨TÐ Ñ2Ô2ˆØð 	BØ#×/Ò/°¸DÐ/ÑAÔAˆDŒJ�tÑØ!×7Ò7¸Ñ=Ô=Ñˆ�Øˆ?Ø˜�?Ð"Ø"×3Ò3Ñ5Ô5ˆˆlÑØ %ˆŒ�WÑØ× Ò  ¨%Ñ0Ô0°)Ð;Ð;r   c                óŒ  — | j         dk    rd g fS |                      ¦   «         }g }|€J|                      ¦   «         }|�4|                     |                      || j        |         ¦  «        ¦  «         |€d |fS |                      |¦  «        }|                      ¦   «         |d<   || j        |<   |                      ||¦  «        |fS )Nr   r   )rx   r¢   rŸ   r­   r–   r}   r©   r›   )r€   r’   r‘   rÀ   s       r   Ú_store_active_entryz'JoyAIEchoMemoryBank._store_active_entry`  sÒ   € ØŒ=˜AÒÐØ˜�8ˆOØ—/’/Ñ#Ô#ˆØˆ	Øˆ?Ø×'Ò'Ñ)Ô)ˆGØÐ"Ø× Ò  ×!2Ò!2°7¸D¼LÈÔ<QÑ!RÔ!RÑSÔSÐSØˆ?Ø˜�?Ð"Ø× Ò  Ñ'Ô'ˆØ"×3Ò3Ñ5Ô5ˆˆlÑØ %ˆŒ�WÑØ× Ò  ¨%Ñ0Ô0°)Ð;Ð;r   rk   rn   útorch.Tensor | Nonerp   Úaudio_sample_rateÚcenter_ratioúfloat | NonerX   c                óH  — |€d S |                      ¦   «                              ¦   «                              ¦   «         }t          |j        d         ¦  «        }|€¦|€t          d|dz  ¦  «        nvt          dt          t          t          t          |¦  «        t          t          |dz
  d¦  «        ¦  «        z  ¦  «        ¦  «        t          |dz
  d¦  «        ¦  «        ¦  «        }	||d d …d d …|	|	dz   …f         ii i dœS |                      ¦   «                              ¦   «                              ¦   «         }t          |j        d         ¦  «        }
|�|€d nt          |d¬¦  «        }|€d nIt          t          t          |¦  «        t          t          |
dz
  d¦  «        ¦  «        z  ¦  «        ¦  «        }t          ||||| j        |¬¦  «        \  }}||z   }t          ||
||¦  «        }	||d d …d d …|	|	dz   …f         i||d d …d d …||…f         i|t          |¦  «        idœS )Nr^   r   r_   r§   F)Úchannels_first©Úcenter_latent)ÚdetachÚcpure   rJ   rS   rf   rR   rQ   rL   Ú_normalize_waveformÚ_select_audio_window_startrz   Ú_video_idx_from_audio_window)r€   rg   rk   rn   rp   Úaudio_waveformrÍ   rÎ   Úvideo_framesÚ	video_idxÚtotal_audio_framesÚwaveformrÓ   Úwindow_startÚ
window_lenÚ
window_ends                   r   Ú_build_entryz JoyAIEchoMemoryBank._build_entryp  sî  € ØÐØ�4Ø#×*Ò*Ñ,Ô,×0Ò0Ñ2Ô2×=Ò=Ñ?Ô?ˆÝ˜<Ô-¨aÔ0Ñ1Ô1ˆØÐØ5AÐ5I�˜A˜|¨qÑ0Ñ1Ô1Ð1ÍsÐSTÕVYÕZ]Õ^cÕdiÐjvÑdwÔdwÕzõ  ADð  EQð  TUñ  EUð  WXñ  AYô  AYñ  {Zô  {Zñ  eZñ  _[ô  _[ñ  [\ô  [\õ  ^að  bnð  qrñ  brð  tuñ  ^vô  ^vñ  Wwô  Wwñ  Pxô  PxˆIØ# \°!°!°!°Q°Q°Q¸	ÀIÐPQÁMÐ8QÐ2QÔ%RÐSÐ^`ÐsuÐvÐvÐvØ#×*Ò*Ñ,Ô,×0Ò0Ñ2Ô2×=Ò=Ñ?Ô?ˆÝ  Ô!3°AÔ!6Ñ7Ô7ÐØ)Ð1Ð5FÐ5N�4�4ÕTgÐhvð  HMð  UNñ  UNô  UNˆØ ,Ð 4˜˜½#½eÅEÈ,ÑDWÔDWÕZ_Õ`cÐdvÐyzÑdzÐ|}Ñ`~Ô`~ÑZÔZÑDñ  ?Aô  ?Añ  ;Bô  ;BˆÝ#=¸eÀ\ÐS[Ð]nÐptô  qGð  Wdð  $eñ  $eô  $eÑ ˆ�jØ! JÑ.ˆ
Ý0°Ð?QÐS_ÐakÑlÔlˆ	à˜\¨!¨!¨!¨Q¨Q¨Q°	¸IÈ¹MÐ0IÐ*IÔJÐKØ˜\¨!¨!¨!¨Q¨Q¨Q°¸ZÐ0GÐ*GÔHÐIØ#¥S¨¡_¤_Ð5ð
ð 
ð 	
r   rW   Ústore_selectorsúlist[str] | Nonec                óB  ‡— |r‰sg g fS d|v sd|v r|nd|i}t          ‰¦  «        dk    rd gn'ˆfd„t          t          ‰¦  «        ¦  «        D ¦   «         }g g }	}t          ‰|¦  «        D �]1\  }
}i i i dœ}|                     ¦   «         D ]Ã\  }}t	          |t
          ¦  «        sŒ|                      |||                     d¦  «        |                     d¦  «        |||¬¦  «        }|€Œ`|d                              |d         ¦  «         |d                              |d         ¦  «         |d	                              |d	         ¦  «         ŒÄ|d         rE|  	                    |
|¦  «        \  }}|�| 
                    |¦  «         |	                     |¦  «         �Œ3||	fS )
Nr[   r\   r_   c                óZ   •— g | ]'}|d z   t          t          ‰¦  «        d z   ¦  «        z  ‘Œ(S )r_   )rL   r„   )r   Úslotrâ   s     €r   r   z6JoyAIEchoMemoryBank.add_generation.<locals>.<listcomp>‰  sS   ø€ ð  BXð  BXð  BXÐswÀ4È!Á8ÍuÕUXÐYhÑUiÔUiÐlmÑUmÑOnÔOnÑBnð  BXð  BXð  BXr   r§   r]   rT   )rÎ   r¦   )r„   r¡   Úzipr   rb   rc   rá   rd   Úupdater½   r­   r¾   )r€   rg   rW   rÙ   rÍ   râ   rh   Úcenter_ratiosÚstoredrÀ   r”   rÎ   r’   rk   rl   Úphase_entryrÂ   rÃ   s        `            r   Úadd_generationz"JoyAIEchoMemoryBank.add_generation…  sD  ø€ Øð 	 _ð 	Ø�r�6ˆMØ*2°nÐ*DÐ*DÈÐTbÐHbÐHb˜˜Ðiqð  tBð  iCˆÝ"% oÑ"6Ô"6¸!Ò";Ð";˜˜˜ð  BXð  BXð  BXð  BXõ  |Aõ  BEð  FUñ  BVô  BVñ  |Wô  |Wð  BXñ  BXô  BXˆØ �	ˆÝ"% o°}Ñ"EÔ"Eð 	3ñ 	3ÑˆD�,Ø ¨2ÀÐCÐCˆEØ"/×"5Ò"5Ñ"7Ô"7ð Lð L‘��wÝ! '­4Ñ0Ô0ð ØØ"×/Ò/°°u¸g¿kºkÈ'Ñ>RÔ>RÐT[×T_ÒT_Ð`gÑThÔThÐjxð  {Lð  [gÐ/ñ  hô  h�ØÐ&ØØ�g”×%Ò% k°'Ô&:Ñ;Ô;Ð;Ø�g”×%Ò% k°'Ô&:Ñ;Ô;Ð;Ø�oÔ&×-Ò-¨k¸/Ô.JÑKÔKÐKÐKØ�WŒ~ð 3Ø15×1HÒ1HÈÈuÑ1UÔ1UÑ.�Ð.ØÐ+Ø—M’M ,Ñ/Ô/Ð/Ø× Ò Ð!1Ñ2Ô2Ð2ùØ�yÐ Ð r   Úmemoryc                óì  — t          |t          ¦  «        r|                     di ¦  «        ni }t          |t          ¦  «        r|                     di ¦  «        ni }|sg g fS g g }}t          d„ |                     ¦   «         D ¦   «         ¦  «        }t          |                     d¦  «        pg ¦  «        }t          |¦  «        D �]­}i i i dœ}	|                     ¦   «         D ]x\  }
}|�q|t          |j	        d         ¦  «        k     rS| 
                    ¦   «                              ¦   «                              ¦   «         d d …d d …||dz   …f         |	d         |
<   Œy|                     ¦   «         D ]Š\  }
}|�ƒ|t          |¦  «        k     rp||          
                    ¦   «                              ¦   «                              ¦   «         |	d         |
<   t          ||         j	        d         ¦  «        |	d         |
<   Œ‹|	d         rp|t          |¦  «        k     r||         r||         nd	|dz   › �}|                      ||	¦  «        \  }}|�|                     |¦  «         |                     |¦  «         �Œ¯||fS )
Nr]   rT   c              3  óN   K  — | ] }|®t          |j        d         ¦  «        V — Œ!d S )Nr^   )rJ   rS   )r   Úlatents     r   ú	<genexpr>z<JoyAIEchoMemoryBank.add_artificial_memory.<locals>.<genexpr>£  s6   è è € ÐjÐj¨VÐW]ÐWi•C˜œ QœÑ(Ô(ÐWiÐWiÐWiÐWiÐjÐjr   r+   r§   r^   r_   r¦   Úcontrol)rb   rc   rd   rf   Úvaluesrº   r¡   r   rJ   rS   rÔ   rÕ   re   r„   r½   r­   r¾   )r€   rí   Úphase_video_latentsÚphase_audio_slotsrê   rÀ   Úslotsr+   Úslot_idxr’   rk   rð   Úaudio_slotsr”   rÂ   rÃ   s                   r   Úadd_artificial_memoryz)JoyAIEchoMemoryBank.add_artificial_memory�  s˜  € Ý9CÀFÍDÑ9QÔ9QÐY˜fŸjšj¨°"Ñ5Ô5Ð5ÐWYÐÝ7AÀ&Í$Ñ7OÔ7OÐW˜FŸJšJ w°Ñ3Ô3Ð3ÐUWÐØ"ð 	Ø�r�6ˆMØ �	ˆÝÐjÐjÐ7J×7QÒ7QÑ7SÔ7SÐjÑjÔjÑjÔjˆÝ�V—Z’Z Ñ(Ô(Ð.¨BÑ/Ô/ˆÝ˜e™œð 	3ñ 	3ˆHØ ¨2ÀÐCÐCˆEØ!4×!:Ò!:Ñ!<Ô!<ð nð n‘��vØÐ%¨(µS¸¼Àa¼Ñ5IÔ5IÒ*IÐ*IØ,2¯MªM©O¬O×,?Ò,?Ñ,AÔ,A×,LÒ,LÑ,NÔ,NÈqÈqÈqÐRSÐRSÐRSÐU]Ð`hÐklÑ`lÐUlÐOlÔ,m�E˜'”N 5Ñ)øØ&7×&=Ò&=Ñ&?Ô&?ð Xð XÑ"��{ØÐ*¨x½#¸kÑ:JÔ:JÒ/JÐ/JØ,7¸Ô,A×,HÒ,HÑ,JÔ,J×,NÒ,NÑ,PÔ,P×,[Ò,[Ñ,]Ô,]�E˜'”N 5Ñ)Ý47¸ÀHÔ8MÔ8SÐTUÔ8VÑ4WÔ4W�E˜/Ô*¨5Ñ1øØ�WŒ~ð 3Ø*2µS¸±Z´ZÒ*?Ð*?ÀEÈ(ÄOÐ*?�u˜X”�ÐYqÐckÐnoÑcoÐYqÐYq�Ø15×1HÒ1HÈÈuÑ1UÔ1UÑ.�Ð.ØÐ+Ø—M’M ,Ñ/Ô/Ð/Ø× Ò Ð!1Ñ2Ô2Ð2ùØ�yÐ Ð r   r[   c                óœ   ‡— ˆfd„|                       ¦   «         D ¦   «         }|sd S t          j        |d¬¦  «                             ¦   «         S )Nc                óF   •— g | ]\  }}‰|d          v ¯|d          ‰         ‘ŒS )r]   r
   ©r   Ú_r’   rk   s      €r   r   z4JoyAIEchoMemoryBank.video_latent.<locals>.<listcomp>·  ó7   ø€ ÐgÐgÐg©X¨Q°ÈuÐX]Ð^eÔXfÐOfÐOf�5˜”> %Ô(ÐOfÐOfÐOfr   r^   ©Údim©rŠ   ÚtorchÚcatre   ©r€   rk   rl   s    ` r   rn   z JoyAIEchoMemoryBank.video_latent¶  óV   ø€ ØgÐgÐgÐg¸×9IÒ9IÑ9KÔ9KÐgÑgÔgˆØð 	Ø�4ÝŒy˜ aÐ(Ñ(Ô(×3Ò3Ñ5Ô5Ð5r   c                óœ   ‡— ˆfd„|                       ¦   «         D ¦   «         }|sd S t          j        |d¬¦  «                             ¦   «         S )Nc                óF   •— g | ]\  }}‰|d          v ¯|d          ‰         ‘ŒS )rT   r
   rü   s      €r   r   z4JoyAIEchoMemoryBank.audio_latent.<locals>.<listcomp>½  rþ   r   r^   rÿ   r  r  s    ` r   rp   z JoyAIEchoMemoryBank.audio_latent¼  r  r   c                ól   ‡— ˆfd„|                       ¦   «         D ¦   «         }|sd S t          |¦  «        fS )Nc                óF   •— g | ]\  }}‰|d          v ¯|d          ‰         ‘ŒS )r¦   r
   rü   s      €r   r   z=JoyAIEchoMemoryBank.audio_segment_lengths.<locals>.<listcomp>Ã  s9   ø€ ÐwÐwÐw±X°Q¸ÐW\Ð`eÐfuÔ`vÐWvÐWv�5˜Ô)¨%Ô0ÐWvÐWvÐWvr   )rŠ   Útuple)r€   rk   Úlengthss    ` r   Úaudio_segment_lengthsz)JoyAIEchoMemoryBank.audio_segment_lengthsÂ  sD   ø€ ØwÐwÐwÐwÀ×AQÒAQÑASÔASÐwÑwÔwˆØð 	Ø�4Ý�g‘”Ð Ð r   c                óä   ‡— t          ˆfd„| j                             ¦   «         D ¦   «         ¦  «        }t          ˆfd„| j                             ¦   «         D ¦   «         ¦  «        }|dk    o||k    S )Nc              3  ó0   •K  — | ]}‰|d          v ¯dV — ŒdS )r]   r_   Nr
   ©r   r’   rk   s     €r   rñ   z:JoyAIEchoMemoryBank.paired_audio_memory.<locals>.<genexpr>É  ó2   øè è € ÐZÐZ À%È5ÐQXÌ>ÐBYÐBY˜!ÐBYÐBYÐBYÐBYÐZÐZr   c              3  ó0   •K  — | ]}‰|d          v ¯dV — ŒdS )rT   r_   Nr
   r  s     €r   rñ   z:JoyAIEchoMemoryBank.paired_audio_memory.<locals>.<genexpr>Ê  r  r   r   )Úsumr}   ró   )r€   rk   Úvideo_slotsrø   s    `  r   Úpaired_audio_memoryz'JoyAIEchoMemoryBank.paired_audio_memoryÈ  sw   ø€ ÝÐZÐZÐZÐZ¨¬×)<Ò)<Ñ)>Ô)>ÐZÑZÔZÑZÔZˆÝÐZÐZÐZÐZ¨¬×)<Ò)<Ñ)>Ô)>ÐZÑZÔZÑZÔZˆØ˜QŠÐ= ;°+Ò#=Ð=r   )ru   rv   rw   )rx   rJ   ry   rJ   rz   rJ   r   rB   ©r   rJ   )r‘   rJ   r’   rc   r   r   ©r   r   )r”   r   r   rN   )r   rN   )r’   rc   r”   r¤   r   rc   )r+   r   r   r   )r+   r   r   r±   )r”   r   r   rÅ   )r”   r   r’   rc   r¹   r   r   rÈ   )r’   rc   r   rÈ   )NNN)rk   r   rn   rÌ   rp   rÌ   rÍ   rN   rÎ   rÏ   r   rX   )rW   rX   rÍ   rN   râ   rã   r   r±   )rí   rc   r   r±   )r[   )rk   r   r   rÌ   )rk   r   )rk   r   r   r   )Ú__name__Ú
__module__Ú__qualname__r�   r†   rŠ   r�   r–   r7   r›   r�   rŸ   r¢   r©   r°   rÄ   rÇ   r½   rË   rá   rì   rù   rn   rp   r  r  r
   r   r   rt   rt   ï   s%  € € € € € ðð ð ð ð ð!ð !ð !ð !ð,ð ,ð ,ð[ð [ð [ðHð Hð Hð Hð\ð \ð \ð \ðð ð ð ðð ð ð ð,ð ,ð ,ð ,ð
ð ð ð ð >Bð 
ð 
ð 
ð 
ð 
ð 
ðð ð ð ð!ð !ð !ð !ð""ð "ð "ð "ð RVð 	<ð 	<ð 	<ð 	<ð 	<ð 	<ð<ð <ð <ð <ð 
ð 
ð 
ð 
ð 
ð*!ð !ð !ð !ð !ð0!ð !ð !ð !ð26ð 6ð 6ð 6ð 6ð6ð 6ð 6ð 6ð 6ð!ð !ð !ð !ð !ð>ð >ð >ð >ð >ð >ð >r   rt   c                ó¨   — t          t          | j        dd ¦  «        dd ¦  «        }|�*t          |dd ¦  «        }t          |�|n|d         ¦  «        S dS )NÚpipeline_componentsÚvideo_scale_factorsÚtimer   é   )ÚgetattrÚpipelinerJ   )rg   Úscale_factorsÚtime_factors      r   ra   ra   Î  s\   € Ý�G E¤NÐ4IÈ4ÑPÔPÐRgÐimÑnÔn€MØÐ Ý˜m¨V°TÑ:Ô:ˆÝ +Ð"9�;�;¸}ÈQÔ?OÑPÔPÐPØˆ1r   Ú	frame_idxÚstridec                ó\   — | dk    rdS t          | ¦  «        dz
  t          |¦  «        z  dz   S r|   ©rJ   )r#  r$  s     r   r`   r`   Ö  s1   € Ø�A‚~€~ØˆqÝ�	‰NŒN˜QÑ¥3 v¡;¤;Ñ.°Ñ2Ð2r   ©Úmax_secondsÚ	raw_valuer(  rÏ   úlist[tuple[str | None, int]]c          	     ó  — g }t          j        d| pd¦  «        D �]m}|sŒd }|                     ¦   «         }d|v r)|                     dd¦  «        \  }}t          |d¦  «        }|                     ¦   «                              ¦   «         }|                     d¦  «        rt          |d d…         ¦  «        n!t          |¦  «        dz
  t          |¦  «        z  }|�6|t          |¦  «        k    r#t          d|› d	t          |¦  «        › d
�¦  «        ‚|                     d¦  «        r,t          t          |t          |¦  «        z  ¦  «        ¦  «        nt          |¦  «        dz
  }| 
                    |t          d|¦  «        f¦  «         �Œo|S )Nz\s*,\s*Ú ú=r_   r!   Úséÿÿÿÿz*JoyAI-Echo Control Video Memory position 'z' is beyond the first z	 seconds.r   )r   r   r   r&   ÚlowerÚendswithrL   rJ   r#   rQ   r­   rf   )	r)  rK   r(  Ú	positionsÚraw_posr”   r   Úsecondsr#  s	            r   Ú_parse_control_memory_positionsr5  Ü  s   € Ø€IÝ”8˜J¨	¨°RÑ8Ô8ð 4ñ 4ˆØð 	ØØˆØ—’‘”ˆØ�%ˆ<ˆ<ØŸ+š+ c¨1Ñ-Ô-‰KˆD�%Ý(¨¨}Ñ=Ô=ˆDØ—’‘”×#Ò#Ñ%Ô%ˆØ',§~¢~°cÑ':Ô':Ð]•%˜˜c˜r˜cœ
Ñ#Ô#Ð#ÅÀUÁÄÈaÁÕSXÐY\ÑS]ÔS]Ñ@]ˆØÐ" wµ°{Ñ1CÔ1CÒ'CÐ'CÝð  CÈ%ð  Cð  CÕgjÐkvÑgwÔgwð  Cð  Cð  Cñ  Dô  Dð  DØ8=¿ºÀsÑ8KÔ8KÐ_•C�˜g­¨c©
¬
Ñ2Ñ3Ô3Ñ4Ô4Ð4ÕQTÐUZÑQ[ÔQ[Ð^_ÑQ_ˆ	Ø×Ò˜$¥ A yÑ 1Ô 1Ð2Ñ3Ô3Ð3Ñ3ØÐr   r¤   c               óz   — 	 t          | ||¬¦  «         n&# t          $ r}t          |¦  «        cY d }~S d }~ww xY wd S )Nr'  )r5  Ú	Exceptionr   )r)  rK   r(  Úexcs       r   Ú!validate_control_memory_positionsr9  ï  sX   € ðÝ'¨	°3ÀKÐPÑPÔPÐPÐPøÝð ð ð Ý�3‰xŒxˆˆˆˆˆˆøøøøðøøøàˆ4s   ‚ •
8Ÿ3­8³8)r(  rM   rÑ   útorch.Tensorc               óÂ  — t          j        | d¬¦  «                             ¦   «                              ¦   «         } | j        dk    r|                      d¦  «        } n(| j        dk    r
|s| j        } n| j        dk    r| d         } |�G|rE| d d …d t          t          t          |¦  «        t          |¦  «        z  ¦  «        ¦  «        …f         } |  	                    ¦   «         S )NrÕ   ©Údevicer_   r   r^   rv   )
r  Ú	as_tensorrÔ   rL   ÚndimÚ	unsqueezeÚTrJ   rQ   re   )rÝ   rÑ   r(  rM   s       r   rÖ   rÖ   ÷  sÜ   € ÝŒ˜x°Ð6Ñ6Ô6×=Ò=Ñ?Ô?×EÒEÑGÔG€HØ„}˜ÒÐØ×%Ò% aÑ(Ô(ˆˆØ	Œ˜!Ò	Ð	 NÐ	Ø”:ˆˆØ	Œ˜!Ò	Ð	Ø˜A”;ˆØÐ ;ÐØ˜A˜A˜AÐT¥¥U­5°Ñ+=Ô+=ÅÀkÑ@RÔ@RÑ+RÑ%SÔ%SÑ!TÔ!TÐTÐTÔUˆØ×ÒÑ Ô Ð r   rÝ   Útarget_channelsc                óú  — t          dt          |¦  «        ¦  «        }| j        d         |k    r|                      ¦   «         S | j        d         dk    r(|                      |d¦  «                             ¦   «         S | j        d         |k    r| d |…                              ¦   «         S t          j        | | dd …                              || j        d         z
  d¦  «        gd¬¦  «                             ¦   «         S )Nr_   r   r/  rÿ   )rf   rJ   rS   re   Úrepeatr  r  )rÝ   rB  s     r   Ú_align_waveform_channelsrE    së   € Ý˜!�S Ñ1Ô1Ñ2Ô2€OØ„~�aÔ˜OÒ+Ð+Ø×"Ò"Ñ$Ô$Ð$Ø„~�aÔ˜AÒÐØ�Š˜°Ñ2Ô2×=Ò=Ñ?Ô?Ð?Ø„~�aÔ˜?Ò*Ð*ØÐ(˜Ð(Ô)×4Ò4Ñ6Ô6Ð6ÝŒ9�h ¨¨¨¤× 4Ò 4°_ÀxÄ~ÐVWÔGXÑ5XÐZ[Ñ \Ô \Ð]ÐcdÐeÑeÔe×pÒpÑrÔrÐrr   c                ón   — ddl m} | j        } ||j        |j        |j        |j        | j        ¬¦  «        S )Nr_   )ÚAudioProcessor)rM   Úmel_binsÚmel_hop_lengthÚn_fftr=  )Últx_core.model.audio_vaerG  Úaudio_encoderrM   rH  rI  rJ  r=  )rg   rG  Úencoders      r   Ú_audio_processorrN    se   € Ø8Ð8Ð8Ð8Ð8Ð8àÔ!€GØˆ> gÔ&9ÀGÔDTÐelÔe{ð  DKô  DQð  Z_ô  Zfð  gñ  gô  gð  gr   c           	     óf   — t          t          t          | j        dd ¦  «        dd¦  «        ¦  «        S )NÚ
patchifierÚaudio_latent_downsample_factoré   )rJ   r  rL  )rg   s    r   Ú_audio_latent_downsamplerS    s-   € Ý�w•w˜uÔ2°LÀ$ÑGÔGÐIiÐklÑmÔmÑnÔnÐnr   rÌ   c                ó¨  — t          t          | j        d|j        d         ¦  «        p|j        d         ¦  «        }t	          ||¦  «                             dt          j        ¬¦  «        }t          | ¦  «                             |j	        ¦  «        }| 
                    |                     d¦  «        t          |¦  «        ¦  «        rd S |                     |                     d¦  «        t          |¦  «        ¦  «        }t          | j                             ¦   «         d ¦  «        }|�|j	        n| j	        }|�|j        n| j        }t          j        ¦   «         5  |                      |                     ||¬¦  «        ¦  «                             ¦   «                              ¦   «                              ¦   «         cd d d ¦  «         S # 1 swxY w Y   d S )NÚin_channelsr   rÕ   )r=  Údtype)rJ   r  rL  rS   rE  Útor  Úfloat32rN  r=  Úwaveform_too_short_for_melr@  Úwaveform_to_melÚnextÚ
parametersrV  Úinference_moderÔ   rÕ   re   )	rg   rÝ   rM   rB  Ú	processorÚmelÚaudio_paramsÚaudio_deviceÚaudio_dtypes	            r   Ú_encode_audio_memoryrc    sè  € Ý�' %Ô"5°}ÀhÄnÐUVÔFWÑXÔXÐmÐ\dÔ\jÐklÔ\mÑnÔn€OÝ'¨°/ÑBÔB×EÒEÈUÕZ_ÔZgÐEÑhÔh€HÝ  Ñ'Ô'×*Ò*¨8¬?Ñ;Ô;€IØ×+Ò+¨H×,>Ò,>¸qÑ,AÔ,AÅ3À{ÑCSÔCSÑTÔTð ØˆtØ
×
#Ò
# H×$6Ò$6°qÑ$9Ô$9½3¸{Ñ;KÔ;KÑ
LÔ
L€CÝ˜Ô+×6Ò6Ñ8Ô8¸$Ñ?Ô?€LØ*6Ð*B�<Ô&Ð&ÈÌ€LØ(4Ð(@�,Ô$Ð$ÀeÄk€KÝ	Ô	Ñ	Ô	ð oð oØ×"Ò" 3§6¢6°À[ 6Ñ#QÔ#QÑRÔR×YÒYÑ[Ô[×_Ò_ÑaÔa×lÒlÑnÔnðoð oð oð oñ oô oð oð oð oð oð oð oøøøð oð oð oð oð oð os   ÅA GÇGÇGr_  Úwindow_sizeútuple[int, int]c                óv  — t          | j        d         ¦  «        }t          dt          |¦  «        ¦  «        }||k    r||z
  n|dz
  }t          t	          d|dz   t          d|dz  ¦  «        ¦  «        ¦  «        }|d         |k    r|                     |¦  «         t          j        || j        ¬¦  «        }g }|D ]�}|                     |  	                    d||z    
                    d|dz
  ¦  «                             ¦   «         ¦  «                             ¦   «                              ¦   «                              ¦   «         ¦  «         ŒŽt          |t          t          j        |¦  «                             ¦   «                              ¦   «         ¦  «                 ¦  «        }|t%          ||z   dz
  |dz
  ¦  «        fS )Nr^   r_   r   rR  r/  r<  )rJ   rS   rf   rº   r¡   r­   r  Úaranger=  Úindex_selectÚclampÚlongrL   Úexpr  ÚstackÚargmaxr   rR   )r_  rd  Ú
time_stepsÚ	max_startÚstartsÚoffsetsÚscoresÚstarts           r   Ú_max_response_mel_boundsrt  (  s�  € Ý�S”Y˜q”\Ñ"Ô"€JÝ�a�˜[Ñ)Ô)Ñ*Ô*€KØ,6¸+Ò,EÐ,E�
˜[Ñ(Ð(È:ÐXYÉ>€IÝ•%˜˜9 q™=­#¨a°ÀÑ1AÑ*BÔ*BÑCÔCÑDÔD€FØˆb„z�YÒÐØ�Š�iÑ Ô Ð ÝŒl˜;¨s¬zÐ:Ñ:Ô:€GØ€FØð rð rˆØ�Š�c×&Ò& q¨5°7©?×*AÒ*AÀ!ÀZÐRSÁ^Ñ*TÔ*T×*YÒ*YÑ*[Ô*[Ñ\Ô\×bÒbÑdÔd×hÒhÑjÔj×nÒnÑpÔpÑqÔqÐqÐqÝ�•s�5œ; vÑ.Ô.×5Ò5Ñ7Ô7×<Ò<Ñ>Ô>Ñ?Ô?Ô@ÑAÔA€EØ•#�e˜kÑ)¨AÑ-¨z¸A©~Ñ>Ô>Ð>Ð>r   c                ó  — t          dt          |¦  «        ¦  «        }|                     d¬¦  «                             ¦   «         }t          dt          t	          t          |¦  «        t          | j        j        ¦  «        z  t          t          | ¦  «        ¦  «        z  t          | j        j        ¦  «        z  ¦  «        ¦  «        ¦  «        }t          j
        j                             |dt          d||z  |j        d         z
  ¦  «        f¦  «        }|d ||z  …                              ||¦  «                             ¦   «                              d¬¦  «                             ¦   «         }dt          j        |dz   ¦  «        z  }t          j        |d¦  «        }	|                      ¦   «         }
t          |
|	z
  ¦  «        t&          k     r t          j        |t          j        ¬¦  «        S |	|
|	z
  t,          z  z   }||k    S )	Nr_   r   rÿ   r/  g      4@g:Œ0âŽyE>gš™™™™™É?)rV  )rf   rJ   ÚmeanrL   rQ   rL  rI  rS  rM   r  ÚnnÚ
functionalÚpadrS   ÚreshapeÚsquareÚsqrtÚlog10ÚquantileÚ$JOYAI_AUDIO_SILENCE_DYNAMIC_RANGE_DBÚ
zeros_liker   Ú&JOYAI_AUDIO_SILENCE_THRESHOLD_FRACTION)rg   rÝ   rM   rY   ÚmonoÚsamples_per_latentÚpaddedÚrmsÚdbÚfloorÚpeakÚ	thresholds               r   Ú_audio_energy_maskrŠ  7  sû  € Ý�q�#˜lÑ+Ô+Ñ,Ô,€LØ�=Š=˜Qˆ=ÑÔ×%Ò%Ñ'Ô'€DÝ˜Q¥¥E­%°Ñ*<Ô*<½uÀUÔEXÔEgÑ?hÔ?hÑ*hÕkpõ  rJð  KPñ  rQô  rQñ  lRô  lRñ  +Rõ  UZð  [`ô  [nô  [zñ  U{ô  U{ñ  +{ñ  %|ô  %|ñ  !}ô  !}ñ  ~ô  ~ÐÝŒXÔ ×$Ò$ T¨A­s°1°lÐEWÑ6WÐZ^ÔZdÐegÔZhÑ6hÑ/iÔ/iÐ+jÑkÔk€FØ
Ð4�<Ð"4Ñ4Ð4Ô
5×
=Ò
=¸lÐL^Ñ
_Ô
_×
fÒ
fÑ
hÔ
h×
mÒ
mÐrsÐ
mÑ
tÔ
t×
yÒ
yÑ
{Ô
{€CØ	•”˜C $™JÑ'Ô'Ñ	'€BÝŒN˜2˜sÑ#Ô#€EØ�6Š6‰8Œ8€DÝˆT�E‰\ÑÔÕAÒAÐAÝÔ ­%¬*Ð5Ñ5Ô5Ð5Ø˜ ™Õ)OÑOÑO€IØ�Š?Ðr   rs  rß   Ú
non_silentc           
     ó   — |�Ft          |                     ¦   «         ¦  «        dk    s!t          |                     ¦   «         ¦  «        st	          dt          | ¦  «        ¦  «        S t	          dt          |                     ¦   «         ¦  «        t          |¦  «        z
  ¦  «        }t	          dt          t          | ¦  «        |¦  «        ¦  «        } t          |dz   ¦  «        D ]k}| |z   | |z
  fD ]^}d|cxk    r|k    rOn Œt          |||t          |¦  «        z   …                              ¦   «         ¦  «        rt          |¦  «        c c S Œ_Œl| S r|   )rJ   Únumelr   Úanyrf   rR   r¡   )rs  rß   r‹  ro  ÚradiusÚ	candidates         r   Ú_nearest_nonsilent_window_startr‘  F  sP  € ØÐ�S ×!1Ò!1Ñ!3Ô!3Ñ4Ô4¸Ò9Ð9ÅÀjÇnÂnÑFVÔFVÑAWÔAWÐ9Ý�1•c˜%‘j”jÑ!Ô!Ð!Ý�A•s˜:×+Ò+Ñ-Ô-Ñ.Ô.µ°Z±´Ñ@ÑAÔA€IÝ�•3•s˜5‘z”z 9Ñ-Ô-Ñ.Ô.€EÝ˜	 A™Ñ&Ô&ð &ð &ˆØ &™.¨%°&©.Ð9ð 	&ð 	&ˆIØ�IÐ*Ð*Ò*Ð* Ò*Ð*Ð*Ð*Ð*­t°J¸yÈ9ÕWZÐ[eÑWfÔWfÑKfÐ?fÔ4g×4kÒ4kÑ4mÔ4mÑ/nÔ/nÐ*Ý˜9‘~”~Ð%Ð%Ð%Ð%Ð%øð	&ð €Lr   rÒ   rp   rÓ   c               óð  — t          |j        d         ¦  «        }t          |t          dt          |¦  «        ¦  «        ¦  «        }t          dt          |€||z
  dz  nt          |¦  «        |dz  z
  t          ||z
  d¦  «        ¦  «        ¦  «        }|�|€||fS |�€«t	          | ¦  «                             |j        ¦  «        }	|	                     |                     d¦  «        t          |¦  «        ¦  «        }
t          d|t          | ¦  «        z  t          | ¦  «        dz
  z
  ¦  «        }t          |
|¦  «        \  }}||z   dz   dz  t          | j        j        ¦  «        z  t          | j        j        ¦  «        z  }t          t          |j        d         ¦  «        t          |¦  «        z  d¦  «        }t          t          t          dt          ||¦  «        ¦  «        |z  t          t          |dz
  d¦  «        ¦  «        z  ¦  «        ¦  «        }t          dt          ||dz  z
  t          ||z
  d¦  «        ¦  «        ¦  «        }t!          ||t#          | |t          |¦  «        |¦  «        ¦  «        |fS )Nr^   r_   r   ç      à?r/  ç�íµ ÷Æ°>ç        )rJ   rS   rR   rf   rN  rW  r=  rZ  r@  rS  rt  rL   rL  rI  rM   rQ   r‘  rŠ  )rg   rp   rÝ   rM   rd  rÓ   rY   rß   rs  r^  r_  Ú
mel_windowÚ	mel_startÚmel_endÚcenter_timeÚdurations                   r   r×   r×   R  s¡  € Ý�|Ô)¨!Ô,Ñ-Ô-€LÝ�\¥3 q­#¨kÑ*:Ô*:Ñ#;Ô#;Ñ<Ô<€JÝ�•3¸=Ð;P˜ zÑ1°aÑ7Ð7ÕVYÐZgÑVhÔVhÐkuÐyzÑkzÑVzÕ|ð  AMð  PZñ  AZð  \]ñ  }^ô  }^ñ  _ô  _ñ  `ô  `€EØÐ˜;Ð.Ø�jÐ Ð ØÑÝ$ UÑ+Ô+×.Ò.¨x¬Ñ?Ô?ˆ	Ø×'Ò'¨×(:Ò(:¸1Ñ(=Ô(=½sÀ;Ñ?OÔ?OÑPÔPˆÝ˜˜JÕ)AÀ%Ñ)HÔ)HÑHÕLdÐejÑLkÔLkÐnoÑLoÑpÑqÔqˆ
Ý5°c¸:ÑFÔFÑˆ	�7Ø! GÑ+¨aÑ/°3Ñ6½¸uÔ?RÔ?aÑ9bÔ9bÑbÕfkÐlqÔlô  mLñ  gMô  gMñ  MˆÝ•u˜Xœ^¨BÔ/Ñ0Ô0µ5¸Ñ3EÔ3EÑEÀtÑLÔLˆÝ�E¥# c­3¨{¸HÑ+EÔ+EÑ"FÔ"FÈÑ"QÕTYÕZ]Ð^jÐmnÑ^nÐpqÑZrÔZrÑTsÔTsÑ"sÑtÔtÑuÔuˆÝ�A•s˜=¨:¸©?Ñ:½CÀÈzÑ@YÐ[\Ñ<]Ô<]Ñ^Ô^Ñ_Ô_ˆÝ*¨5°*Õ>PÐQVÐX`ÕbeÐfqÑbrÔbrð  uAñ  ?Bô  ?Bñ  Cô  Cð  EOð  Oð  Or   ©Úmin_idxrÚ   Úaudio_framesrÞ   rœ  c               óX  — |dk    rdn+|t          |dz
  d¦  «        dz  z   t          |dz
  ¦  «        z  }t          t          |¦  «        t          t          t	          |t          t          | dz
  d¦  «        ¦  «        z  ¦  «        ¦  «        t          | dz
  d¦  «        ¦  «        ¦  «        S )Nr_   r“  r   )rf   rL   rJ   rR   rQ   )rÚ   r�  rÞ   rß   rœ  rÎ   s         r   rØ   rØ   d  s¦   € Ø&¨!Ò+Ð+�3�3°,ÅÀZÐRSÁ^ÐUVÑAWÔAWÐZ]ÑA]Ñ2]ÕafÐgsÐvwÑgwÑaxÔaxÑ1x€LÝ�s�7‰|Œ|�S¥¥U¨<½%ÅÀLÐSTÑDTÐVWÑ@XÔ@XÑ:YÔ:YÑ+YÑ%ZÔ%ZÑ![Ô![Õ]`ÐamÐpqÑaqÐstÑ]uÔ]uÑvÔvÑwÔwÐwr   Ú	tile_sizeúint | tuple | list | NoneÚ
num_framesúTilingConfig | Nonec           	     ó¸  — ddl m}m}m} t	          | t
          t          f¦  «        r| r| d         nd } | €d S t          | ¦  «        } | dk    rd S t          dt          t          j
        | dz  ¦  «        dz  ¦  «        ¦  «        }  || t          t          j        | dz  dz  ¦  «        dz  ¦  «        ¬¦  «        }d }|�|d	k    r |d
d¬¦  «        } |||¬¦  «        S )Nr_   )ÚSpatialTilingConfigÚTemporalTilingConfigÚTilingConfigr/  r   é@   é    rR  )Útile_size_in_pixelsÚtile_overlap_in_pixelséñ   éè   éX   )Útile_size_in_framesÚtile_overlap_in_frames)Úspatial_configÚtemporal_config)Últx_core.model.video_vaer¤  r¥  r¦  rb   r
  rº   rJ   rf   ÚmathÚceilr‡  )rŸ  r¡  r¤  r¥  r¦  r°  r±  s          r   Ú_normal_tiling_configrµ  i  s<  € ØaÐaÐaÐaÐaÐaÐaÐaÐaÐaå�)�e¥T˜]Ñ+Ô+ð 9Ø%.Ð8�I˜b”M�M°Dˆ	ØÐØˆtÝ�I‘”€IØ�A‚~€~ØˆtÝ�B��DœI i°"¡nÑ5Ô5¸Ñ:Ñ;Ô;Ñ<Ô<€IØ(Ð(¸YÕ_bÕcgÔcmÐoxÐ|}Ño}ð  BDñ  oDñ  dEô  dEð  HJñ  dJñ  `Kô  `Kð  Lñ  Lô  L€NØ€OØÐ *¨sÒ"2Ð"2Ø.Ð.À3Ð_aÐbÑbÔbˆØˆ< ~ÀÐWÑWÔWÐWr   Ú
video_pathútuple[torch.Tensor, int]c                óÒ  — ddl m} dd l}t          j        dd¬¦  «        \  }}t          j        |¦  «         	  || |¦  «         |                     |dd¬¦  «        \  }}t          j	        |j
        ¦  «                             ¦   «         t          |¦  «        f	 t          j        |¦  «         S # t          $ r Y S w xY w# 	 t          j        |¦  «         w # t          $ r Y w w xY wxY w)	Nr   )Úextract_audio_track_to_wavz.wavÚjoyai_control_audio_)ÚsuffixÚprefixrX  T)rV  Ú	always_2d)Úshared.utils.audio_videor¹  Ú	soundfileÚtempfileÚmkstempÚosÚcloseÚreadr  Ú
from_numpyrA  re   rJ   ÚremoveÚOSError)r¶  r¹  ÚsfÚfdÚwav_pathrT   rM   s          r   Ú_load_control_audiorË  {  s  € ØCÐCÐCÐCÐCÐCØÐÐÐåÔ#¨6Ð:PÐQÑQÔQ�L€BˆÝ„HˆR�L„L€LðØ"Ð" :¨xÑ8Ô8Ð8ØŸWšW X°YÈ$˜WÑOÔOÑˆˆ{ÝÔ ¤Ñ(Ô(×3Ò3Ñ5Ô5µs¸;Ñ7GÔ7GÐGð	ÝŒI�hÑÔÐÐøÝð 	ð 	ð 	ØˆDð	øøøøð	ÝŒI�hÑÔÐÐøÝð 	ð 	ð 	ØˆDð	øøøøøøsB   ¹A B? ÂB/Â/
B<Â;B<Â?C&ÃCÃC&Ã
C#Ã C&Ã"C#Ã#C&c                óh  — t          t          |j        d         ¦  «        t          |¦  «        z  d¦  «        }t          dt          t          | ¦  «        t          |¦  «        z  |¦  «        ¦  «        }t	          t          ||z  t          t          |dz
  d¦  «        ¦  «        z  ¦  «        ¦  «        S )Nr/  r”  r•  r_   r   )rf   rL   rS   rR   rJ   rQ   )r#  rK   rÝ   rM   r�  rš  r4  s          r   Ú_target_audio_center_for_framerÍ  Œ  s�   € Ý•5˜œ¨Ô+Ñ,Ô,­u°[Ñ/AÔ/AÑAÀ4ÑHÔH€HÝ�#•s�5 Ñ+Ô+­e°C©j¬jÑ8¸(ÑCÔCÑDÔD€GÝ�u�W˜xÑ'­%µ°LÀ1Ñ4DÀaÑ0HÔ0HÑ*IÔ*IÑIÑJÔJÑKÔKÐKr   Ú
latent_idxc                óN   — | dk    rdS t          | dz
  |z  dz   |dz  z   ¦  «        S )Nr   r_   r^   r&  )rÎ  r$  s     r   Ú_latent_center_framerÐ  ’  s5   € Ø�Q‚€ØˆqÝ�
˜Q‘ &Ñ(¨1Ñ,°¸!±Ñ<Ñ=Ô=Ð=r   )ÚVAE_tile_sizeÚlatent_indicesú	list[int]ÚheightÚwidthÚ	two_phaseúdict[str, torch.Tensor]c               ó\  — ddl m} ddlm}	 ddlm}
 ddlm} t          | ¦  «        }|si S |rd|dz  |dz  find||fi}|r||f|d	<   t          |d ¦  «        }d
„ |D ¦   «         }| j
        }|D �] }t          dt          |¦  «        dz
  ¦  «        }|dk    rdn
|dz
  |z  dz   }t          |¦  «        dz   |z  }t          d||z
  dz   ¦  «        }t          t          j        t          d|dz
  ¦  «        t          |¦  «        z  ¦  «        ¦  «        |z  dz   } |||||d¬¦  «        }t          |j        d         ¦  «        dk    rŒØt          |j        d         ¦  «        dz
  |z  dk    r.|d t          |j        d         ¦  «        dz
  |z  |z  dz   …         }t          dt#          t%          t'          ||¦  «        |z
  |¦  «        t          dt          t          j        t          |j        d         ¦  «        dz
  |z  ¦  «        ¦  «        ¦  «        ¦  «        ¦  «        }|                     ¦   «         D �]W\  }\  }} |
|t          |¦  «        t          |¦  «        d | j        | j        ¬¦  «        }t/          ¦   «         5   ||||| j        ¬¦  «        }d d d ¦  «         n# 1 swxY w Y   t          |j        d         ¦  «        dk    rµ||                              |d d …d d …t#          |t          |j        d         ¦  «        dz
  ¦  «        t#          |t          |j        d         ¦  «        dz
  ¦  «        dz   …f                              ¦   «                              ¦   «                              ¦   «         ¦  «         ~~ |	¦   «          �ŒY~�Œ"d„ |                     ¦   «         D ¦   «         S )Nr_   )Úencode_video)Úcleanup_memory)Úload_video_conditioningr   )Údecode_video_frames_ffmpegr[   r^   r\   c                ó   — i | ]}|g “ŒS r
   r
   )r   rk   s     r   r¶   z/_encode_control_video_slots.<locals>.<dictcomp>¥  s   € Ð6Ð6Ð6 �5˜"Ð6Ð6Ð6r   r  )Ú
target_fpsÚbridge)rÔ  rÕ  Ú	frame_caprV  r=  r<  c                ój   — i | ]0\  }}|¯|t          j        |d ¬¦  «                             ¦   «         “Œ1S )r^   rÿ   )r  r  re   )r   rk   rö   s      r   r¶   z/_encode_control_video_slots.<locals>.<dictcomp>¼  s?   € ÐiÐiÐi¹L¸EÀ5ÐchÐiˆE•5”9˜U¨Ð*Ñ*Ô*×5Ò5Ñ7Ô7ÐiÐiÐir   )r²  rÙ  Últx_pipelines.utils.helpersrÚ  Últx_pipelines.utils.media_iorÛ  Úshared.utils.video_decoderÜ  ra   rµ  Úvideo_encoderrf   rJ   r³  r´  rL   rS   rR   r`   rÐ  r   rV  r=  r   r­   rÔ   rÕ   re   )rg   r¶  rÒ  rK   rÔ  rÕ  rÖ  rÑ  Úvae_encode_videorÚ  rÛ  rÜ  r$  Úphase_sizesÚtiling_configÚphase_slotsrå  rÎ  Úcontext_start_latentÚstart_frameÚ	end_frameÚframe_countÚframesÚ	local_idxrk   Úphase_heightÚphase_widthr]   Úencodeds                                r   Ú_encode_control_video_slotsró  ˜  sJ  € ØJÐJÐJÐJÐJÐJØ;Ð;Ð;Ð;Ð;Ð;ØEÐEÐEÐEÐEÐEØDÐDÐDÐDÐDÐDå˜EÑ"Ô"€FØð Øˆ	Ø;DÐe�8˜f¨™k¨5°A©:Ð6Ð7Ð7È8ÐV\Ð^cÐUdÐJe€KØð 0Ø!'¨ ˆ�HÑÝ)¨-¸Ñ>Ô>€MØ6Ð6¨+Ð6Ñ6Ô6€KØÔ'€MØ$ð ñ ˆ
Ý" 1¥c¨*¡o¤o¸Ñ&9Ñ:Ô:ÐØ/°1Ò4Ð4�a�aÐ;OÐRSÑ;SÐW]Ñ:]Ð`aÑ:aˆÝ˜‘_”_ qÑ(¨FÑ2ˆ	Ý˜!˜Y¨Ñ4°qÑ8Ñ9Ô9ˆÝ�$œ)¥C¨¨;¸©?Ñ$;Ô$;½eÀF¹m¼mÑ$KÑLÔLÑMÔMÐPVÑVÐYZÑZˆØ+Ð+¨J¸À[Ð]`ÐipÐqÑqÔqˆÝˆvŒ|˜AŒÑÔ 1Ò$Ð$ØÝ�”˜Q”Ñ Ô  1Ñ$¨Ñ.°!Ò3Ð3ØÐQ¥ F¤L°¤OÑ 4Ô 4°qÑ 8¸VÑCÀvÑMÐPQÑQÐQÔRˆFÝ˜�3Õ5Õ6JÈ:ÐW]Ñ6^Ô6^ÐalÑ6lÐntÑuÔuÕwzÐ{|õ  Bõ  CGô  CLõ  NQð  RXô  R^ð  _`ô  Rañ  Nbô  Nbð  efñ  Nfð  jpñ  Mpñ  Cqô  Cqñ  rô  rñ  xsô  xsñ  tô  tñ  uô  uˆ	Ø2=×2CÒ2CÑ2EÔ2Eð 	ñ 	Ñ.ˆEÑ.�L +Ø+Ð+¨F½3¸|Ñ;LÔ;LÕTWÐXcÑTdÔTdÐptð  }Bô  }Hð  QVô  Q]ð  ^ñ  ^ô  ^ˆEÝ'Ñ)Ô)ð eð eØ*Ð*¨5°-ÀÐW\ÔWcÐdÑdÔd�ðeð eð eñ eô eð eð eð eð eð eð eøøøð eð eð eð eå�7”= Ô#Ñ$Ô$ qÒ(Ð(Ø˜EÔ"×)Ò)¨'°!°!°!°Q°Q°Q½¸IÅsÈ7Ì=ÐYZÔK[ÑG\ÔG\Ð_`ÑG`Ñ8aÔ8aÕdgÐhqÕsvÐw~ô  xEð  FGô  xHñ  tIô  tIð  LMñ  tMñ  eNô  eNð  QRñ  eRð  9Rð  3Rô  +S÷  +Zò  +Zñ  +\ô  +\÷  +`ò  +`ñ  +bô  +b÷  +mò  +mñ  +oô  +oñ  pô  pð  pØ�wØˆNÑÔÐÑØ‰FØiÐiÈK×L]ÒL]ÑL_ÔL_ÐiÑiÔiÐis   Ê J!Ê!J%Ê(J%Úcontrol_video_pathÚpositions_textrc   c               ó  ‡— t          ||t          ¬¦  «        }t          |¦  «        \  }	}
t          |	dt          |
¬¦  «        }	t	          | |	|
¦  «        }|€t          d¦  «        ‚t          |j        d         ¦  «        }g }g }|rˆ|D ]„\  }}t          |||	|
|¦  «        }t          | ||	|
t          | j
                             dd¦  «        ¦  «        |¬¦  «        \  }}||vr*|                     |¦  «         |                     |¦  «         Œ…nft          | ||	|
t          | j
                             dd¦  «        ¦  «        ¦  «        \  }}|                     |¦  «         |                     d ¦  «         t          |t          | j
                             dd¦  «        ¦  «        ¦  «        }t          | ¦  «        }g }g Šg }t          ||¦  «        D �]2\  }}t!          t#          d	t          t%          j        t)          |	j        d
         ¦  «        t)          |
¦  «        z  t)          |¦  «        z  t)          |¦  «        z  ¦  «        ¦  «        d	z   ¦  «        |||d	¬¦  «        }||vrœ|                     |¦  «         ‰                     |d d …d d …|||z   …f                              ¦   «                              ¦   «                              ¦   «         ¦  «         |                     |pdt1          |¦  «        d	z   › �¦  «         �Œ4t3          | |||||||¬¦  «        }ˆfd„|D ¦   «         }t5          dt1          |¦  «        › dt7          |¦  «        › dt9          ‰¦  «        › dt          t          ¦  «        › �d¬¦  «         |||dœS )Nr'  T)rÑ   r(  rM   z=JoyAI-Echo Control Video Memory audio is too short to encode.r^   Újoyai_audio_memory_window_sizerw   rÒ   r_   r/  r›  rò   ©rK   rÔ  rÕ  rÖ  rÑ  c                ó0   •— i | ]}|t          ‰¦  «        “ŒS r
   )rº   )r   rk   rø   s     €r   r¶   z.build_control_video_memory.<locals>.<dictcomp>à  s#   ø€ Ð9Ð9Ð9¨%ˆU•D˜Ñ%Ô%Ð9Ð9Ð9r   z*[WAN2GP][JoyAI-Echo] control_memory_slots=z names=z audio_paired=z max_seconds=rD   )r]   rT   r+   )r5  Ú JOYAI_CONTROL_MEMORY_MAX_SECONDSrË  rÖ   rc  r¬   rJ   rS   rÍ  r×   Ú	model_defrd   r­   rR   ra   rç   rØ   rf   r³  r´  rL   rÔ   rÕ   re   r„   ró  rG   r@   r   )rg   rô  rõ  rK   rÔ  rÕ  rÖ  rÑ  r2  rÝ   rM   rp   r�  Úwindow_startsÚwindow_namesr”   r#  rÓ   rÞ   rß   r$  rÒ  r+   rÛ   r]   rT   rø   s                             @r   Úbuild_control_video_memoryrþ  ¿  sØ  ø€ Ý/°ÀÕQqÐrÑrÔr€IÝ/Ð0BÑCÔCÑ€HˆkÝ" 8¸DÕNnð  }Hð  Iñ  Iô  I€HÝ'¨¨x¸ÑEÔE€LØÐÝÐZÑ[Ô[Ð[Ý�|Ô)¨!Ô,Ñ-Ô-€LØ€MØ€LØð 
"Ø(ð 	*ð 	*‰OˆD�)Ý:¸9ÀcÈ8ÐU`ÐbnÑoÔoˆMÝ'AÀ%ÈÐW_ÐalÕnqÐrwô  sB÷  sFò  sFð  Ggð  ikñ  slô  slñ  omô  omð  }Jð  (Kñ  (Kô  (KÑ$ˆL˜*Ø =Ð0Ð0Ø×$Ò$ \Ñ2Ô2Ð2Ø×#Ò# DÑ)Ô)Ð)øð	*õ $>¸eÀ\ÐS[Ð]hÕjmÐnsÔn}÷  oBò  oBð  Ccð  egñ  ohô  ohñ  kiô  kiñ  $jô  $jÑ ˆ�jØ×Ò˜\Ñ*Ô*Ð*Ø×Ò˜DÑ!Ô!Ð!Ý�\¥3 u¤×':Ò':Ð;[Ð]_Ñ'`Ô'`Ñ#aÔ#aÑbÔb€JÝ˜EÑ"Ô"€FØ€NØ€KØ€EÝ! -°Ñ>Ô>ð =ñ =Ñˆ�dÝ0µ°Q½½D¼IÅeÈHÌNÐ[]ÔL^ÑF_ÔF_ÕbgÐhsÑbtÔbtÑFtÕw|ð  ~Añ  xBô  xBñ  GBõ  EJð  KQñ  ERô  ERñ  GRñ  =Sô  =Sñ  9Tô  9Tð  WXñ  9Xñ  2Yô  2Yð  [gð  iuð  wAð  KLð  Mñ  Mô  Mˆ	Ø˜NÐ*Ð*Ø×!Ò! )Ñ,Ô,Ð,Ø×Ò˜|¨A¨A¨A¨q¨q¨q°,ÀÐPZÑAZÐ2ZÐ,ZÔ[×bÒbÑdÔd×hÒhÑjÔj×uÒuÑwÔwÑxÔxÐxØ�LŠL˜Ð;Ð!;­3¨u©:¬:¸©>Ð!;Ð!;Ñ<Ô<Ð<ùÝ'¨Ð/AÀ>ÐWZÐciÐqvð  CLð  \ið  jñ  jô  j€EØ9Ð9Ð9Ð9°5Ð9Ñ9Ô9€EÝ	ð  Hµs¸>Ñ7JÔ7Jð  Hð  HÕSiÐjoÑSpÔSpð  Hð  Hõ  AEð  FQñ  ARô  ARð  Hð  Hõ  adõ  eEñ  aFô  aFð  Hð  Hð  PTð  Uñ  Uô  Uð  UØ U°UÐ;Ð;Ð;r   c                óÄ
  — t          |t          ¦  «        si }|                     di ¦  «        }|                     d¦  «        }|€‰t	          t          | j                             dd¦  «        ¦  «        t          | j                             dd¦  «        ¦  «        t          | j                             dd¦  «        ¦  «        ¬	¦  «        }||d<   t          |p| j                             d
d¦  «        pd¦  «        }t          |t          ¦  «        r|ni }d|pdv }|}t          |	pd¦  «        }	||                     t          d¦  «        t          |¦  «        t          |¦  «        |	f}|�rc|                     d¦  «        |k    �rI|st          d¦  «        ‚t          |¦  «        t          |¦  «        }}|dz  r't          t          j        |dz  ¦  «        dz  ¦  «        n|}|dz  r't          t          j        |dz  ¦  «        dz  ¦  «        n|}t          | |t          |                     t          d¦  «        ¦  «        ||||	dk    |
¬¦  «        }|                     |¦  «        \  }}t          dt!          |¦  «        › dt#          |¦  «        › �¦  «         |r/t          dt!          |¦  «        › dt#          |¦  «        › �¦  «         ||d<   t          |t          ¦  «        r|ni }t          |                     di ¦  «        t          ¦  «        r|                     di ¦  «        ni }|                     dd ¦  «        }|�F|                     t'          |¦  «        ¦  «        }t)          d|› dt#          |¦  «        › �d¬¦  «         d|v rt)          dd¬¦  «         |                     dd ¦  «        }|�"|                     t-          |¦  «        ¦  «         d |v r"t/          |                     d ¦  «        ¦  «        ng }t1          |¦  «        }t1          | j                             d!d"¦  «        ¦  «        }|                     d#¦  «        |                     d#¦  «        |                     d#¦  «        |o|                     d#¦  «        |                     d$¦  «        |                     d$¦  «        |                     d$¦  «        |o|                     d$¦  «        dt          | j                             d%d¦  «        ¦  «        |t:          ||                     ¦   «         d&œ}|                     ¦   «         }t)          d|› d't#          |¦  «        › �d¬¦  «         |pd(|pdv } |||| fS ))NÚ
joyai_echoÚmemory_bankÚjoyai_memory_max_sizeru   Újoyai_memory_num_fix_framesrv   r÷  rw   )rx   ry   rz   rK   é   Ú1r,  r_   Úcontrol_keyzIJoyAI-Echo Control Video Memory requires the original Control Video path.r§  rø  zcontrol video memory stored z
 slot(s): zslots z discarded: Úmodel_optionsr5   ú[WAN2GP][JoyAI-Echo] window=z dropped memories: TrD   Úno_memzk[WAN2GP][JoyAI-Echo] /no_mem is deprecated because memories are no longer saved automatically; ignoring it.r2   r.   Újoyai_audio_memoryFr[   r\   Újoyai_memory_downscale_factor)rn   rp   r  Úpaired_audioÚvideo_latent_stage2Úaudio_latent_stage2Úaudio_segment_lengths_stage2Úpaired_audio_stage2Úfreeze_stage2_audioÚdownscale_factorÚreturn_latentsÚdebug_memoryÚ	window_noÚmemory_labelsz loading memories: ÚV)rb   rc   Ú
setdefaultrd   rt   rJ   rû  rL   ÚJOYAI_CONTROL_MEMORY_SETTINGr¬   r³  r´  rþ  r   rù   rH   r„   r=   r°   r6   rG   rÄ   r3   r0   r   rn   rp   r  r  rF   r7   )!rg   Ú	gen_stateÚcustom_settingsÚvideo_guideÚframe_window_optionsrK   Úvideo_prompt_typerÔ  rÕ  Úguide_phasesrÑ  r  Ú	joy_stater  Úcontrol_memory_enabledrô  r  Útarget_heightÚtarget_widthÚartificial_memoryrê   rÀ   Úwindow_optionsr  r5   r¯   r2   Ústore_mem_selectorsÚrecord_memoryÚaudio_memory_enabledÚreference_contextÚactive_memory_labelsÚclear_control_inputss!                                    r   Úprepare_joyai_echo_contextr,  å  sÁ  € Ý�i¥Ñ&Ô&ð Øˆ	Ø×$Ò$ \°2Ñ6Ô6€IØ—-’- Ñ.Ô.€KØÐÝ)Ý˜œ×,Ò,Ð-DÀaÑHÔHÑIÔIÝ˜uœ×2Ò2Ð3PÐRSÑTÔTÑUÔUÝ! %¤/×"5Ò"5Ð6VÐXZÑ"[Ô"[Ñ\Ô\ð
ñ 
ô 
ˆð
 $/ˆ	�-Ñ å
�Ð;�u”×*Ò*¨5°"Ñ5Ô5Ð;¸Ñ
<Ô
<€CÝ)3°OÅTÑ)JÔ)JÐR�o�oÐPR€OØ Ð%6Ð%<¸"Ð=ÐØ$ÐÝ�|Ð( qÑ)Ô)€LØ% ×':Ò':Õ;WÐY[Ñ'\Ô'\Õ^aÐbhÑ^iÔ^iÕknÐotÑkuÔkuð  xDð  E€KØñ / )§-¢-°Ñ">Ô">À+Ò"MÑ"MØ!ð 	lÝÐjÑkÔkÐkÝ&)¨&¡k¤kµ3°u±:´:�|ˆØCPÐSUÑCUÐh��DœI m°bÑ&8Ñ9Ô9¸BÑ>Ñ?Ô?Ð?Ð[hˆØAMÐPRÑARÐd•s�4œ9 \°BÑ%6Ñ7Ô7¸"Ñ<Ñ=Ô=Ð=ÐXdˆÝ6ØØÝ�×#Ò#Õ$@À"ÑEÔEÑFÔFØØ ØØ" QÒ&Ø'ð	
ñ 	
ô 	
Ðð (×=Ò=Ð>OÑPÔPÑˆ�	ÝÐiµS¸±[´[ÐiÐiÕL_Ð`fÑLgÔLgÐiÐiÑjÔjÐjØð 	aÝÐ_¥3 y¡>¤>Ð_Ð_Õ?RÐS\Ñ?]Ô?]Ð_Ð_Ñ`Ô`Ð`Ø#.ˆ	�-Ñ å-7Ð8LÍdÑ-SÔ-SÐ[Ð)Ð)ÐY[€NÝ?IÈ.×J\ÒJ\Ð]lÐnpÑJqÔJqÕswÑ?xÔ?xð  A�N×&Ò& ¸Ñ;Ô;Ð;ð  A€MØ× Ò  ¨TÑ2Ô2€HØÐØ×"Ò"Õ#8¸Ñ#BÔ#BÑCÔCˆÝÐi¨YÐiÐiÕK^Ð_fÑKgÔKgÐiÐiÐquÐvÑvÔvÐvØ�=Ð Ð ÝÐ{ð  DHð  	Iñ  	Iô  	Ið  	IØ× Ò  ¨TÑ2Ô2€HØÐØ×ÒÕ.¨xÑ8Ô8Ñ9Ô9Ð9ØT_ÐcpÐTpÐTpÕ0°×1BÒ1BÀ;Ñ1OÔ1OÑPÔPÐPÐvxÐÝÐ,Ñ-Ô-€MÝ ¤× 3Ò 3Ð4HÈ%Ñ PÔ PÑQÔQÐà#×0Ò0°Ñ:Ô:Ø#×0Ò0°Ñ:Ô:Ø!,×!BÒ!BÀ8Ñ!LÔ!LØ,ÐZ°×1PÒ1PÐQYÑ1ZÔ1ZØ*×7Ò7¸ÑAÔAØ*×7Ò7¸ÑAÔAØ(3×(IÒ(IÈ(Ñ(SÔ(SØ3Ða¸×8WÒ8WÐX`Ñ8aÔ8aØ#Ý ¤× 3Ò 3Ð4SÐUVÑ WÔ WÑXÔXØ'Ý*ØØ$×+Ò+Ñ-Ô-ðð Ðð  '×-Ò-Ñ/Ô/ÐÝ	Ð
r¨Ð
rÐ
rÕGZÐ[oÑGpÔGpÐ
rÐ
rÐz~ÐÑÔÐØ1ÐU°SÐ=NÐ=TÐRTÐ5UÐØ˜kÐ+>Ð@TÐTÐTr   c                ó²  — |                      dd ¦  «        }|�r=t          dt          |pd¦  «        ¦  «        }	|                     | t	          | ||	t          |pd¦  «        ¦  «        t          |                     d¦  «        |	t          |p| j                             dd¦  «        pd¦  «        |                     d¦  «        ¦  «        |                     d¦  «        |¬¦  «        \  }
}t          d|› d	t          |
¦  «        › d
t          |¦  «        › dt          |j        ¦  «        › �d¬¦  «         |r$t          d|› dt          |¦  «        › �d¬¦  «         |S )NÚ_memory_latentsr   rT   rK   r  Úaudio_sampling_rate)rÙ   rÍ   râ   r  z recorded memories: z; total active memories=z cached memories=TrD   z discarded memories: )r®   rf   rJ   rì   rr   rV   rd   rL   rû  rG   r=   r„   r~   )rg   Úresultr  r&  Úprefix_frames_countÚ	frame_numrK   r  rW   rI   rê   rÀ   s               r   Úrecord_joyai_echo_memoryr3  2  sü  € Ø—Z’ZÐ 1°4Ñ8Ô8€NØñ Ý˜!�SÐ!4Ð!9¸Ñ:Ô:Ñ;Ô;ˆØ'×6Ò6ØÝ  ¨¸ÅSÈÈÐVWÑEXÔEXÑYÔYÝ,¨V¯ZªZ¸Ñ-@Ô-@À+ÍuÐUXð  VAÐ\aÔ\k×\oÒ\oÐpuÐwyÑ\zÔ\zð  VAð  Añ  PBô  PBð  DJ÷  DNò  DNð  Odñ  Deô  Deñ  fô  fØ$ŸjšjÐ)>Ñ?Ô?Ø/ð 7ñ 
ô 
Ñˆ�	õ 	ð  }¨Yð  }ð  }ÕL_Ð`fÑLgÔLgð  }ð  }õ  BEð  FQñ  BRô  BRð  }ð  }õ  ehð  itô  izñ  e{ô  e{ð  }ð  }ð  EIð  	Jñ  	Jô  	Jð  	JØð 	ÝÐq°ÐqÐqÕQdÐenÑQoÔQoÐqÐqÐy}Ð~Ñ~Ô~Ð~Ø€Mr   r  )r   r   r   r   )r   r   r   r   r   r   )r   r   r(   r   r   r   )r7   r   r   r   )r>   r   r   r   )rA   r   r   rB   )rI   rJ   rK   rL   rM   rN   )rW   rX   rI   rJ   rY   rJ   r   rX   r  )r#  rJ   r$  rJ   r   rJ   )r)  r   rK   rL   r(  rÏ   r   r*  )r)  r   rK   rL   r(  rL   r   r¤   )rÑ   r   r(  rÏ   rM   rN   r   r:  )rÝ   r:  rB  rJ   r   r:  )rÝ   r:  rM   rJ   r   rÌ   )r_  r:  rd  rJ   r   re  )rÝ   r:  rM   rJ   rY   rJ   r   r:  )rs  rJ   rß   rJ   r‹  rÌ   r   rJ   )rp   r:  rÝ   rÌ   rM   rN   rd  rJ   rÓ   rN   r   re  )rÚ   rJ   r�  rJ   rÞ   rJ   rß   rJ   rœ  rJ   r   rJ   )rŸ  r   r¡  rN   r   r¢  )r¶  r   r   r·  )r#  rJ   rK   rL   rÝ   r:  rM   rJ   r�  rJ   r   rJ   )rÎ  rJ   r$  rJ   r   rJ   )r¶  r   rÒ  rÓ  rK   rL   rÔ  rJ   rÕ  rJ   rÖ  r   r   r×  )rô  r   rõ  r   rK   rL   rÔ  rJ   rÕ  rJ   rÖ  r   r   rc   )6Ú
__future__r   Úshared.utils.phase_progressr   r³  rÂ  r   rÀ  r  r  rú  r  r�  rF   ÚJOYAI_ECHO_PROMPT_INFOSÚJOYAI_ECHO_INFOSÚJOYAI_ECHO_PROMPT_ENHANCERÚcompiler$   r   r   r&   r,   r0   r3   r6   r=   r@   rH   rV   rr   rt   ra   r`   r5  r9  rÖ   rE  rN  rS  rc  rt  rŠ  r‘  r×   rØ   rµ  rË  rÍ  rÐ  ró  rþ  r,  r3  r
   r   r   ú<module>r:     sC  ðØ "Ð "Ð "Ð "Ð "Ð "Ø >Ð >Ð >Ð >Ð >Ð >à €€€Ø 	€	€	€	Ø 	€	€	€	Ø €€€à €€€ð  @Ð Ø#'Ð  Ø'*Ð $Ø)-Ð &ØÐ ðCÐ ðJ"Ð ðHÐ ð: �”
Ð-Ñ.Ô.€ð,ð ,ð ,ð ,ð:ð :ð :ð :ð	ð 	ð 	ð 	ð NSð ð ð ð ð ð ð:ð :ð :ð :ð9ð 9ð 9ð 9ðMð Mð Mð Mð3ð 3ð 3ð 3ð9ð 9ð 9ð 9ðEð Eð Eð Eð
5ð 5ð 5ð 5ðjð jð jð jð.\>ð \>ð \>ð \>ð \>ñ \>ô \>ð \>ð~ð ð ð ð3ð 3ð 3ð 3ð `dð ð ð ð ð ð ð& [{ð ð ð ð ð ð ð X\Ðw{ð 
!ð 
!ð 
!ð 
!ð 
!ð 
!ðsð sð sð sðgð gð gðoð oð oð oðoð oð oð oð?ð ?ð ?ð ?ðð ð ð ð	ð 	ð 	ð 	ð lpð Oð Oð Oð Oð Oð Oð$ ~ð xð xð xð xð xð xð
Xð Xð Xð Xð$ð ð ð ð"Lð Lð Lð Lð>ð >ð >ð >ð [_ð $jð $jð $jð $jð $jð $jðN \`ð #<ð #<ð #<ð #<ð #<ð #<ðLJUð JUð JUðZð ð ð ð r   