script.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. from pathlib import Path
  2. import gradio as gr
  3. from modules.html_generator import image_to_base64
  4. def generate_html():
  5. css = """
  6. .character-gallery table {
  7. border-collapse: collapse;
  8. table-layout: fixed;
  9. width: 100%;
  10. }
  11. .character-gallery th, .character-gallery td {
  12. padding: 8px;
  13. }
  14. .character-gallery img {
  15. width: 150px;
  16. height: 200px;
  17. object-fit: cover;
  18. }
  19. .character-gallery .placeholder {
  20. width: 150px;
  21. height: 200px;
  22. background-color: gray;
  23. }
  24. .character-gallery tr {
  25. cursor: pointer;
  26. }
  27. .character-gallery .image-td {
  28. width: 150px;
  29. }
  30. .character-gallery .character-td {
  31. text-align: center !important;
  32. }
  33. """
  34. table_html = f'<style>{css}</style><div class="character-gallery"><table>'
  35. # Iterate through files in image folder
  36. for file in Path("characters").glob("*"):
  37. if file.name.endswith(".json"):
  38. character = file.name.replace(".json", "")
  39. table_html += f'<tr onclick=\'document.getElementById("character-menu").children[1].children[1].value = "{character}"; document.getElementById("character-menu").children[1].children[1].dispatchEvent(new Event("change"));\'>'
  40. image_html = "<div class='placeholder'></div>"
  41. for i in [
  42. f"characters/{character}.png",
  43. f"characters/{character}.jpg",
  44. f"characters/{character}.jpeg",
  45. ]:
  46. path = Path(i)
  47. if path.exists():
  48. try:
  49. image_html = f'<img src="data:image/png;base64,{image_to_base64(path)}">'
  50. break
  51. except:
  52. continue
  53. table_html += f'<td class="image-td">{image_html}</td><td class="character-td">{character}</td>'
  54. table_html += "</tr>"
  55. table_html += "</table></div>"
  56. return table_html
  57. def ui():
  58. with gr.Accordion("Character gallery"):
  59. update = gr.Button("Refresh")
  60. gallery = gr.HTML(value=generate_html())
  61. update.click(generate_html, [], gallery)